Skip to content

Commit 508c4cb

Browse files
committed
ci: set up production promotion workflow
[skip ci]
1 parent c74e93c commit 508c4cb

2 files changed

Lines changed: 69 additions & 3 deletions

File tree

.github/workflows/promote.yml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
name: Promote Staging to Production
2+
3+
on:
4+
workflow_dispatch:
5+
6+
jobs:
7+
promote:
8+
runs-on: ubuntu-latest
9+
env:
10+
GH_TOKEN: ${{ github.token }}
11+
steps:
12+
- name: Find latest successful staging deployment
13+
id: staging
14+
run: |
15+
DEPLOYMENT_JSON=$(gh api \
16+
-H "Accept: application/vnd.github+json" \
17+
repos/${{ github.repository }}/deployments \
18+
--jq '.[] | select(.environment == "staging")' | head -n1)
19+
20+
echo "ref=$(echo "$DEPLOYMENT_JSON" | jq -r '.ref')" >> "$GITHUB_OUTPUT"
21+
echo "sha=$(echo "$DEPLOYMENT_JSON" | jq -r '.sha')" >> "$GITHUB_OUTPUT"
22+
23+
- name: Create production deployment
24+
id: prod_deploy
25+
run: |
26+
DEPLOY_ID=$(gh api \
27+
-X POST \
28+
repos/${{ github.repository }}/deployments \
29+
-f ref="${{ steps.staging.outputs.ref }}" \
30+
-f sha="${{ steps.staging.outputs.sha }}" \
31+
-f environment="production" \
32+
-f auto_merge="false" \
33+
-f required_contexts="[]" \
34+
--jq '.id')
35+
36+
echo "id=$DEPLOY_ID" >> "$GITHUB_OUTPUT"
37+
38+
- name: Set up SSH
39+
run: |
40+
mkdir -p ~/.ssh
41+
echo "${{ secrets.deploy_known_hosts }}" > ~/.ssh/known_hosts
42+
echo "${{ secrets.deploy_key }}" > ~/.ssh/id
43+
chmod 600 ~/.ssh/id
44+
chmod 700 ~/.ssh
45+
46+
- name: Trigger promote script on server
47+
run: |
48+
ssh -i ~/.ssh/id -p ${{ secrets.deploy_port }} ${{ secrets.deploy_user }}@${{ secrets.deploy_target }} sudo promote-staging-to-prod.sh questionablextensions
49+
50+
- name: Mark deployment as success
51+
if: success()
52+
run: |
53+
gh api \
54+
-X POST \
55+
-H "Accept: application/vnd.github+json" \
56+
repos/${{ github.repository }}/deployments/${{ steps.prod_deploy.outputs.id }}/statuses \
57+
-f state="success"
58+
59+
- name: Mark deployment as failure
60+
if: failure()
61+
run: |
62+
gh api \
63+
-X POST \
64+
-H "Accept: application/vnd.github+json" \
65+
repos/${{ github.repository }}/deployments/${{ steps.prod_deploy.outputs.id }}/statuses \
66+
-f state="failure"

.github/workflows/workflow.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
"description": "Deploying to staging"
4242
}')
4343
deployment_id=$(echo "$deployment_response" | jq -r '.id')
44-
echo "deployment_id=$id" >> "$GITHUB_OUTPUT"
44+
echo "deployment_id=$deployment_id" >> "$GITHUB_OUTPUT"
4545
4646
curl -fsS -X POST \
4747
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
@@ -71,7 +71,7 @@ jobs:
7171
https://api.github.com/repos/${{ github.repository }}/deployments/${{ steps.create_deployment.outputs.deployment_id }}/statuses \
7272
-d '{
7373
"state": "success",
74-
"description": "Deployment succeeded",
74+
"description": "Deployment succeeded"
7575
}'
7676
7777
report-failure:
@@ -87,5 +87,5 @@ jobs:
8787
https://api.github.com/repos/${{ github.repository }}/deployments/${{ needs.deploy.outputs.deployment_id }}/statuses \
8888
-d '{
8989
"state": "failure",
90-
"description": "Deployment failed",
90+
"description": "Deployment failed"
9191
}'

0 commit comments

Comments
 (0)