diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 9a00586..7bc2b4b 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -16,23 +16,36 @@ jobs: sudo apt-get update sudo apt-get install -y bison cmake curl python3 + # Gitea Actions doesn't support the built-in hashFiles() expression + # function (unlike GitHub Actions) - it silently evaluates to an empty + # string, which turned every cache key below into the same constant + # string regardless of what actually changed, so a cache entry from + # before a dependency-version or patch change would still be reused + # forever. Hash the same inputs by hand instead. + - name: Compute cache keys + id: cache-keys + run: | + echo "emsdk=$(sha256sum scripts/versions.sh | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" + echo "deps-wasm32=$(cat scripts/versions.sh $(find patches -type f | sort) | sha256sum | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" + echo "libwinevbs=$(cat scripts/versions.sh $(find patches/libwinevbs -type f | sort) | sha256sum | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" + - name: Cache emsdk uses: https://github.com/actions/cache@v4 with: path: emsdk - key: emsdk-${{ hashFiles('scripts/versions.sh') }} + key: emsdk-${{ steps.cache-keys.outputs.emsdk }} - name: Cache wasm32 dependency builds uses: https://github.com/actions/cache@v4 with: path: build/deps-wasm32 - key: deps-wasm32-${{ hashFiles('scripts/versions.sh', 'patches/**') }} + key: deps-wasm32-${{ steps.cache-keys.outputs.deps-wasm32 }} - name: Cache libwinevbs build uses: https://github.com/actions/cache@v4 with: path: vendor/libwinevbs/build - key: libwinevbs-wasm32-${{ hashFiles('scripts/versions.sh', 'patches/libwinevbs/**') }} + key: libwinevbs-wasm32-${{ steps.cache-keys.outputs.libwinevbs }} - name: Setup (fetch + patch vendor sources) run: ./scripts/setup.sh @@ -77,23 +90,36 @@ jobs: sudo apt-get update sudo apt-get install -y bison cmake curl python3 + # Gitea Actions doesn't support the built-in hashFiles() expression + # function (unlike GitHub Actions) - it silently evaluates to an empty + # string, which turned every cache key below into the same constant + # string regardless of what actually changed, so a cache entry from + # before a dependency-version or patch change would still be reused + # forever. Hash the same inputs by hand instead. + - name: Compute cache keys + id: cache-keys + run: | + echo "emsdk=$(sha256sum scripts/versions.sh | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" + echo "deps-wasm32=$(cat scripts/versions.sh $(find patches -type f | sort) | sha256sum | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" + echo "libwinevbs=$(cat scripts/versions.sh $(find patches/libwinevbs -type f | sort) | sha256sum | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" + - name: Cache emsdk uses: https://github.com/actions/cache@v4 with: path: emsdk - key: emsdk-${{ hashFiles('scripts/versions.sh') }} + key: emsdk-${{ steps.cache-keys.outputs.emsdk }} - name: Cache wasm32 dependency builds uses: https://github.com/actions/cache@v4 with: path: build/deps-wasm32 - key: deps-wasm32-${{ hashFiles('scripts/versions.sh', 'patches/**') }} + key: deps-wasm32-${{ steps.cache-keys.outputs.deps-wasm32 }} - name: Cache libwinevbs build uses: https://github.com/actions/cache@v4 with: path: vendor/libwinevbs/build - key: libwinevbs-wasm32-${{ hashFiles('scripts/versions.sh', 'patches/libwinevbs/**') }} + key: libwinevbs-wasm32-${{ steps.cache-keys.outputs.libwinevbs }} - name: Setup (fetch + patch vendor sources) run: ./scripts/setup.sh