* fix: Added retry config and showed error from subtask in web
* Still fallback to "Task errored" if there's no output
* Create rude-carrots-enjoy.md
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* init remix project
* feat: implemented the remix adapter package
* updated the remix package to return the action variable
* added an example job to the example remix project
* fix: Ensure Side Effects Execution in Remix API Routes
* updated the readme in @trigger.dev/remix package
* doc: added the manual setup guide for remix
* updated the webapp onboarding for remix
* updated the manual setup guide
* added a license to the @trigger.dev/remix package
* added a wait function to the example job
* added a link to the remix webapp onboarding
* Updated the onboarding page
For now, we'll only support existing projects. The button that links to the manual installation was just a blank rectangle – added some text to it.
* Added the Server API key to the instructions
* Remix manual docs
Made some things a bit clearer
- file paths
- exporting the job rather than using a function wrapper
- how to run the app and CLI dev command
* Export the job
* Update api.trigger.ts
* Added tsconfig.json paths
* Remove next dependency
* Package set to 2.1.0 and set dependencies
Shouldn't rely on a specific version in main dependencies. In this case we can just have devDependency for @remix/node
* Changeset
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* feat: add proxy support for node-fetch
This process is expected to allow the CLI and SDK to work in environments where proxy is enabled.
* Revert "feat: add proxy support for node-fetch"
This reverts commit c850030b5927c562921409fc5b798af353a7ac6b.
* feat: add proxy support for node-fetch (CLI only)
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* feat: add testing package
* feat: add unit testing example
* Delete examples/unit-testing/dummy-integration/tasks.ts
* Delete examples/unit-testing/dummy-integration/types.ts
* Update DummyIntegration to new format
* Update testing package to new integration format
* Update readme to new task spy format
* Create rotten-meals-cough.md
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* Removed next references in the ReadMe
* FAQ improvements to update Next.js references
* Added a new Frameworks page with logos to link to the quick start guides
* Renamed the mdx file so the link works
* Added basic platform guides
* Introduction doesn’t reference next.js only
* Added a note about serverless and restructured the side menu
* Added more frameworks pages to the manual install section
* Fixed SVG error
* Coming soon guides now using snippets so they can be in 2 places while we work on them
* Removed redirects
* Added a new named icon
* increased fireworks particle count slightly
* Creating a route for the onboarding and link to access it anytime from the side menu
* Moved the onboarding into new components
* Updated the routes for the onboarding page
* Onboarding is now Setup and the frameworks overview page now links to different framework page in the onboarding side nav
* URLs and pages renamed to ‘setup’
* URLs and pages renamed to ‘setup’
* Fixed some old named component imports
* WIP on a new less hacked-in background image
* Added svg logos for all the frameworks
* New paths for the new framework pages
* Side menu collapses once you selected a framework
* Temporary Nuxt page
* New routes for the new frameworks
* New ‘framework coming soon’ component - now used in the coming soon framework pages
* Moved/removed files
* Moved all svg framework logos into a new folder and file
* balanced the logo sizes
* Framework coming soon pages take a name and url
* New express svg logo
* New component for a Framework item in the grid
* Added information and design for the coming soon frameworks
* Change the grid to 1 row if jobs === 0
* Updated the framework coming soon snippet and added it to the relevant pages
* Express now 2nd in all lists
* Added link to long running server support discussion
* New logo to include next.js + supabase quick start
* roadmap now links to homepage with page anchor to roadmap section
* changelog now links to Github releases page
* Removed reference to Next.js
* Docs pages with coming soon info all share the same framework snippets
* Fixed issue of missing props
* Moved the fireworks effect into a separate file to make it easier for adding more framework onboarding pages
* Info callouts have a more muted style
* Added a callout to the top of the next onboarding to reference Serverless-only support
* Moved the callout explaining scheduled triggers not working in dev to the bottom of the test panel
This is to resolve eric’s UX ticket: https://github.com/triggerdotdev/trigger.dev/issues/416
* Added groundwork for Nest.js framework
* Using framer motion for the menu transition instead of css - now has a slight spring and is snappier
* redirect the manual setup page to the new nextjs setup page
* Fixed broken docs link
* Added a readme.md to next.js package
* Capital I for integration
* Renamed component: NextDevCommand to RunDevCommand
* Made required props non-optional
* CLI now points at manual install guides if no Next project detected
* Explicitly made supported default to false (it was working but a bit hard to read)
* Added links to all github issues for the frameworks coming soon component
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* Added ‘our progress’ table to the readme
* Added link to the connect discussion to the progress table
* Removed link from "Polling Triggers"
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* fix: use NODE_ENV when starting from docker image
When starting from `pnpm run start`, NODE_ENV is fixed to production, causing problems like #186.
So, I added `start_docker`, a process dedicated to docker, and started from it.
The process is exactly the same as `start` except that NODE_ENV is not overwritten.
* fix: align execution name with others
* Change: command name to match review
* CLI create-integration command now accepts an Open AI api key
* Create integration docs separated into multiple pages
* Initial Airtable integration commit, with OpenAI generated code
* OAuth page coming soon
* Export DisplayProperty from the SDK
* TSConfig made to match GitHub’s with paths
* getRecords
* Removed duplicate Stripe job from the catalog
* Renamed Airtable apiKey option to token
* First Airtable job
* Export Collaborator and Attachment field types
* A typesafe example that uses runTask
* WIP on new integration tasks… not working yet
* Attempt with class
* Revert "Attempt with class"
This reverts commit 93a48330019f754c3216c5b49964fa4b0218bd3f.
* WIP changing how tasks work
* Mock of async local storage
* Moved client creation from constructor
* New approach with a clone method on TriggerIntegration
* Added runTask to Airtable which is used by integration tasks
* Added the Airtable icon and connection when using runTask
* base().table() is working
* runTask options moved to the 3rd param, made optional with optional name
* Added some generic arguments
* Added generic type to table
* Removed old comment
* We don’t need to repeat the icon
* getRecords and getRecord now returning the right data and types
* Creating records
* Update records
* Delete records
* The internal properties of integrations are now hidden by the TypeScript types
* Sprinkled a Prettify in there
* Improved the types
* Added Airtable to the integration catalog
* Early work on Airtable webhook registration
* More progress with webhooks
* connectionKey needs to be cloned for webhooks to work
* connectionKey needs to be cloned for webhooks to work
* It was unclear that the ActivateSourceService was using a graphileJob id
* ActivateSourceService optionally takes a jobId, if missing it generate a unique id
* When retrying trigger registration, don’t pass an id so it is generated
* Removed Airtable webhooks tasks from the job-catalog example
* Added TriggerSourceOption, removed TriggerSourceEvent
* WIP with new ExternalSource options
* ExternalSourceTrigger setup
* DynamicTrigger changed to options, will need some more work
* filter gets options passed to it
* SourceMetadata v2 renamed to SourceMetadataV2, kept original
* Started versioning the backend
* Moved param order on io.getEvent and io.cancelEvent
* The runTask stuff that allows unknown to work is back
* Indexing for v1 and v2, with version on “activateSource” schema
* Added todos, to deal with Airtable SDK calls inside the webhook handler
* “deliverHttpSourceRequest” queueName changed to the source id so they process in order
* ActivateSource changes to deal with old and new data formats
* Update existing TriggerSources to v2
* Fix for dynamic.ts typescript errors, need to revisit this later
* UpdateSourceService v1 and v2, with new v2 API endpoint
* Removed unused imports
* More progress on v1 and v2
* Airtable webhooks are now triggering a job
* Moved webhooks to a new file
* You can do API calls in the webhook handler now, Airtable webhook data is being processed
* Airtable events coming through
* Defined the Airtable table payload type
* TriggerSource metadata is being stored and used
* Removed some logs
* Added filtering and don’t allow any webhooks that use automated sources
* Resend switched to new integration
* Moved Resend test jobs to the catalog, and tested it worked
* WIP on Slack, there are compile errors
* Created a generic type that strips out indexes
* Slack updated to use new integration
* SendGrid migrated over
* Integration runTask is now allowing regular types
* Changed io.runTask types so it only allows Json-able types
* OpenAI models tasks working
* Added Airtable changes to runTask
* Removed the index signature crap from the Slack integration
* Don’t need to cast the callback result
* Updated Resend
* Re-ordered runTask params
* WIP on openai
* onAccountUpdated is Connect only
* Removed RunTaskResult
* Handle Resend errors, the official SDK doesn’t expose them properly at the moment
* Removed OmitIndexSignature
* OpenAI converted to new integration, with backwards compatible functions
* Put the openai catalog back to what it was originally
* Export a standard retry with backoff, to be used
* Use the standard exponential backoff in the integrations
* Retry options moved earlier so they can be overriden by a task
* GitHub tasks migrated
* Added sources, fixed one bundling issue
* Added GitHub jobs to catalog
* Remove duplicate options
* Deduplicate events
* Removed duplicate Job
* Switched Plain over
* Set the Plain icon
* Converted Stripe over
* Supabase adapted
* Typeform working
* Added dynamic-schedule to catalog
* Added background-fetch job catalog
* Created dynamic-triggers catalog file
* Fixed old general file with runTask param order
* Dynamic triggers working
* SendGrid updated to use the same tsconfig as other integrations
* Removed Airtable webhook, until we have batch support
* Added OAuth airtable auth example
* Created beta changeset tag
* Beta changesets for most packages
---------
Co-authored-by: Eric Allam <eallam@icloud.com>
This commit fixes various issues with run executions, including a pretty gnarly memory bloat issue when resuming a run that had a decent number of completed tasks (e.g. anything over a few). Other issues fixed:
- Run executions no longer are bound to a queue, which will allow more parallel runs in a single job (instead of 1).
- Serverless function timeouts (504) errors are now handled better, and no longer are retried using the graphile worker failure/retry mechanism (causing massive delays).
- Fixed the job_key design of the performRunExecutionV2 task, which will ensure resumed runs are executed
- Added a mechanism to measure the amount of execution time a given run has accrued, and added a maximum execution duration on the org to be able to limit total execution time for a single run
Performance degradation came from the syntax highlighting of large code blocks and from doing that on the server and the client, so fixed this in a couple of ways:
1. Stream the task details data using defer and Suspense/Await
2. Skipped syntax highlighting code blocks with more than 1k lines
* #344 Upgrading the openai package to v4
* Create neat-roses-wait.md
* Fixed a couple of issues with the openai v4 upgrade
* Added fine tuning job tasks
* Don’t show the Ready To Run Job prompt if you have an Integration that needs attention
* Don’t highlight the row red or green
* Improvements to the contrast of the app sections and dividers
* Removed the Jobs page title as it’s duped info
* using the new border variable
* Sticky last table cell
* Improved the sticky last table cell
* Make any last cell in a table sticky by adding isSticky to it
* Added a dropdown menu to the menu table cell
* table rows can be marked as disabled by adding disabled
* Using the jobTestPath function for the test path
* tidy up imports
* Removed un-used props
* Removed the green badge variant
* Added a new status badge to the Runs table
* Clicking the gradient clicks the row
* Delete Job triggers a modal popup
* Added a large danger button type
* Added some modal styling and started adding data
* Added more styling and data to the delete job modal
* A table can now be given a full width prop
* Large danger button added to Storybook
* Danger button disabled state looks disabled now
* New active badge component to display in the table and logic for showing the env data
* Style updates to the dialog component
* active and job status badges can now have a small size
* Added a new named icon
* The Job page shows the Job status in the PageInfoRow
* Small badge style update
* Runs table has a sticky right cell
* Created a JobStatusTable component
* Added some placeholder help panel content for disabling a Job
* WIP creating a Settings page
* Added a delete button that triggers the delete modal – just need data hooking up
* Implemented deleting jobs from the dashboard
---------
Co-authored-by: Eric Allam <eallam@icloud.com>
* feat: introduce support for native astro integration package
Signed-off-by: Liran Tal <liran.tal@gmail.com>
* fix: update license copyright to match other packages from trigger
Signed-off-by: Liran Tal <liran.tal@gmail.com>
* fix: doc update to refer to the official astro package from trigger
Signed-off-by: Liran Tal <liran.tal@gmail.com>
* fix: repo URLs update accordingly to official repo
Signed-off-by: Liran Tal <liran.tal@gmail.com>
* fix: remove myself as author of the package to not confuse people
Signed-off-by: Liran Tal <liran.tal@gmail.com>
* Remove package-lock because this is now in the pnpm monorepo
---------
Signed-off-by: Liran Tal <liran.tal@gmail.com>
Co-authored-by: Eric Allam <eallam@icloud.com>
* feat: add hostname option to the dev command
- This commit adds a `hostname` option to the cli `dev` command, to allow the cli to point to nextjs applications running on different hostnames other than `localhost`. Example: the nextjs app was started using a --hostname 0.0.0.0 option to be able to be visible from inside docker containers. So adding --hostname 0.0.0.0 to `trigger-cli dev` would make it work.
* docs: add dev cli command hostname option documentation
* feat: add hostname option to the dev command
- This commit adds a `hostname` option to the cli `dev` command, to allow the cli to point to nextjs applications running on different hostnames other than `localhost`. Example: the nextjs app was started using a --hostname 0.0.0.0 option to be able to be visible from inside docker containers. So adding --hostname 0.0.0.0 to `trigger-cli dev` would make it work.
* docs: add dev cli command hostname option documentation
* Update hip-coins-reply.md
---------
Co-authored-by: Eric Allam <eallam@icloud.com>
* WIP job run performance improvements
- Added a `perf` tool to better measure job run performance under heavy load
- Removed `runFinished` job (not really needed)
- startQueuedRuns now uses a jobKey with replace
- Fixed an issue with ZodWorker when using jobKey
* Publish improvement docker images
* fixed the improvement docker publishing
* Downgrade back to prisma 4.16.0 because 5.1.x broke docker builds
* Changes to how queued runs work
- Split the worker into two different workers, one dedicated to performRunExecution
- Schedule performRunExecution in a single place, with a queue and using a round robin manually controlled concurrency
- Remove startQueuedRuns
- All runs are queued before they are started
- Setting the worker maxPoolSize to the same as the worker concurrency
- Starting to be able to split the docker image
* Remove queue name from startRun graphile job
* Make the prisma connection pool stuff configurable through env vars
* Hardcode (for now) the max concurrent runs limit
* Rewrite performRunExecution to be more performant
PerformRunExecutionV2:
- Does not create and manage jobRunExecution records
- Does not reimplement retrying, uses graphile worker retrying instead
I’ve kept around PerformRunExecutionV1 so this works when deploying. Definitely needs LOTS of testing
* Fix issues with cached tasks
- Limit the size of the cached tasks sent when executing a run, using the knapsack problem dynamic programming approach
- Actually USE the cached tasks in IO by using the idempotencyKey instead of the task ID
- Remove output from all logs
- Added a stress test job catalog
* Forgot to commit the logger updates
* Never log connectionString
* Login to docker hub to get around rate limits
* Add additional logging to the graphile workers
* Fix the *_ENABLED env vars
* Allow adding and removing jobs to be done from the webapp
* Don’t set the job to failed if it’s being retried
* Deprecated queue options in the job and removed startPosition. Now using the job/env combo as the job queue name
* Dequeung jobs doesn’t check if the runner is initialized
* Fixed issues with retrying a run getting stuck on a cancelled task, and errors from parsing the results of dequeing a job
* Remove queued round robin thing that isn’t used anymore
* Added slack to job catalog
* Better forwards compat
* Added long delay
* Fixed lock file
* chore: make possible to write tests aside with implementations
* test: write getUserPkgManager test TO-DOs
* test: add test to building the path
* test: add tests to manual file checking
* test: add tests to npm_config_user_agent
* Update packages/cli/src/utils/getUserPkgManager.spec.ts
* test: add test to no-duplicated-task-keys rule
* feat: implement no-duplicated-task-keys
* chore: create testing scripts
* refactor: fill in rule meta
* feat: export no-duplicated-task-keys rule
* chore: bump package version to 0.0.1
* chore: create eslint plugin
* feat: create no-duplicated-task-keys rule
* refactor: delete no-duplicated-task-keys from config-custom
* refactor: rename eslint-plugin folder
* feat: cover case from nextjs-example
* feat: cover additional cases from examples/package-tester
* chore: add eslint-plugin on nextjs-example
* feat: add more cases from `nextjs-example`
* revert: rollback changes on eslint-config-custom
* Set version to 2.0.9, inline with other packages
* Create chilly-pianos-try.md
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* FIx: [TRI-1006] New @trigger.dev/cli whoami command.
* revert dev.ts zod schema to original
* Removed telemetry
* remove all telemetry
* Made the clientId optional again
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* chore: run `pnpm install --prefer-frozen-lockfile`
* chore: install `jest` and `ts-jest`
* test: create `jest.config.js`
* chore: install `@types/jest`
* chore: add `jest` on `tsconfig.json` `types` property
* chore: create test script
* test: create example test 🎉🎊🕺🏼
* chore: install `@gmrchk/cli-testing-library`
* chore: override `tsconfig` with `@trigger.dev/tsconfig`
* test: make poc of cli test
* chore: run build before test
* docs: improve comment
* Added a changeset
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* chore: update prisma from version 4.16.0 to 5.1.0
* fixed the ts-errors due to the prisma update
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* Update integrations.mdx
The first sentence in this paragraph for `### API Keys and Tokens` was missing a word or two and it wasn't entirely clear what did the original author of this docs page intended.
I've entered what seems to be the missing context but happy to re-phrase too if another wording makes better sense here.
* Made it clear that API keys are provided by you in your code
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* docs: Update runs.mdx
From what I can tell, it is expected for run functions to return with some sort of payload. Providing an example here as a reference and guideline.
* Made it clear returning data is optional and added some more detail below
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* Added docs images for supabase
* Compressed some existing images
* Improved some of the main quickstart wording
* First draft of the Supabase quickstart
* Tweaks to the Supabase quickstart and the supabase integration docs
---------
Co-authored-by: James Ritchie <james@jamesritchie.co.uk>
* doc: added a new documentation for event filters
* removed typos from the event filter doc and formatted it better.
* made new changes
- moved the eventfilter doc to the guides section
- linked the old eventfilter doc to the new one
* updated the eventfilter doc based on the requested changes
* fix: support express jsonParser middleware if used in the Express app
* Create sixty-windows-run.md
---------
Co-authored-by: Eric Allam <eallam@icloud.com>
* fix: Handle ngrok config upgrade error in createTunnel function
* Improved the output when upgrading the ngrok configuration
* Create three-flies-sneeze.md
---------
Co-authored-by: Eric Allam <eallam@icloud.com>
* feature: initial work for sendgrid integration
* fix: fixed the ts-error and added sendgrid integration to the job-catalogue
* SendGrid added to dependencies
* Made the from email an env var so it can be tested by non-Trigger.dev team members
* Refactor: Modify sendEmail function to return void and remove SendEmailResponse type
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* Create funny-kangaroos-glow.md
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
Co-authored-by: Eric Allam <eallam@icloud.com>
* Only show the Example Jobs list when you have 1 job
* Updated the logic for displaying the different information depending on the no. of jobs you have
* Removed some unnecessary markup
* Clicking on a radio option toggles the content
* Improved the centering of the help panel
* Conetent updates to the 2 onboarding paths
* Added a prompt so you click through to run your job
* More content updates to the help panel
* Only show the prompt if the Job has never been run
* Added back in the help panel which shows the examples table if you have > 0 jobs
* Added a dialog for the I am Stuck button
* Added the new ‘new-next-app’ text for the cli command
* Refactored the ternary logic so it’s simpler
* Removed I’m stuck button and cleaned up imports
* Added in feedback button
* Added margin bottom to the Callout on the Test popover
* WIP adding a new radio button variant that takes an icon
* Added a new step to create a new next app
* The state of the tabs is stored as a URL param
* Small shadow tweak to the side panel
* Added a Discord button to the feedback menu
* Added new icons to the Named icons component
* Added a gradient to the background of the jobs page
* Made the icons take on color outside of component
* Added another NamedIcon for tree
* Fixed number
* Improved some of the typography styles
* Updated the icons
* Fixed issue with radio buttons alignment
* Added a missing step to the new next app onboarding
* Refactored example code and added all the examples to the panel
* Small icon update
* Made the title white again
* Added an icon to the storybook radiogroup
* Added a badges storybook
* Chevron table cell now takes children
* import cleanup
* Changed the background image from an arbirary value to an import
* Added a NEW badge which shows if you have a new job
* Improved the copy on the Examples help panel and updated some of the layout
* Removed defaultOpen on the help panel
* Stop the icons getting smaller
---------
Co-authored-by: D-K-P <dkp.github@pm.me>
* Changed the example job to include a delay
* Improved the example job copy and added ‘in a separate terminal’ to 2.
* Create kind-eggs-pump.md
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* feat: adds a job catalog file when an integration is created via the CLI
* added a changeset
* fix: create-integration CLI throws an error when it tries to install dependencies
* Update getUserPkgManager.ts to main
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* If an endpointId isn’t in the arguments or package, then use the project slug. Don’t ask for it.
* Should await the package artifact detection
* Catch error thrown if there’s no next.config file when detecting the type of Next project
* Create long-carrots-camp.md
* Fix:[TRI-879]-Hides help panel when endpoints exists on the Environments & API Keys page
* fix: adds check for fully configured client
g
---------
Co-authored-by: Crossover <crossover@MacBook-Pro.local>
* Detect presence of a “next” dependency
* Use a strict undefined check instead
* Changeset: Detect Next.js project by looking at dependencies, not next.config.js
* Read a package json file
* First check for next.config file, otherwise use next dependency
* Update changeset description
* Created the sheet
* Started work on the resource route
* Created ValidateCreateEndpointService and the EndpointValidateApi (name TBC)
* The TriggerClient responds with the id
* Tidied some stuff up
* Alternative: EndpointApi doesn’t take endpointSlug. Instead just Ping() does
* Create cool-snakes-deny.md
---------
Co-authored-by: Eric Allam <eallam@icloud.com>
* update cli init to create index file in examples folder
* add patch changeset
* Create silly-baboons-join.md
* remove comment in router file
add comment in jobs index to instruct them to
* rename examplesIndex to examplesIndexFileName
* import jobs module in routeContent for createTriggerPageRoute just as we did for createTriggerAppRoute
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
* Basic CLI telemetry
* Telemetry for init command
* Better error handling
* Fix for “Module not found: Can't resolve 'encoding' in” node-fetch warning
* Telemetry for dev and tidied up init
* Minor improvements to the telemetry
* Latest package lock file
* Set the PostHog key to the prod one
* Changesets
* Formatted
* Setup project-wide prettier
* Remove old workspace file
* Remove old debugging directives
* New top-level .prettierignore
* Updated Prettier config settings
* Contrubuting guide: Fix for some bad code blocks
* Added more ignores
* Improved the format script command
* printWidth set to 100
* Formatted entire repo (pnpm run format)
* Changeset should ignore the example projects
* Removed note in Contributing instructions about not adding a changeset for internal
* Renamed @trigger.dev/internal to @trigger.dev/core. Set sdk and internal to be ES2020, so we don’t get errors about private identifiers
* Env vars in nextjs-example use square bracket syntax to avoid Turbo Repo errors
* Set the tsconfigs back for core and sdk
* @examples/nextjs compile error with undefined tasks
* Set the example projects to use ES2015 to avoid private modifier complaints
* package-tester example, which will use built packages
* package-tester package.json
* Created a readme for the package-tester
* Added all the packages to package-tester
* Create .env.local.example and readme instructions
* Added name to the package.json
* Upgraded @types/react and @types/react-dom everywhrre, so we can use server actions
* Upgraded @types/react and @types/react-dom everywhrre, so we can use server actions
* Reworked the react package build, so it generates separate files
* The SDK no longer bundles core
* package-tester setup with a server action and react hooks
* Added new SDK methods with logging
* Working tsup settings for client and server
* Explicit react hooks return types
* Added all the hooks for testing
* Added OpenAI step to the job to check types are still ok in integrations
* Get rid of rogue Changeset ignores
* Changeset: @trigger.dev/core is now a separate package
* Exited prerelease mode, added a changeset
* Changed @next to @latest
* Deleted seed.js, this shouldn’t be committed
* Ignore seed.js
* The webapp was importing @trigger.dev/core with a folder path rather package name…
* More webapp imports instead of @trigger.dev/core were a folder path
* Accidentally edited Stripe internal API url in the comment
* Added “sideEffects”: false so @trigger.dev/core is tree shaken by Remix
* WIP supabase integration
* supabase oauth working
* Supabase database triggers
* Specify postgres:14
* Limit refreshOAuthToken jobs to 10 attempts
* Better displaying types and removing onChange for now
* WIP on the supabase db client
* Finishing the supabase-js integration
* Adding changeset
* Added supabase to the integration catalogs, and added an optional icon to Integrations
* Reworking how we handle types for the triggers (wip)
* Update fully over to the new way to define supabase triggers
* Go back to using the type for the event name
* Add back in the icon to the JobListPresenter since it was moved from the ProjectPresenter
* Remove unused import
* chore(contrib): added a few jobs
* chore(contrib): adds sample jobs for repo setup
* chore(contrib): refactor examples/jobs-starter
* docs(contrib): add steps to add starter jobs
* fix(contrib): typo
* chore(contrib): minor edits
* chore(contrib): update guide and starter code
* chore: use endpointId if package.json has it
* minor
* add changeset
* chore: include changeset
* chore: add proper summary to changeset
* chore: remove redundant changeset file
Adding support for trigger source in the run context, and make sure dynamic trigger runs are preprocessed so they have a chance of populating run properties
# Resend is an email service used for signing in to Trigger.dev via a Magic Link.
### Visit https://resend.com, create an account and get your API key. Then insert it below along with your From and Reply To email addresses. Visit https://resend.com/docs for more information.
RESEND_API_KEY=<api_key>
FROM_EMAIL=
REPLY_TO_EMAIL=
# YOU MIGHT LIKE TO MODIFY THESE VARIABLES
SESSION_SECRET=abcdef1234
MAGIC_LINK_SECRET=abcdef1234
ENCRYPTION_KEY=ae13021afef0819c3a307ad487071c06 # Must be a random 16 byte hex string. You can generate an encryption key by running `openssl rand -hex 16` in your terminal
# This is used for logging in via GitHub. You can leave these commented out if you don't want to use GitHub for authentication.
# AUTH_GITHUB_CLIENT_ID=
# AUTH_GITHUB_CLIENT_SECRET=
# Resend is an email service used for signing in to Trigger.dev via a Magic Link.
# Emails will print to the console if you leave these commented out
### Visit https://resend.com, create an account and get your API key. Then insert it below along with your From and Reply To email addresses. Visit https://resend.com/docs for more information.
@@ -13,6 +13,7 @@ requests should be made against. The changes on the `main`
branch are tagged into a release monthly.
### Prerequisites
- [Node.js](https://nodejs.org/en) version >=16.x
- [pnpm package manager](https://pnpm.io/installation) version 7
- [Docker](https://www.docker.com/get-started/)
@@ -21,64 +22,227 @@ branch are tagged into a release monthly.
1. Clone the repo into a public GitHub repository or [fork the repo](https://github.com/triggerdotdev/trigger.dev/fork). If you plan to distribute the code, keep the source code public to comply with the [Apache Licence 2.0](https://github.com/triggerdotdev/trigger.dev/blob/main/LICENSE).
5. Open the root `.env` file and fill in the required values Magic Link:
Both of these secrets should be random strings, which you can easily generate (and copy into your pasteboard) with the following command:
```sh
openssl rand -hex 16 | pbcopy
```
```
pnpm i
```
4. Create your `.env` file
```
cp .env.example .env
```
5. Open it and generate a new value for `ENCRYPTION_KEY`:
<p>Then set them here:</p>
`ENCRYPTION_KEY` is used to two-way encrypt OAuth access tokens and so you'll probably want to actually generate a unique value, and it must be a random 16 byte hex string. You can generate one with the following command:
```
SESSION_SECRET=<string>
MAGIC_LINK_SECRET=<string>
```
7. Start Docker. This starts the required services like Postgres.
```
pnpm run docker
```
8. Migrate the database
```
pnpm run db:migrate
```
```sh
openssl rand -hex 16
```
Feel free to update `SESSION_SECRET` and `MAGIC_LINK_SECRET` as well using the same method.
6. Start Docker. This starts the required services like Postgres. If this is your first time using Docker, consider going through this [guide](DOCKER_INSTALLATION.md)
```
pnpm run docker
```
7. Migrate the database
```
pnpm run db:migrate
```
8. Build the app
```
pnpm run build --filter webapp
```
9. Run the seed script
```
pnpm run db:seed
```
5. Run the app. See the section below.
```
pnpm run db:seed
```
10. Run the app. See the section below.
## Running
1. You can run the app with:
```
pnpm run dev --filter webapp
```
It should run on port `3030`: [http://localhost:3030](http://localhost:3030/)
```
pnpm run dev --filter webapp
```
It should run on port `3030`: [http://localhost:3030](http://localhost:3030/)
2. Once the app is running click the magic link button and enter your email.
3. Check your terminal, the magic link email should have printed out.
4. Paste the magic link shown in your terminal into your browser to login.
3. Check your terminal, the magic link email should have printed out as following:
```sh
webapp:dev: Log in to Trigger.dev
webapp:dev:
webapp:dev: Click here to log in with this magic link
2. Change directory to the packages/database folder
```sh
cd packages/database
```
3. Generate the Prisma client
```sh
pnpm run generate
```
The above updates the prisma client generated into node_modules/.prisma/client folder. This helps with typing of relevant prisma models. It ensures typescript
recognizes fields added or removed from a model and type-checks appropriately.
4. Create and apply the migrations
```
pnpm run db:migrate:dev
```
This creates a migration file and executes the migrations against your database and applies changes to the database schema(s)
5. Commit generated migrations as well as changes to the schema.prisma file
6. If you're using VSCode you may need to restart the Typescript server in the webapp to get updated type inference. Open a TypeScript file, then open the Command Palette (View > Command Palette) and run `TypeScript: Restart TS server`.
## Testing CLI changes
To test CLI changes, follow the steps below:
1. Build the CLI and watch for changes
```sh
cd packages/cli
pnpm run dev
```
2. Open a new Terminal window and run the webapp locally and then create a new project in the dashboard. Copy out the dev API key.
3. Create a new temporary Next.js app in examples directory
5. Back in the terminal, navigate into the example, and initialize the CLI. When prompted, select `self-hosted` and enter `localhost:3030` if you are testing against the local instance of Trigger.dev, or you can just use the Trigger.dev cloud. When asked for an API key, use the key you copied earlier.
```sh
cd ./test-cli
pnpm i
pnpm exec trigger-cli init
```
6. If you are just testing the `init` command, you can stop here. If you'd like to test the `dev` command, first start the Next.js app on port 3000:
```sh
pnpm run dev
```
7. Open a new terminal window, and then run the `dev` command like so:
```sh
pnpm exec trigger-cli dev
```
8. Please remember to delete the temporary project you created after you've tested the changes, and before you raise a PR.
## Running end-to-end webapp tests
To run the end-to-end tests, follow the steps below:
1. Set up environment variables (copy example envs into the correct place)
The end-to-end tests use a `setup` and `teardown` script to seed the database with test data. If the test runner doesn't exit cleanly, then the database can be left in a state where the tests can't run because the `setup` script will try to create data that already exists. If this happens, you can manually delete the `users` and `organizations` from the database using prisma studio:
```sh
# With the database running (i.e. pnpm run docker)
pnpm run db:studio
```
## Add sample jobs
The [examples/jobs-starter](./examples/jobs-starter/) project defines simple jobs you can get started with.
1. `cd` into `examples/jobs-starter`
2. Create a `.env.local` file with the following content,
replacing `[TRIGGER_DEV_API_KEY]` with an actual key:
```env
TRIGGER_API_KEY=[TRIGGER_DEV_API_KEY]
TRIGGER_API_URL=http://localhost:3030
```
`TRIGGER_API_URL` is used to configure the URL for your Trigger.dev instance,
where the jobs will be registered.
3. Run the `jobs-starter` app:
```sh
pnpm dev
```
4. Navigate to your trigger.dev instance ([http://localhost:3030](http://localhost:3030/)), to see the jobs.
You can use the test feature to trigger them.
## Making a pull request
@@ -88,3 +252,44 @@ branch are tagged into a release monthly.
- If your PR refers to or fixes an issue, be sure to add `refs #XXX` or `fixes #XXX` to the PR description. Replacing `XXX` with the respective issue number. See more about [Linking a pull request to an issue
We use [changesets](https://github.com/changesets/changesets) to manage our package versions and changelogs. If you've never used changesets before, first read [their guide here](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md).
If you are contributing a change to any packages in this monorepo (anything in either the `/packages` or `/integrations` directories), then you will need to add a changeset to your Pull Requests before they can be merged.
To add a changeset, run the following command in the root of the repo
```sh
pnpm run changeset:add
```
Here's an example of creating a `patch` changeset for the `@trigger.dev/github` and `@trigger.dev/slack` packages (click to view):
You will be prompted to select which packages to include in the changeset. Only select the packages that you have made changes for.
Most of the time the changes you'll make are likely to be categorized as patch releases. If you feel like there is the need for a minor or major release of the package based on the changes being made, add the changeset as such and it will be discussed during PR review.
## Troubleshooting
### EADDRINUSE: address already in use :::3030
When receiving the following error message:
```sh
webapp:dev: Error: listen EADDRINUSE: address already in use :::3030
```
The process running on port `3030` should be destroyed.
1. Get the `PID` of the process running on PORT `3030`
This guide covers installing Docker and Docker Compose. If you're looking for instructions for running Trigger.dev in docker, [see here](https://github.com/triggerdotdev/docker).
## Setting up Docker for the first time.
In the contributing guide of Trigger.dev, there's a section that requires you to start Docker.
If you don't have Docker installed on your machine, you'll run into some complications (errors).
Below are the steps on how you can avoid that.
First you need to setup docker-compose as it is an underlying tool that this command: `pnpm run docker` fires behind the scene.
## Linux
To install Docker Compose on Linux Ubuntu via the terminal, you can follow these steps:
1. Update the package index on your system by running the following command:
```shell
sudo apt update
```
2. Install the required dependencies by running the following command:
```shell
sudo apt install curl
```
3. Download the Docker Compose binary into the `/usr/local/bin` directory using the `curl` command:
4. Set the appropriate permissions to make the `docker-compose` binary executable:
```shell
sudo chmod +x /usr/local/bin/docker-compose
```
5. Verify that Docker Compose has been successfully installed by running the following command:
```shell
docker-compose --version
```
This command should display the version information of Docker Compose without any errors.
After following these steps, you should have Docker Compose installed on your Ubuntu system, and you can use it by running `docker-compose` commands in the terminal.
When you've verified that the `docker-compose` package is installed and you proceed to start Docker with `pnpm run docker`.
You'll probably get an error similar to the one below:
```shell
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
ELIFECYCLE Command failed with exit code 1.
```
The error message suggests that the Docker daemon is not running on your system. The Docker daemon is responsible for managing and running Docker containers.
To resolve this issue, you may need to install Docker properly on your Ubuntu system. Here are the steps to install Docker on Ubuntu:
1. Update the package index on your system by running the following command:
```shell
sudo apt update
```
2. Install the necessary packages to allow apt to use repositories over HTTPS:
7. After the installation is complete, verify that Docker is installed correctly by running the following command:
```shell
docker --version
```
This command should display the version information of Docker without any errors.
Once Docker is installed and verified, you should be able to start the Docker daemon and run the `pnpm run docker` command without encountering any issues.
## Windows
1. Download the Docker Desktop installer from the Docker website: [Docker Desktop for Windows](https://www.docker.com/products/docker-desktop)
2. Run the installer and follow the instructions to install Docker Desktop.
3. After installation, Docker Desktop should be running automatically.
## macOS
1. Download the Docker Desktop installer from the Docker website: [Docker Desktop for Mac](https://www.docker.com/products/docker-desktop)
2. Run the installer and follow the instructions to install Docker Desktop.
3. After installation, Docker Desktop should be running automatically.
Please note that the instructions provided above are for the most common scenarios. For specific versions or different distributions, it's always a good idea to consult the official Docker documentation for the respective operating systems.
Create long-running jobs directly in your codebase with features like API integrations, webhooks, scheduling and delays.
### Long running Jobs on serverless
## Long running Jobs on serverless
Reliably run jobs and don’t worry about function timeouts, we handle those for you.
@@ -24,31 +26,51 @@ Reliably run jobs and don’t worry about function timeouts, we handle those for
- Auto-resume after a server outage
- Add delays of up to a year
### In your codebase
## In your codebase
Create Jobs where they belong: in your codebase. Version control, localhost, test, review, and deploy like you're already used to.
### Secure by design
## Secure by design
We only receive Triggers and the data you choose to send to us. You can even completely self-host the entire platform.
### Don't worry about deployment
## Don't worry about deployment
Just use our SDK to write Jobs in your Next.js codebase. There's nothing extra to deploy and no CI to configure, your Jobs just connect to our cloud. Or you can always self-host.
Just use our SDK to write Jobs in your codebase. There's nothing extra to deploy and no CI to configure, your Jobs just connect to our cloud. Or you can always self-host.
### Full visibility of every job run
## Full visibility of every job run
View every Task in every Run so you can tell exactly what happened.
Easily integrate with hundreds of third-party APIs – including your own. Use API keys (which never leave your server) or let us handle OAuth for you. Install our integration packages and easily subscribe to webhooks and perform common tasks, or you can easily use your existing favorite Node.JS SDKs and get resumability and idempotency through our `runTask` function.
### Trigger.dev Connect (coming soon)
## Our progress
Easily add integrations for your users.
We’re building the most comprehensive and easy-to-use background jobs framework for developers.
Click the links to join the discussions about our upcoming features.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.