Files
cloud-configuration/.github/workflows/deploy.yaml
T

71 lines
2.6 KiB
YAML

name: Deploy to Swarm
on:
workflow_dispatch:
push:
paths:
- 'docker/**'
jobs:
fact-finding:
name: Detect changed environments
runs-on: ubuntu-latest
outputs:
changed_envs: ${{ steps.detect.outputs.changed_envs }}
steps:
- uses: actions/checkout@v4
- name: Determine which environments changed
id: detect
run: |
echo "changed_envs=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep '^docker/' | cut -d/ -f2 | sort -u | tr '\n' ' ')" >> "$GITHUB_OUTPUT"
deploy:
name: Deploy
runs-on: ubuntu-latest
needs: fact-finding
strategy:
matrix:
env: [ test ]
environment: ${{ matrix.env }}
steps:
- uses: actions/checkout@v4
- name: Exit if this environment wasn't changed
id: check
run: |
echo "Changed envs: '${{ needs.fact-finding.outputs.changed_envs }}'"
if [[ ! " ${{ needs.fact-finding.outputs.changed_envs }} " =~ " ${{ matrix.env }} " ]]; then
echo "should_deploy=true" >> $GITHUB_OUTPUT
else
echo "should_deploy=false" >> $GITHUB_OUTPUT
fi
shell: bash
- name: Build & push Nginx image to GHCR
if: steps.check.outputs.should_deploy == 'true'
run: |
docker build -t ghcr.io/2martens/docker-nginx:${{ matrix.env }} docker/${{ matrix.env }}/nginx
echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u 2martens --password-stdin
docker push ghcr.io/2martens/docker-nginx:${{ matrix.env }}
- name: Copy files to remote
if: steps.check.outputs.should_deploy == 'true'
uses: burnett01/rsync-deployments@7.0.2
with:
switches: -az -r --del
path: docker/${{ matrix.env }}/stack-config/.
remote_path: ~/tmp/stack-config
remote_host: ${{ secrets.DEPLOY_HOST }}
remote_port: ${{ secrets.DEPLOY_PORT }}
remote_user: ${{ secrets.DEPLOY_USER }}
remote_key: ${{ secrets.DEPLOY_KEY }}
- name: Deploy applications
if: steps.check.outputs.should_deploy == 'true'
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_KEY }}
script: |
docker pull ghcr.io/2martens/docker-nginx:${{ matrix.env }}
docker service update --image ghcr.io/2martens/docker-nginx:${{ matrix.env }} nginx-proxy
for f in ~/tmp/stack-config/*.yaml; do
NAME=$(basename "$f" .yaml)
docker stack deploy -c "$f" "$NAME"
done