Skip to content

Commit 3dc0cbb

Browse files
authored
Merge pull request #896 from flashcatcloud/feat/change-c5-test
docs: sync env0, Harness FME, Expo EAS and Railway change integration pages to test
2 parents 7e56df2 + b623b9d commit 3dc0cbb

10 files changed

Lines changed: 1062 additions & 2 deletions

File tree

‎docs.json‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1947,6 +1947,7 @@
19471947
"pages": [
19481948
"zh/on-call/integration/change-integration/custom-event",
19491949
"zh/on-call/integration/change-integration/teamcity",
1950+
"zh/on-call/integration/change-integration/railway",
19501951
"zh/on-call/integration/change-integration/github",
19511952
"zh/on-call/integration/change-integration/gitlab",
19521953
"zh/on-call/integration/change-integration/launchdarkly",
@@ -1972,7 +1973,10 @@
19721973
"zh/on-call/integration/change-integration/scalr",
19731974
"zh/on-call/integration/change-integration/growthbook",
19741975
"zh/on-call/integration/change-integration/fluxcd",
1975-
"zh/on-call/integration/change-integration/pulumi"
1976+
"zh/on-call/integration/change-integration/pulumi",
1977+
"zh/on-call/integration/change-integration/harness-fme",
1978+
"zh/on-call/integration/change-integration/expo-eas",
1979+
"zh/on-call/integration/change-integration/env0"
19761980
]
19771981
},
19781982
{
@@ -3544,6 +3548,7 @@
35443548
"pages": [
35453549
"en/on-call/integration/change-integration/custom-event",
35463550
"en/on-call/integration/change-integration/teamcity",
3551+
"en/on-call/integration/change-integration/railway",
35473552
"en/on-call/integration/change-integration/github",
35483553
"en/on-call/integration/change-integration/gitlab",
35493554
"en/on-call/integration/change-integration/launchdarkly",
@@ -3569,7 +3574,10 @@
35693574
"en/on-call/integration/change-integration/scalr",
35703575
"en/on-call/integration/change-integration/growthbook",
35713576
"en/on-call/integration/change-integration/fluxcd",
3572-
"en/on-call/integration/change-integration/pulumi"
3577+
"en/on-call/integration/change-integration/pulumi",
3578+
"en/on-call/integration/change-integration/harness-fme",
3579+
"en/on-call/integration/change-integration/expo-eas",
3580+
"en/on-call/integration/change-integration/env0"
35733581
]
35743582
},
35753583
{
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
---
2+
title: "env0 change integration"
3+
description: "Sync environment deploys and destroys from an env0 webhook notification target to Flashduty On-call as change events correlated with alerts and incidents."
4+
keywords: ["change integration", "env0", "env zero", "Deployment", "Destroy", "Terraform", "Webhook"]
5+
---
6+
7+
<Tip>**Plan requirement**: This feature requires the On-call Standard plan or above. [Learn more](https://flashcat.cloud/flashduty/price/)</Tip>
8+
9+
Use an env0 webhook notification target to sync environment deploys and destroys to Flashduty On-call. Each env0 run (one deployment log) becomes one Flashduty change; every state of the run, from started and waiting for approval to resumed, succeeded, failed or canceled, updates that same change.
10+
11+
<div className="hide">
12+
13+
## In Flashduty On-call
14+
---
15+
16+
1. In the Flashduty console, go to **Integration Center → Change Events**
17+
2. Select **env0** and enter an integration name
18+
3. To assign changes to specific channels, configure rules in the integration's **Routing** based on labels such as `project` or `environment`
19+
4. Click **Save** and copy the generated **Push URL**
20+
21+
</div>
22+
23+
## In env0
24+
---
25+
26+
<Steps>
27+
<Step title="Add a webhook notification target">
28+
29+
This needs organization admin permission. Go to **Organization Settings → Notifications** and click **Add Notification Target**:
30+
31+
1. **Name**: any name, unique within the organization
32+
2. **Type**: select **Webhook**
33+
3. **URL**: paste the full Push URL of the Flashduty integration (env0 requires HTTPS)
34+
4. **Secret**: leave empty. Flashduty authenticates with the `integration_key` in the Push URL and does not check `x-env0-signature`
35+
36+
Use **Test endpoint → Send test event** to check connectivity: Flashduty returns success, but the test event does not create a change.
37+
38+
</Step>
39+
40+
<Step title="Select events in a project">
41+
42+
This needs project admin permission. Go to **Project Settings → Notifications**, click the edit icon next to the notification target and select:
43+
44+
- **Deployment started**, **Deployment waiting for user**, **Deployment resumed**, **Deployment cancelled**
45+
- **Deploy succeeded**, **Deploy failed**
46+
- To record destroys as well, **Destroy started**, **Destroy resumed**, **Destroy succeeded**, **Destroy failed**
47+
48+
Click **Save**. Configure each project separately. Other events (drift, budget, TTL auto-destroy, PR plan failures) are not changes: Flashduty returns success for them but creates no change.
49+
50+
</Step>
51+
</Steps>
52+
53+
env0 does not retry a failed webhook delivery, and its delivery timeout is 10 seconds.
54+
55+
## What one change is
56+
---
57+
58+
| env0 object | Change key (change_key) | Notes |
59+
|---|---|---|
60+
| One deploy or destroy run (deployment log) | `data.deploymentLog.id` | Every event of one run updates the same change; two runs of the same environment are two changes |
61+
62+
The key is not the environment ID: one environment has many runs, each with its own deployment log.
63+
64+
## Status mapping
65+
---
66+
67+
| env0 event | Flashduty change status |
68+
|---|---|
69+
| `com.env0.deploy.started` / `com.env0.destroy.started` | Processing |
70+
| `com.env0.deployment.waiting_for_user` (waiting for approval) | Planned |
71+
| `com.env0.deploy.resumed` / `com.env0.destroy.resumed` (approved, running again) | Processing |
72+
| `com.env0.deploy.succeeded` / `com.env0.destroy.succeeded` | Done |
73+
| `com.env0.deploy.failed` / `com.env0.destroy.failed` | Failed |
74+
| `com.env0.deployment.cancelled` | Canceled |
75+
76+
Done, Failed and Canceled are end states; Flashduty records the change's end time.
77+
78+
These deliveries return success and create no change: `com.env0.webhook.test`, `com.env0.pr_plan.failed`, `com.env0.environment.*`, `com.env0.drift.*`, `com.env0.budget.exceeded`, and any other event type that is not a deploy or destroy run.
79+
80+
## Change content
81+
---
82+
83+
| Field | Value |
84+
|---|---|
85+
| Title | `<project> / <environment>: deploy` or `<project> / <environment>: destroy`; the environment ID stands in for a missing name |
86+
| Description | The run's comment (`deploymentLog.comment`), empty if none |
87+
| Link | The run's page in env0; the environment page, then the project page, when it is missing |
88+
89+
Labels are available for routing and for filtering the change list:
90+
91+
| Label | Value |
92+
|---|---|
93+
| `project` / `project_id` | Project name / ID |
94+
| `environment` / `environment_id` | Environment name / ID |
95+
| `deployment_id` | Deployment log ID of the run |
96+
| `operation` | `deploy` or `destroy` |
97+
| `state` | The latest env0 event, for example `deploy.succeeded` |
98+
| `repo` / `ref` | The template's repository URL / branch or tag |
99+
| `actor` | Name of the user who started the run; absent for scheduled or automatic runs |
100+
101+
## FAQ
102+
---
103+
104+
<AccordionGroup>
105+
<Accordion title="Does a repeated delivery create a duplicate record?">
106+
107+
No. Flashduty uses the time carried by the env0 event, so the same event at the same time is recorded once; an older state that arrives late does not overwrite a finished change.
108+
109+
</Accordion>
110+
111+
<Accordion title="Why is there no Planned status for my environment?">
112+
113+
Planned appears only when env0 sends `deployment.waiting_for_user` (the run waits for approval). A run that needs no approval goes from Processing straight to Done, Failed or Canceled.
114+
115+
</Accordion>
116+
117+
<Accordion title="A delivery returns an InvalidParameter error?">
118+
119+
- `unsupported type`: a deployment-family event Flashduty does not support yet arrived. Select only the events listed above, or contact us
120+
- `data.deploymentLog.id is missing`: the body is incomplete; make sure it comes from a native env0 webhook notification target
121+
122+
env0 does not retry, and the response of a failed delivery is visible on env0's test page.
123+
124+
</Accordion>
125+
</AccordionGroup>
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
---
2+
title: "Expo EAS change integration"
3+
description: "Sync Expo EAS Build and EAS Submit results to Flashduty On-call through EAS webhooks, as change events you can correlate with alerts and incidents."
4+
keywords: ["change integration", "Expo", "EAS", "EAS Build", "EAS Submit", "Webhook"]
5+
---
6+
7+
<Tip>**Plan requirement**: This feature requires an On-call Standard or higher subscription. [Learn more](https://flashcat.cloud/flashduty/price/)</Tip>
8+
9+
Use EAS webhooks to sync Expo EAS builds and submissions to Flashduty On-call. Each build and each submission becomes one Flashduty change, recorded once when it ends.
10+
11+
EAS sends a webhook only when a build or submission ends and has no start event, so a change has no Processing state and is recorded directly with its end state: Done, Failed, or Canceled. A change here is an app build or a store submission, not a deployment of a running service.
12+
13+
<div className="hide">
14+
15+
## In Flashduty On-call
16+
---
17+
18+
1. In the Flashduty console, go to **Integration Center → Change Events**
19+
2. Select **Expo EAS** and enter an integration name
20+
3. To assign changes to specific channels, add rules under the integration's **Routes** that match labels such as `project`, `platform`, or `kind`
21+
4. Click **Save** and copy the generated **Push URL**
22+
23+
</div>
24+
25+
## Configure Expo EAS
26+
---
27+
28+
<Steps>
29+
<Step title="Create a webhook for builds">
30+
31+
In the project directory (EAS CLI installed and logged in), run:
32+
33+
```sh
34+
eas webhook:create --event BUILD --url '<push URL>'
35+
```
36+
37+
The command asks for a signing secret of at least 16 characters. Flashduty authenticates with the `integration_key` in the push URL and does not verify `expo-signature`, so any value of that length works.
38+
39+
</Step>
40+
41+
<Step title="Create a webhook for submissions">
42+
43+
To sync EAS Submit results as well, run the command again with the `SUBMIT` event:
44+
45+
```sh
46+
eas webhook:create --event SUBMIT --url '<push URL>'
47+
```
48+
49+
Both events use the same push URL; Flashduty tells builds and submissions apart from the payload.
50+
51+
</Step>
52+
53+
<Step title="Verify">
54+
55+
Webhooks are configured per project: create them in each project you want to sync, and list them with `eas webhook:list`. EAS has no test delivery: run `eas build` or `eas submit`, and the change appears in the Flashduty change list when it ends.
56+
57+
</Step>
58+
</Steps>
59+
60+
## What one change is
61+
---
62+
63+
| EAS object | Change key (change_key) | Notes |
64+
|---|---|---|
65+
| Build | `build:<id>` | `id` is the build ID (UUID). Two builds of the same project and platform are two changes; a retried build has a new ID and is a new change |
66+
| Submission | `submission:<id>` | `id` is the submission ID (UUID). A build and a submission never merge, even with the same ID |
67+
68+
## Status mapping
69+
---
70+
71+
| EAS `status` | Flashduty change status |
72+
|---|---|
73+
| `finished` | Done |
74+
| `errored` | Failed |
75+
| `canceled` | Canceled |
76+
77+
The EAS documentation lists only these three end states. Any other value makes the delivery return InvalidParameter and records no change.
78+
79+
## Change content
80+
---
81+
82+
| Field | Content |
83+
|---|---|
84+
| Title | Build: `<project>: <platform> build <app version> (<build profile>)`, for example `example: android build 1.0.2 (production)`. Submission: `<project>: <platform> submit`. Parts missing from the payload are omitted |
85+
| Description | Build: the `message` attached to the build, or the commit message (`gitCommitMessage`) when there is none. A failure appends a line `Error: <error message>` |
86+
| Link | The build's or submission's page in the EAS dashboard |
87+
| Change time | The end time (`completedAt`), or `updatedAt` when absent |
88+
89+
Labels for routing and filtering the change list:
90+
91+
| Label | Description |
92+
|---|---|
93+
| `kind` | `build` or `submit` |
94+
| `account` | Expo account or organization name |
95+
| `project` | Project name |
96+
| `platform` | `android` or `ios` |
97+
| `build_id` | Build ID; for a submission, the ID of the build it submits (when present) |
98+
| `submission_id` | Submission ID (submissions only) |
99+
| `app_version` | App version (builds only) |
100+
| `build_profile` | Build profile, for example `production` (builds only) |
101+
| `distribution` | Distribution type, for example `store` (builds only) |
102+
| `channel` | EAS Update channel (builds only) |
103+
| `sha` | Full Git commit SHA (builds only) |
104+
| `error_code` | The EAS error code (failures only) |
105+
| `expo_state` | The raw EAS `status` |
106+
107+
## FAQ
108+
---
109+
110+
<AccordionGroup>
111+
<Accordion title="Why is there no running state for a build?">
112+
113+
EAS webhooks fire only when a build or submission ends and do not report queued or running states. The change appears with its final status when it ends.
114+
115+
</Accordion>
116+
117+
<Accordion title="Does an EAS retry record the change twice?">
118+
119+
No. EAS retries with exponential back-off after a response outside 200–399, with the same content, and Flashduty deduplicates on the end time, so the change is recorded once.
120+
121+
</Accordion>
122+
123+
<Accordion title="Do I need to verify expo-signature?">
124+
125+
No. Flashduty authenticates with the `integration_key` in the push URL and does not verify `expo-signature`. EAS requires a secret of at least 16 characters when you create the webhook; any value works.
126+
127+
</Accordion>
128+
129+
<Accordion title="The delivery returns an InvalidParameter error?">
130+
131+
- `id is missing`: the payload is incomplete; make sure it comes from an EAS webhook
132+
- `unknown status`: a status value that is not mapped yet; contact us to add it
133+
- `delivery is neither a build nor a submission`: the payload has neither a build page URL (`buildDetailsPageUrl`) nor a submission page URL (`submissionDetailsPageUrl`)
134+
- `invalid completedAt` or `invalid updatedAt`: a timestamp field is malformed
135+
136+
</Accordion>
137+
</AccordionGroup>

0 commit comments

Comments
 (0)