Add deploy workflow (#17)

* make build action run on pushes and pull requests

* add deploy workflow

* merge rm calls into single command

* purge cloudflare cache after deploy

* authenticate when pulling build artifact

* use env var for artifact URL

* fix invalid artifact names on pull requests
pull/18/head
Up 2024-03-27 00:15:43 +01:00 committed by GitHub
parent 8829727c8a
commit 28be258fbe
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 53 additions and 5 deletions

View File

@ -1,7 +1,8 @@
name: Build
on: on:
push: push: {}
branches: pull_request: {}
- "*"
jobs: jobs:
build: build:
@ -18,7 +19,21 @@ jobs:
env: env:
NODE_ENV: production NODE_ENV: production
- name: Upload Artifact - name: Upload Artifact
id: upload-artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: '${{ github.event.repository.name }}-${{ github.ref_name }}-${{ github.sha }}' name: "${{ github.event.repository.name }}-${{ github.sha }}"
path: dist path: dist
- name: Trigger Deployment
# only run on the main branch
if: github.event_name == 'push' && github.ref_name == github.event.repository.default_branch
uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3.0.0
with:
event-type: deploy-ssh
client-payload: |
{
"ref": "${{ github.ref }}",
"sha": "${{ github.sha }}",
"artifact-url": "${{ steps.upload-artifact.outputs.artifact-url }}",
"artifact-name": "${{ github.event.repository.name }}-${{ github.sha }}"
}

33
.github/workflows/deploy.yml vendored Normal file
View File

@ -0,0 +1,33 @@
name: Deploy
on:
repository_dispatch:
types: [deploy-ssh]
jobs:
deploy:
runs-on: ubuntu-latest
env:
ARTIFACT_NAME: ${{ github.event.client_payload.artifact-name }}
ARTIFACT_URL: ${{ github.event.client_payload.artifact-url }}
steps:
- name: Deploy via SSH
id: deploy
uses: appleboy/ssh-action@029f5b4aeeeb58fdfe1410a5d17f967dacf36262 # v1.0.3
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SSH_PORT }}
script: |
cd ${{ secrets.TMP_DIR }}
wget -O "${{ env.ARTIFACT_NAME }}.zip" --header="Authorization: token ${{ github.token }}" ${{ env.ARTIFACT_URL }}
unzip -aDo "${{ env.ARTIFACT_NAME }}.zip" -d "${{ env.ARTIFACT_NAME }}"
rsync -vR --delete "${{ env.ARTIFACT_NAME }}/" "${{ secrets.DESTINATION_DIR }}"
rm -rf "./${{ env.ARTIFACT_NAME }}.zip" "./${{ env.ARTIFACT_NAME }}"
- name: Purge Cloudflare Cache
id: purge-cache
uses: NathanVaughn/actions-cloudflare-purge@f70c63827b539cf48eb3a29fdaa7547eca4dede4 #latest commit at the time
with:
cf_auth: ${{ secrets.CLOUDFLARE_API_TOKEN }}
cf_zone: ${{ secrets.CLOUDFLARE_ZONE_ID }}