feat(ci): skip build if no source changes (cache build output by hash)

This commit is contained in:
datadunia
2026-06-18 09:09:51 +07:00
parent 6f22aad1ad
commit 08b152a370
3 changed files with 45 additions and 2 deletions
+14 -2
View File
@@ -23,22 +23,34 @@ jobs:
with: with:
node-version: '24' node-version: '24'
- name: Hash source files
id: hash-src
run: echo "hash=$(find apps/dashboard-ui -type f \( -name '*.vue' -o -name '*.ts' -o -name '*.js' -o -name '*.css' -o -name '*.json' -o -name '*.html' \) | sort | xargs sha256sum | sha256sum | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
- uses: actions/cache@v3
id: cache-build
with:
path: apps/dashboard-ui/dist
key: build-dashboard-${{ steps.hash-src.outputs.hash }}
- name: Hash package-lock - name: Hash package-lock
id: hash-npm id: hash-npm
run: echo "hash=$(sha256sum apps/dashboard-ui/package-lock.json | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" run: echo "hash=$(sha256sum apps/dashboard-ui/package-lock.json | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
- uses: actions/cache@v3 - uses: actions/cache@v3
id: cache-npm
with: with:
path: | path: ~/.npm
~/.npm
key: npm-dashboard-${{ steps.hash-npm.outputs.hash }} key: npm-dashboard-${{ steps.hash-npm.outputs.hash }}
restore-keys: npm-dashboard- restore-keys: npm-dashboard-
- name: Install - name: Install
if: steps.cache-build.outputs.cache-hit != 'true'
working-directory: apps/dashboard-ui working-directory: apps/dashboard-ui
run: npm ci || npm install run: npm ci || npm install
- name: Build - name: Build
if: steps.cache-build.outputs.cache-hit != 'true'
working-directory: apps/dashboard-ui working-directory: apps/dashboard-ui
run: npm run build run: npm run build
+16
View File
@@ -24,13 +24,29 @@ jobs:
go-version: '1.26' go-version: '1.26'
cache: true cache: true
- uses: https://gitea.com/actions/go-hashfiles@v0.0.1
id: hash-src
with:
patterns: |
apps/device-agent/**/*.go
apps/device-agent/go.mod
apps/device-agent/go.sum
- uses: actions/cache@v3
id: cache-build
with:
path: apps/device-agent/bin
key: build-device-agent-${{ steps.hash-src.outputs.hash }}
- name: Generate Windows resources (UAC manifest + icon) - name: Generate Windows resources (UAC manifest + icon)
if: steps.cache-build.outputs.cache-hit != 'true'
working-directory: apps/device-agent working-directory: apps/device-agent
run: | run: |
go install github.com/tc-hib/go-winres@latest go install github.com/tc-hib/go-winres@latest
go-winres make go-winres make
- name: Build all platforms - name: Build all platforms
if: steps.cache-build.outputs.cache-hit != 'true'
working-directory: apps/device-agent working-directory: apps/device-agent
shell: bash shell: bash
run: | run: |
+15
View File
@@ -24,7 +24,22 @@ jobs:
go-version: '1.26' go-version: '1.26'
cache: true cache: true
- uses: https://gitea.com/actions/go-hashfiles@v0.0.1
id: hash-src
with:
patterns: |
apps/server-core/**/*.go
apps/server-core/go.mod
apps/server-core/go.sum
- uses: actions/cache@v3
id: cache-build
with:
path: apps/server-core/bin
key: build-server-core-${{ steps.hash-src.outputs.hash }}
- name: Build - name: Build
if: steps.cache-build.outputs.cache-hit != 'true'
working-directory: apps/server-core working-directory: apps/server-core
run: go build -o bin/server-core . run: go build -o bin/server-core .