Harden staging deploy workflow
This commit is contained in:
@@ -10,6 +10,10 @@ on:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: deploy-staging-${{ github.ref }}
|
||||||
|
cancel-in-progress: false
|
||||||
|
|
||||||
env:
|
env:
|
||||||
REGISTRY_HOST: ${{ vars.REGISTRY_HOST || 'registry.kxsw.us' }}
|
REGISTRY_HOST: ${{ vars.REGISTRY_HOST || 'registry.kxsw.us' }}
|
||||||
IMAGE_NAME: ${{ vars.REGISTRY_IMAGE || 'registry.kxsw.us/vpn-server' }}
|
IMAGE_NAME: ${{ vars.REGISTRY_IMAGE || 'registry.kxsw.us/vpn-server' }}
|
||||||
@@ -21,11 +25,21 @@ jobs:
|
|||||||
build-and-deploy:
|
build-and-deploy:
|
||||||
name: Build image and deploy to staging
|
name: Build image and deploy to staging
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 30
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version-file: go.mod
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: go test ./...
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
@@ -154,3 +168,55 @@ jobs:
|
|||||||
|
|
||||||
docker_cmd image prune -f || true
|
docker_cmd image prune -f || true
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
|
- name: Notify Telegram on success
|
||||||
|
if: success()
|
||||||
|
env:
|
||||||
|
TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }}
|
||||||
|
TG_CHAT_ID: ${{ secrets.TG_CHAT_ID }}
|
||||||
|
run: |
|
||||||
|
if [ -z "${TG_BOT_TOKEN:-}" ] || [ -z "${TG_CHAT_ID:-}" ]; then
|
||||||
|
echo "Telegram secrets are not configured; skipping notification."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
MESSAGE="$(cat <<'EOF'
|
||||||
|
✅ Staging deploy succeeded
|
||||||
|
Repository: ${{ github.repository }}
|
||||||
|
Branch: ${{ github.ref_name }}
|
||||||
|
Commit: ${{ github.sha }}
|
||||||
|
Actor: ${{ github.actor }}
|
||||||
|
Image: ${{ env.IMAGE_NAME }}:${{ github.sha }}
|
||||||
|
Run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||||
|
EOF
|
||||||
|
)"
|
||||||
|
|
||||||
|
curl -fsS -X POST "https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage" \
|
||||||
|
--data-urlencode "chat_id=${TG_CHAT_ID}" \
|
||||||
|
--data-urlencode "text=${MESSAGE}"
|
||||||
|
|
||||||
|
- name: Notify Telegram on failure
|
||||||
|
if: failure()
|
||||||
|
env:
|
||||||
|
TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }}
|
||||||
|
TG_CHAT_ID: ${{ secrets.TG_CHAT_ID }}
|
||||||
|
run: |
|
||||||
|
if [ -z "${TG_BOT_TOKEN:-}" ] || [ -z "${TG_CHAT_ID:-}" ]; then
|
||||||
|
echo "Telegram secrets are not configured; skipping notification."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
MESSAGE="$(cat <<'EOF'
|
||||||
|
❌ Staging deploy failed
|
||||||
|
Repository: ${{ github.repository }}
|
||||||
|
Branch: ${{ github.ref_name }}
|
||||||
|
Commit: ${{ github.sha }}
|
||||||
|
Actor: ${{ github.actor }}
|
||||||
|
Image: ${{ env.IMAGE_NAME }}:${{ github.sha }}
|
||||||
|
Run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||||
|
EOF
|
||||||
|
)"
|
||||||
|
|
||||||
|
curl -fsS -X POST "https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage" \
|
||||||
|
--data-urlencode "chat_id=${TG_CHAT_ID}" \
|
||||||
|
--data-urlencode "text=${MESSAGE}"
|
||||||
|
|||||||
Reference in New Issue
Block a user