diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de3571dd339..1699481786e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,6 +7,8 @@ on: jobs: build: runs-on: ubuntu-latest + outputs: + artifact_name: "${{ github.event.repository.name }}-${{ github.ref_name }}-${{ github.sha }}" steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -17,9 +19,23 @@ jobs: - name: Build run: npm run build env: - NODE_ENV: production + NODE_ENV: production - name: Upload Artifact + id: upload-artifact uses: actions/upload-artifact@v4 with: - name: '${{ github.event.repository.name }}-${{ github.ref_name }}-${{ github.sha }}' + name: "${{ github.event.repository.name }}-${{ github.ref_name }}-${{ github.sha }}" 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.ref_name }}-${{ github.sha }}" + } diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000000..e3268b764cf --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,26 @@ +name: Deploy via SSH + +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: + - 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" ${{ github.event.client_payload.artifact-url }} + unzip -aDo "${{ env.ARTIFACT_NAME }}.zip" -d "${{ env.ARTIFACT_NAME }}" + rm -f "${{ env.ARTIFACT_NAME }}.zip" + rsync -vR --delete "${{ env.ARTIFACT_NAME }}/" "${{ secrets.DESTINATION_DIR }}" + rm -rf ./${{ env.ARTIFACT_NAME }}