refs https://github.com/TryGhost/Ghost/issues/12402
- Describes different types of jobs that could be executed depending on the nature of the jobs.
- Lays down ground rules on how to design scheduled jobs
no issue
- When providing a crontab schedule expression it should always contain 6 elements first one of them being a "seconds" schedule description . For example: '0/5 * * * * *' - meaning to run every 5 seconds
no issue
- When jobs are performing CPU intensive tasks they block main process'
event loop. They also can cause memory leaks or unexpected crashes
effectively crashing the parent proccess. To address these issues jobs need to be performed off of main
process. Worker Threads (https://nodejs.org/dist/latest-v12.x/docs/api/worker_threads.html)
are the best candidate for such work.
- These changes introduce an integration on top of bree
(https://github.com/breejs/bree/) which allows to run recurring
jobs in worker thereads. It falls back to child process execution for
Node v10 running without `--experimental-worker` flag.
- bree was chosen not only because it gives a polyfill for older Node
versions. It has support for some of the future use-cases Ghost is looking to
implement, like scheduled jobs.
- This changeset also includes a complete example of job running on an
interval with a possibility for graceful shutdown
no issue
- This is a quick implementation change to prevent from queue stalling and never becoming idle in case there's an error thrown from within the job function/module
- More robust error handling should be designed soon!
no issue
- Jobs should not always be functions, one of the standard practices is having a job defined in a module as a self contained executable function
- First parameter of `addJob` function now also handles path to modules which it imports and executes
no issue
- Accepting the schedule or a data when scheduled job should be run would follow a signature used in other established frameworks: (1) https://github.com/mperham/sidekiq/wiki/Ent-Periodic-Jobs#definition
- Another reason to put scheduling parameter first is this would allow leaving an optional "data" parameter as last
no issue
- CRON format is the most common one used for job scheduling and is well known to most developers
- This will become one of supported formats for job scheduling
refs https://github.com/TryGhost/Ghost/issues/11878
- To be able to identify the reason behind comparison failure on more granular level (like token expiration) had to provide additional information in return result for falsy token comparisons
refs https://github.com/TryGhost/Ghost/issues/11878
- There are multiple reasons why the token can be invalid. This coverage is meant cover these reasons and pave the way for introduction of more rganular errors causing the invlid token
* extracted promise lib files and tests from Ghost
* includes commits:
Updated var declarations to const/let and no lists
Move tests from core to root (#11700)
Extended sequence utility
Moved pipeline/sequence to lib/promise
* included commits:
Updated var declarations to const/let and no lists
Move tests from core to root (#11700)
Updated to use slugify method from SDK for safe string
Added Node v10 Support (#10058)
Dynamic Routing: Added migration for routes.yaml file (#9692)
Fixed missing Bluebird require in `security/password.js` (#9624)
🔥 Drop Node v4 Support
Added unit tests for models.Invite.add
Added lib.security.password lib
Moved unique identifier generation to lib/security
Moved tokens, url safe and safe string utility to lib/security
- History merged from Ghost, setup package structure and added a test
- This is exactly the kind of code that we should keep separate to Ghost, as it's rarely touched
- It's much easier to reason about and test when it's on its own
- `shellSync` was removed in execa v2
- this commit switches the usage to the recommended replacement; `sync`
- also adds a test for changelog, the part of code which uses execa
- the symlink test has been failing for some time because recent minors
of Node 12 produce different size zip files
- we were checking that the produced zip is a specific size, but we
basically just want to check it's smaller than the original folder
- this commit updates the test with the size of the original folder,
found by running `du -b test/fixtures/test-theme/`
refs https://github.com/TryGhost/Ghost/issues/11944
- it's useful for consuming applications to know if images can be transformed outside of actually performing the transform (eg, when outputting "resized" image URLs)
- added `canTransformFiles()` that returns a boolean for whether or not `sharp` is installed
refs TryGhost/Ghost#11835
- this error was added after this package was created. Once this gets released, we will be able to remove the errors file in the core 🥳
no-issue
This is a major change and will require that we explicitly define the
versions of the services which we depend on. This will make sure that
updated services will always be sure of what actions their dependents
will have.
refs https://github.com/TryGhost/Ghost/issues/11794
- archiver has an undocumented dot option, that allows you to include dotfiles
- our existing tests had a dotfile, but we didn't check properly that everything exists
- Swapped to using folder-hash to compare if the original, and compressed-then-decompressed folders are identical
- Added an example of a dotfolder with nested dotfile
- Updated compress to use the dot option, make it optional but on by default
- All var declarations are now const or let as per ES6
- All comma-separated lists / chained declarations are now one declaration per line
- This is for clarity/readability but also made running the var-to-const/let switch smoother
- ESLint rules updated to match
How this was done:
- npm install -g jscodeshift
- git clone https://github.com/cpojer/js-codemod.git
- git clone git@github.com:TryGhost/Ghost.git shallow-ghost
- cd shallow-ghost
- jscodeshift -t ../js-codemod/transforms/unchain-variables.js . -v=2
- jscodeshift -t ../js-codemod/transforms/no-vars.js . -v=2
- yarn
- yarn test
- yarn lint / fix various lint errors (almost all indent) by opening files and saving in vscode
- grunt test-regression
- sorted!
- All var declarations are now const or let as per ES6
- All comma-separated lists / chained declarations are now one declaration per line
- This is for clarity/readability but also made running the var-to-const/let switch smoother
- ESLint rules updated to match
How this was done:
- npm install -g jscodeshift
- git clone https://github.com/cpojer/js-codemod.git
- git clone git@github.com:TryGhost/Ghost.git shallow-ghost
- cd shallow-ghost
- jscodeshift -t ../js-codemod/transforms/unchain-variables.js . -v=2
- jscodeshift -t ../js-codemod/transforms/no-vars.js . -v=2
- yarn
- yarn test
- yarn lint / fix various lint errors (almost all indent) by opening files and saving in vscode
- grunt test-regression
- sorted!