feat: add isReplay to run context (#3454)
## Summary Adds `isReplay` boolean to the run context (`ctx.run.isReplay`), following the same pattern as the existing `isTest`. The value is derived from the existing `replayedFromTaskRunFriendlyId` database field, so no schema migration is needed. ## ✅ Checklist - [x] I have followed every step in the [contributing guide](https://github.com/triggerdotdev/trigger.dev/blob/main/CONTRIBUTING.md) - [x] The PR title follows the convention. - [x] I ran and tested the code works --- ## Testing - Verified `@trigger.dev/core` builds successfully - Verified `webapp` typechecks successfully - All new fields use `default(false)` for backwards compatibility --- ## Changelog - Added `isReplay` to `TaskRun` and `V3TaskRun` schemas in `common.ts` - Added `RUN_IS_REPLAY` semantic attribute and wired it in `taskContext` - Propagated `isReplay` through the dequeue system, run attempt system, and all execution context construction paths (V1 + V2) - Added `isReplay` to `DequeuedMessage` and `TaskRunExecutionLazyAttemptPayload` schemas - Added patch changeset for `@trigger.dev/core` - Updated docs: added `isReplay` to context reference, added "Detecting replays" section to replaying page --- 💯 Link to Devin session: https://app.devin.ai/sessions/1d6f1b3cc39a4623b72d05bf00f2d70c --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: nick <55853254+nicktrn@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
91fd8a8a03
commit
4b28080ed4
@@ -81,6 +81,9 @@ export const parentTask = task({
|
||||
<ResponseField name="isTest" type="boolean">
|
||||
Whether this is a [test run](/run-tests).
|
||||
</ResponseField>
|
||||
<ResponseField name="isReplay" type="boolean">
|
||||
Whether this run is a [replay](/replaying) of a previous run.
|
||||
</ResponseField>
|
||||
<ResponseField name="createdAt" type="date">
|
||||
The creation time of the task run.
|
||||
</ResponseField>
|
||||
|
||||
@@ -30,6 +30,21 @@ description: "A replay is a copy of a run with the same payload but against the
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### Detecting replays in your task
|
||||
|
||||
You can check if a run is a replay using the [context](/context) object:
|
||||
|
||||
```ts
|
||||
export const myTask = task({
|
||||
id: "my-task",
|
||||
run: async (payload, { ctx }) => {
|
||||
if (ctx.run.isReplay) {
|
||||
// This run is a replay of a previous run
|
||||
}
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
### Replaying using the SDK
|
||||
|
||||
You can replay a run using the SDK:
|
||||
|
||||
Reference in New Issue
Block a user