ci: harden workflows against network/CDN flakes (resilient cache + setup retries) (#101)
This commit is contained in:
@@ -35,8 +35,25 @@ jobs:
|
|||||||
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable branch, 2026-03-27
|
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable branch, 2026-03-27
|
||||||
|
|
||||||
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
|
continue-on-error: true # cache is an optimisation; never block on a stuck/slow restore
|
||||||
|
timeout-minutes: 6
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
|
id: setup_python
|
||||||
|
continue-on-error: true
|
||||||
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
|
with:
|
||||||
|
python-version: "3.11"
|
||||||
|
|
||||||
|
- name: Wait before Python retry
|
||||||
|
if: steps.setup_python.outcome == 'failure'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "::warning::setup-python failed (likely CDN flake), waiting 30s before retry..."
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
- name: Set up Python (retry)
|
||||||
|
if: steps.setup_python.outcome == 'failure'
|
||||||
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.11"
|
python-version: "3.11"
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Cache cargo
|
- name: Cache cargo
|
||||||
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
|
continue-on-error: true # cache is an optimisation; never block on a stuck/slow restore
|
||||||
|
timeout-minutes: 6
|
||||||
|
|
||||||
- name: Format check
|
- name: Format check
|
||||||
run: cargo fmt --all -- --check
|
run: cargo fmt --all -- --check
|
||||||
@@ -67,11 +69,43 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
- name: Set up Node
|
||||||
|
id: setup_node
|
||||||
|
continue-on-error: true
|
||||||
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version: "20"
|
||||||
|
|
||||||
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
- name: Wait before Node retry
|
||||||
|
if: steps.setup_node.outcome == 'failure'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "::warning::setup-node failed (likely CDN flake), waiting 30s before retry..."
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
- name: Set up Node (retry)
|
||||||
|
if: steps.setup_node.outcome == 'failure'
|
||||||
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
id: setup_python
|
||||||
|
continue-on-error: true
|
||||||
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
|
with:
|
||||||
|
python-version: "3.12"
|
||||||
|
|
||||||
|
- name: Wait before Python retry
|
||||||
|
if: steps.setup_python.outcome == 'failure'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "::warning::setup-python failed (likely CDN flake), waiting 30s before retry..."
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
- name: Set up Python (retry)
|
||||||
|
if: steps.setup_python.outcome == 'failure'
|
||||||
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
|
|
||||||
@@ -128,17 +162,49 @@ jobs:
|
|||||||
components: clippy
|
components: clippy
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
|
id: setup_python
|
||||||
|
continue-on-error: true
|
||||||
|
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
||||||
|
with:
|
||||||
|
python-version: "3.12"
|
||||||
|
|
||||||
|
- name: Wait before Python retry
|
||||||
|
if: steps.setup_python.outcome == 'failure'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "::warning::setup-python failed (likely CDN flake), waiting 30s before retry..."
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
- name: Set up Python (retry)
|
||||||
|
if: steps.setup_python.outcome == 'failure'
|
||||||
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
|
|
||||||
- name: Set up Node
|
- name: Set up Node
|
||||||
|
id: setup_node
|
||||||
|
continue-on-error: true
|
||||||
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Wait before Node retry
|
||||||
|
if: steps.setup_node.outcome == 'failure'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "::warning::setup-node failed (likely CDN flake), waiting 30s before retry..."
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
- name: Set up Node (retry)
|
||||||
|
if: steps.setup_node.outcome == 'failure'
|
||||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version: "20"
|
||||||
|
|
||||||
- name: Cache cargo
|
- name: Cache cargo
|
||||||
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
|
continue-on-error: true # cache is an optimisation; never block on a stuck/slow restore
|
||||||
|
timeout-minutes: 6
|
||||||
|
|
||||||
- name: Clippy (bindings, all targets)
|
- name: Clippy (bindings, all targets)
|
||||||
run: cargo clippy -p wickra-node -p wickra-python --all-targets -- -D warnings
|
run: cargo clippy -p wickra-node -p wickra-python --all-targets -- -D warnings
|
||||||
@@ -175,6 +241,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Cache cargo
|
- name: Cache cargo
|
||||||
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
|
continue-on-error: true # cache is an optimisation; never block on a stuck/slow restore
|
||||||
|
timeout-minutes: 6
|
||||||
|
|
||||||
- name: Build on MSRV
|
- name: Build on MSRV
|
||||||
run: cargo build ${{ matrix.packages }} --verbose
|
run: cargo build ${{ matrix.packages }} --verbose
|
||||||
@@ -196,9 +264,12 @@ jobs:
|
|||||||
|
|
||||||
- name: Cache cargo
|
- name: Cache cargo
|
||||||
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
|
continue-on-error: true # cache is an optimisation; never block on a stuck/slow restore
|
||||||
|
timeout-minutes: 6
|
||||||
|
|
||||||
- name: Install cargo-llvm-cov
|
- name: Install cargo-llvm-cov
|
||||||
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
||||||
|
timeout-minutes: 10 # fail fast on a stuck download instead of hanging the job
|
||||||
with:
|
with:
|
||||||
tool: cargo-llvm-cov
|
tool: cargo-llvm-cov
|
||||||
|
|
||||||
@@ -248,6 +319,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Cache cargo
|
- name: Cache cargo
|
||||||
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
|
continue-on-error: true # cache is an optimisation; never block on a stuck/slow restore
|
||||||
|
timeout-minutes: 6
|
||||||
with:
|
with:
|
||||||
workspaces: fuzz
|
workspaces: fuzz
|
||||||
|
|
||||||
@@ -260,6 +333,7 @@ jobs:
|
|||||||
# never gets off the ground. The prebuilt binary avoids the entire
|
# never gets off the ground. The prebuilt binary avoids the entire
|
||||||
# transitive-dep compile.
|
# transitive-dep compile.
|
||||||
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
||||||
|
timeout-minutes: 10 # fail fast on a stuck download instead of hanging the job
|
||||||
with:
|
with:
|
||||||
tool: cargo-fuzz
|
tool: cargo-fuzz
|
||||||
|
|
||||||
@@ -299,6 +373,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Cache cargo
|
- name: Cache cargo
|
||||||
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
|
continue-on-error: true # cache is an optimisation; never block on a stuck/slow restore
|
||||||
|
timeout-minutes: 6
|
||||||
|
|
||||||
# setup-python downloads the interpreter from the Actions tool cache /
|
# setup-python downloads the interpreter from the Actions tool cache /
|
||||||
# nodejs CDN and occasionally hangs or 5xx's on the Windows runners.
|
# nodejs CDN and occasionally hangs or 5xx's on the Windows runners.
|
||||||
@@ -361,6 +437,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Cache cargo
|
- name: Cache cargo
|
||||||
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
|
continue-on-error: true # cache is an optimisation; never block on a stuck/slow restore
|
||||||
|
timeout-minutes: 6
|
||||||
|
|
||||||
- name: Install wasm-pack
|
- name: Install wasm-pack
|
||||||
# jetli/wasm-pack-action@v0.4.0 with no `version:` input installs an
|
# jetli/wasm-pack-action@v0.4.0 with no `version:` input installs an
|
||||||
@@ -371,6 +449,7 @@ jobs:
|
|||||||
# cargo-llvm-cov and cargo-fuzz; it tracks the latest wasm-pack
|
# cargo-llvm-cov and cargo-fuzz; it tracks the latest wasm-pack
|
||||||
# release, which has `--features` as a top-level flag (since 0.12).
|
# release, which has `--features` as a top-level flag (since 0.12).
|
||||||
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
||||||
|
timeout-minutes: 10 # fail fast on a stuck download instead of hanging the job
|
||||||
with:
|
with:
|
||||||
tool: wasm-pack
|
tool: wasm-pack
|
||||||
|
|
||||||
@@ -402,6 +481,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Cache cargo
|
- name: Cache cargo
|
||||||
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
|
continue-on-error: true # cache is an optimisation; never block on a stuck/slow restore
|
||||||
|
timeout-minutes: 6
|
||||||
|
|
||||||
# setup-node downloads Node from nodejs.org and we've seen it fail on
|
# setup-node downloads Node from nodejs.org and we've seen it fail on
|
||||||
# Windows runners with "Attempting to download 18..." followed by a
|
# Windows runners with "Attempting to download 18..." followed by a
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ jobs:
|
|||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable branch, 2026-03-27
|
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable branch, 2026-03-27
|
||||||
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
|
continue-on-error: true # cache is an optimisation; never block on a stuck/slow restore
|
||||||
|
timeout-minutes: 6
|
||||||
|
|
||||||
# Idempotent publishing: if the version is already on crates.io we
|
# Idempotent publishing: if the version is already on crates.io we
|
||||||
# treat that as success so re-runs of the workflow don't fail.
|
# treat that as success so re-runs of the workflow don't fail.
|
||||||
@@ -85,6 +87,7 @@ jobs:
|
|||||||
# re-resolving Cargo.lock.
|
# re-resolving Cargo.lock.
|
||||||
- name: Install cargo-cyclonedx
|
- name: Install cargo-cyclonedx
|
||||||
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
||||||
|
timeout-minutes: 10 # fail fast on a stuck download instead of hanging the job
|
||||||
with:
|
with:
|
||||||
tool: cargo-cyclonedx
|
tool: cargo-cyclonedx
|
||||||
|
|
||||||
@@ -131,7 +134,21 @@ jobs:
|
|||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
- name: Set up Python
|
||||||
|
id: setup_python
|
||||||
|
continue-on-error: true
|
||||||
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
|
with:
|
||||||
|
python-version: "3.11"
|
||||||
|
- name: Wait before Python retry
|
||||||
|
if: steps.setup_python.outcome == 'failure'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "::warning::setup-python failed (likely CDN flake), waiting 30s before retry..."
|
||||||
|
sleep 30
|
||||||
|
- name: Set up Python (retry)
|
||||||
|
if: steps.setup_python.outcome == 'failure'
|
||||||
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.11"
|
python-version: "3.11"
|
||||||
- name: Sync root README into bindings/python so it ships with the wheel
|
- name: Sync root README into bindings/python so it ships with the wheel
|
||||||
@@ -206,7 +223,23 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
- name: Set up Node
|
||||||
|
id: setup_node
|
||||||
|
continue-on-error: true
|
||||||
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Wait before Node retry
|
||||||
|
if: steps.setup_node.outcome == 'failure'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "::warning::setup-node failed (likely CDN flake), waiting 30s before retry..."
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
- name: Set up Node (retry)
|
||||||
|
if: steps.setup_node.outcome == 'failure'
|
||||||
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version: "20"
|
||||||
|
|
||||||
@@ -215,6 +248,8 @@ jobs:
|
|||||||
targets: ${{ matrix.target }}
|
targets: ${{ matrix.target }}
|
||||||
|
|
||||||
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
|
continue-on-error: true # cache is an optimisation; never block on a stuck/slow restore
|
||||||
|
timeout-minutes: 6
|
||||||
|
|
||||||
- name: Install Node deps
|
- name: Install Node deps
|
||||||
working-directory: bindings/node
|
working-directory: bindings/node
|
||||||
@@ -247,7 +282,24 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
- name: Set up Node
|
||||||
|
id: setup_node
|
||||||
|
continue-on-error: true
|
||||||
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
registry-url: "https://registry.npmjs.org"
|
||||||
|
|
||||||
|
- name: Wait before Node retry
|
||||||
|
if: steps.setup_node.outcome == 'failure'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "::warning::setup-node failed (likely CDN flake), waiting 30s before retry..."
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
- name: Set up Node (retry)
|
||||||
|
if: steps.setup_node.outcome == 'failure'
|
||||||
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version: "20"
|
||||||
registry-url: "https://registry.npmjs.org"
|
registry-url: "https://registry.npmjs.org"
|
||||||
@@ -397,7 +449,24 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
- name: Set up Node
|
||||||
|
id: setup_node
|
||||||
|
continue-on-error: true
|
||||||
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
registry-url: "https://registry.npmjs.org"
|
||||||
|
|
||||||
|
- name: Wait before Node retry
|
||||||
|
if: steps.setup_node.outcome == 'failure'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "::warning::setup-node failed (likely CDN flake), waiting 30s before retry..."
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
- name: Set up Node (retry)
|
||||||
|
if: steps.setup_node.outcome == 'failure'
|
||||||
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version: "20"
|
||||||
registry-url: "https://registry.npmjs.org"
|
registry-url: "https://registry.npmjs.org"
|
||||||
@@ -410,6 +479,7 @@ jobs:
|
|||||||
# See the matching note in ci.yml: jetli's default installs an old
|
# See the matching note in ci.yml: jetli's default installs an old
|
||||||
# 0.10.x wasm-pack whose build subcommand rejects --features.
|
# 0.10.x wasm-pack whose build subcommand rejects --features.
|
||||||
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
|
||||||
|
timeout-minutes: 10 # fail fast on a stuck download instead of hanging the job
|
||||||
with:
|
with:
|
||||||
tool: wasm-pack
|
tool: wasm-pack
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user