@@ -2,66 +2,98 @@ name: Build Frontend
22on :
33 push :
44 branches : ["main"]
5+ tags : ["v*.*"]
56 paths :
67 - " apps/frontend/package.json"
7-
8+ - " apps/frontend/package-lock.json"
9+ - " apps/frontend/Dockerfile"
10+ - " apps/frontend/src/**"
11+ - " apps/frontend/public/**"
12+ - " .github/workflows/build-frontend.yml"
813jobs :
914 check-version :
1015 runs-on : ubuntu-latest
1116 outputs :
17+ version : ${{ steps.check.outputs.version }}
1218 version_changed : ${{ steps.check.outputs.changed }}
1319 steps :
14- - uses : actions/checkout@v3
20+ - uses : actions/checkout@v4
1521 with :
1622 fetch-depth : 2
17-
1823 - name : Check if version changed
1924 id : check
2025 run : |
21- OLD_VERSION=$(git show HEAD^:apps/frontend/package.json | jq -r '.version')
22- NEW_VERSION=$(jq -r '.version' apps/frontend/package.json)
26+ NEW_VERSION=$(node -p "JSON.parse(require('fs').readFileSync('apps/frontend/package.json', 'utf8')).version")
27+ echo "version=$NEW_VERSION" >> "$GITHUB_OUTPUT"
28+ if ! git rev-parse --verify HEAD^ >/dev/null 2>&1; then
29+ echo "changed=true" >> "$GITHUB_OUTPUT"
30+ echo "No previous commit found, treating version as changed: $NEW_VERSION"
31+ exit 0
32+ fi
33+ git show HEAD^:apps/frontend/package.json > /tmp/old-package.json
34+ OLD_VERSION=$(node -p "JSON.parse(require('fs').readFileSync('/tmp/old-package.json', 'utf8')).version")
2335 if [ "$OLD_VERSION" != "$NEW_VERSION" ]; then
24- echo "changed=true" >> $GITHUB_OUTPUT
36+ echo "changed=true" >> " $GITHUB_OUTPUT"
2537 echo "Version changed: $OLD_VERSION -> $NEW_VERSION"
2638 else
27- echo "changed=false" >> $GITHUB_OUTPUT
39+ echo "changed=false" >> " $GITHUB_OUTPUT"
2840 echo "Version unchanged: $NEW_VERSION"
2941 fi
30-
3142 amd64 :
3243 needs : check-version
33- if : needs.check-version.outputs.version_changed == 'true'
44+ if : needs.check-version.outputs.version_changed == 'true' || startsWith(github.ref, 'refs/tags/')
3445 runs-on : ubuntu-latest
3546 permissions :
3647 contents : read
3748 packages : write
3849 steps :
39- - uses : actions/checkout@v3
50+ - uses : actions/checkout@v4
51+ - name : Connect to Tailscale
52+ uses : tailscale/github-action@v4
53+ with :
54+ oauth-client-id : ${{ secrets.TAILSCALE_CLIENT_ID }}
55+ oauth-secret : ${{ secrets.TAILSCALE_CLIENT_SECRET }}
56+ tags : tag:ci
57+ - name : Add registry host entry
58+ run : |
59+ echo "${{ secrets.TAILSCALE_SERVER_IP }} ${{ secrets.REGISTRY_HOST }}" | sudo tee -a /etc/hosts
60+ getent hosts "${{ secrets.REGISTRY_HOST }}"
61+ curl -fsS -k "https://${{ secrets.REGISTRY_HOST }}:${{ secrets.REGISTRY_PORT }}/v2/" || true
4062 - name : Login to registry
41- uses : docker/login-action@v2
63+ uses : docker/login-action@v3
4264 with :
4365 registry : ${{ secrets.REGISTRY }}
4466 username : ${{ secrets.REGISTRY_USER }}
45- password : ${{ secrets.REGISTRY_PASSWORD }}
46-
67+ password : ${{ secrets.REGISTRY_PASSWORD }}
68+ - name : Set up Docker Buildx
69+ uses : docker/setup-buildx-action@v3
70+ with :
71+ driver-opts : |
72+ network=host
73+ - name : Extract metadata for Docker
74+ id : meta
75+ uses : docker/metadata-action@v5
76+ with :
77+ images : ${{ secrets.REGISTRY }}/${{ secrets.FRONTEND_IMAGE_NAME }}
78+ tags : |
79+ type=raw,value=latest,enable={{is_default_branch}}
80+ type=raw,value=${{ needs.check-version.outputs.version }},enable=${{ needs.check-version.outputs.version_changed == 'true' }}
81+ type=ref,event=tag
82+ type=sha
4783 - name : Build image and push to registry
48- uses : docker/build-push-action@v4
84+ uses : docker/build-push-action@v6
4985 with :
5086 context : .
5187 file : ./apps/frontend/Dockerfile
5288 platforms : linux/amd64
5389 build-args : |
54- VITE_BASE=${{ vars .VITE_BASE || '/' }}
90+ VITE_BASE=${{ secrets .VITE_BASE }}
5591 VITE_MAPBOX_TOKEN=${{ secrets.VITE_MAPBOX_TOKEN }}
56- VITE_SERVER_URL=${{ vars .VITE_SERVER_URL }}
92+ VITE_SERVER_URL=${{ secrets .VITE_SERVER_URL }}
5793 VITE_SITE_URL=${{ secrets.VITE_SITE_URL }}
5894 push : true
59- tags : ${{ secrets.REGISTRY }}/${{ secrets.FRONTEND_IMAGE_NAME }}:latest
60-
61- - name : Trigger deploy via Dokploy API
95+ tags : ${{ steps.meta.outputs.tags }}
96+ labels : ${{ steps.meta.outputs.labels }}
97+ - name : Trigger deploy webhook
6298 run : |
63- curl -X POST "${{ secrets.DOKPLOY_API_URL }}/api/application.deploy" \
64- -H "accept: application/json" \
65- -H "Content-Type: application/json" \
66- -H "x-api-key: ${{ secrets.DOKPLOY_API_KEY }}" \
67- -d "{\"applicationId\":\"${{ secrets.DOKPLOY_FRONTEND_APP_ID }}\"}"
99+ curl -fsS -X POST "${{ secrets.DEPLOY_WEBHOOK_BASE_URL }}/hooks/emergenciascr-frontend"
0 commit comments