mirror of
https://github.com/obi1kenobi/cargo-semver-checks-action.git
synced 2024-11-24 00:49:34 +01:00
300d7d49b9
It's always caching. Or DNS. This time it was caching. A while back, we changed the default cache key prefix from empty-string to `semver` so that our cache key names don't start with a dash, since users found that confusing. We should have updated these tests accordingly at the time, but we did not. So how did the PR with the change pass? It used the caches from older runs of the same job which used the old names. When those caches expired and were GC'd by GitHub, the jobs started failing. This is what broke CI for #77. This PR will fix it.
431 lines
15 KiB
YAML
431 lines
15 KiB
YAML
name: Test action inputs
|
|
|
|
# Assumes that the latest published normal version of `ref_slice` not greater
|
|
# than 1.2.1 is 1.2.1 itself.
|
|
|
|
on:
|
|
workflow_call:
|
|
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
|
|
jobs:
|
|
test-package-patch:
|
|
name: Test input package (patch change)
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Setup the workspace with ref_slice patch change
|
|
uses: ./action/.github/workflows/setup-test-workspace
|
|
with:
|
|
ref-slice-ref: patch_change
|
|
- name: Run the action on ref_slice patch change
|
|
uses: ./action/
|
|
with:
|
|
package: ref_slice
|
|
- name: Run the action on the whole workspace (expected to fail)
|
|
id: action_all
|
|
uses: ./action/
|
|
continue-on-error: true
|
|
- name: Fail if the action has not returned any errors (but it should have)
|
|
if: steps.action_all.outcome != 'failure'
|
|
run: |
|
|
echo "Error! The action should have failed because of checking the dummy crate, but it has not!"
|
|
exit 1
|
|
- name: Run the action on ref_slice fork and one dummy crate (expected to fail)
|
|
id: action_one_dummy
|
|
uses: ./action/
|
|
with:
|
|
package: ref_slice, cargo-semver-action-dummy
|
|
continue-on-error: true
|
|
- name: Fail if the action has not returned any errors (but it should have)
|
|
if: steps.action_one_dummy.outcome != 'failure'
|
|
run: |
|
|
echo "Error! The action should have failed because of checking the dummy crate, but it has not!"
|
|
exit 1
|
|
|
|
test-package-major:
|
|
name: Test input package (major change)
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Setup the workspace with ref_slice major change
|
|
uses: ./action/.github/workflows/setup-test-workspace
|
|
with:
|
|
ref-slice-ref: major_change
|
|
- name: Run the action on ref_slice major change (expected to fail)
|
|
id: action_major
|
|
uses: ./action/
|
|
with:
|
|
package: ref_slice
|
|
continue-on-error: true
|
|
- name: Fail if the action has not returned any errors (but it should have)
|
|
if: steps.action_major.outcome != 'failure'
|
|
run: |
|
|
echo "Error! The action should have failed because of the breaking change, but it has not."
|
|
exit 1
|
|
|
|
test-package-exclude-rio:
|
|
name: Test inputs package and exclude on Rio library
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the Rio repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: oxigraph/rio
|
|
ref: 3bd01c2c977a0b01c918f6840cd05356477db358 # branch main
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Run the action using input package
|
|
uses: ./action/
|
|
with:
|
|
package: rio_api, rio_turtle, rio_xml
|
|
- name: Run the action using input exclude
|
|
uses: ./action/
|
|
with:
|
|
exclude: rio_testsuite
|
|
- name: Run with only default features
|
|
uses: ./action/
|
|
with:
|
|
package: rio_api, rio_turtle
|
|
feature-group: default-features
|
|
- name: Run with explicit features only
|
|
uses: ./action/
|
|
with:
|
|
package: rio_api, rio_turtle
|
|
feature-group: only-explicit-features
|
|
feature: generalized
|
|
|
|
test-exclude:
|
|
name: Test input exclude
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Setup the workspace with ref_slice patch change
|
|
uses: ./action/.github/workflows/setup-test-workspace
|
|
with:
|
|
ref-slice-ref: patch_change
|
|
- name: Run the action excluding both dummy crates
|
|
uses: ./action/
|
|
with:
|
|
exclude: cargo-semver-action-dummy, cargo-semver-action-dummy-2
|
|
- name: Run the action excluding only one of the dummy crates (expected to fail)
|
|
id: action_major
|
|
uses: ./action/
|
|
with:
|
|
exclude: cargo-semver-action-dummy
|
|
continue-on-error: true
|
|
- name: Fail if the action has not returned any errors (but it should have)
|
|
if: steps.action_major.outcome != 'failure'
|
|
run: |
|
|
echo "Error! The action should have failed because of the breaking change, but it has not."
|
|
exit 1
|
|
|
|
test-verbose:
|
|
# There is currently no way of asserting that the output is indeed verbose,
|
|
# so we at least check if the action runs without an error when the
|
|
# verbose option is enabled.
|
|
name: Test input verbose
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the test repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: mgr0dzicki/cargo-semver-action-ref-slice
|
|
ref: patch_change
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Run the action on ref_slice patch change
|
|
uses: ./action/
|
|
with:
|
|
verbose: true
|
|
|
|
test-manifest-path-patch:
|
|
name: Test input manifest-path (patch change)
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Setup the workspace with ref_slice patch change
|
|
uses: ./action/.github/workflows/setup-test-workspace
|
|
with:
|
|
ref-slice-ref: patch_change
|
|
- name: Run the action on ref_slice patch change (Cargo.toml path)
|
|
uses: ./action/
|
|
with:
|
|
manifest-path: ref_slice/Cargo.toml
|
|
- name: Run the action on ref_slice patch change (crate path)
|
|
uses: ./action/
|
|
with:
|
|
manifest-path: ref_slice
|
|
- name: Run the action on the whole workspace (Cargo.toml path, expected to fail)
|
|
id: action_all_cargo_toml
|
|
uses: ./action/
|
|
with:
|
|
manifest-path: ./Cargo.toml
|
|
continue-on-error: true
|
|
- name: Fail if the action has not returned any errors (but it should have)
|
|
if: steps.action_all_cargo_toml.outcome != 'failure'
|
|
run: |
|
|
echo "Error! The action should have failed because of checking the dummy crate, but it has not!"
|
|
exit 1
|
|
|
|
test-manifest-path-major:
|
|
name: Test input manifest-path (major change)
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Setup the workspace with ref_slice major change
|
|
uses: ./action/.github/workflows/setup-test-workspace
|
|
with:
|
|
ref-slice-ref: major_change
|
|
- name: Run the action on ref_slice major change (Cargo.toml path, expected to fail)
|
|
id: action_major_cargo_toml
|
|
uses: ./action/
|
|
with:
|
|
manifest-path: ref_slice/Cargo.toml
|
|
continue-on-error: true
|
|
- name: Fail if the action has not returned any errors (but it should have)
|
|
if: steps.action_major_cargo_toml.outcome != 'failure'
|
|
run: |
|
|
echo "Error! The action should have failed because of the breaking change, but it has not."
|
|
exit 1
|
|
- name: Run the action on ref_slice major change (crate path, expected to fail)
|
|
id: action_major_crate
|
|
uses: ./action/
|
|
with:
|
|
manifest-path: ref_slice
|
|
continue-on-error: true
|
|
- name: Fail if the action has not returned any errors (but it should have)
|
|
if: steps.action_major_crate.outcome != 'failure'
|
|
run: |
|
|
echo "Error! The action should have failed because of the breaking change, but it has not."
|
|
exit 1
|
|
|
|
test-manifest-path-with-space:
|
|
name: Test input manifest-path against path containing space
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the test repository and test with patch change and patch version bump
|
|
uses: actions/checkout@v4
|
|
with:
|
|
# Space inside the directory name is used in order to ensure it will
|
|
# be handled properly by the action.
|
|
path: 'ref slice'
|
|
repository: mgr0dzicki/cargo-semver-action-ref-slice
|
|
ref: patch_change
|
|
persist-credentials: true
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Run the action
|
|
uses: ./action/
|
|
with:
|
|
manifest-path: 'ref slice/Cargo.toml'
|
|
- name: Checkout the test with major change and patch version bump
|
|
run: |
|
|
cd "ref slice"
|
|
git fetch origin major_change
|
|
git checkout major_change
|
|
- name: Run the action (expected to fail)
|
|
id: action_major
|
|
uses: ./action/
|
|
with:
|
|
manifest-path: 'ref slice/Cargo.toml'
|
|
continue-on-error: true
|
|
- name: Fail if the action has not returned any errors (but it should have)
|
|
if: steps.action_major.outcome != 'failure'
|
|
run: |
|
|
echo "Error! The action should have failed because of the breaking change, but it has not."
|
|
exit 1
|
|
|
|
test-rust-toolchain-against-directory-override:
|
|
name: Test the action against toolchain override set using rustup
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the test repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: mgr0dzicki/cargo-semver-action-ref-slice
|
|
ref: patch_change
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Install latest beta
|
|
uses: dtolnay/rust-toolchain@beta
|
|
- name: Set local override to beta
|
|
run: rustup override set beta
|
|
- name: Run the action with rust-toolchain set to nightly
|
|
uses: ./action/
|
|
with:
|
|
rust-toolchain: nightly
|
|
- name: Get cache key
|
|
uses: actions/cache/restore@v4
|
|
id: get-cache-key
|
|
with:
|
|
path: ${{ github.workspace }}/semver-checks/target/semver-checks/cache
|
|
fail-on-cache-miss: true
|
|
lookup-only: true
|
|
key: semver-${{ github.job }}
|
|
restore-keys: |
|
|
semver-${{ github.job }}
|
|
- name: Fail if the toolchain used by the action is invalid
|
|
if: ${{ ! contains(steps.get-cache-key.outputs.cache-matched-key, 'nightly') }}
|
|
run: |
|
|
echo "The toolchain used by the action should be nightly, but it is not!"
|
|
exit 1
|
|
- name: Check the active toolchain
|
|
run: |
|
|
if ! rustup show active-toolchain | grep -q "beta"; then
|
|
echo "The active toolchain should be still beta, but it is $(rustup show active-toolchain)!"
|
|
exit 1
|
|
fi
|
|
|
|
test-rust-toolchain-against-toml-override:
|
|
name: Test the action against toolchain override specified in rust-toolchain.toml file
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the test repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: mgr0dzicki/cargo-semver-action-ref-slice
|
|
ref: patch_change
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Install latest beta
|
|
uses: dtolnay/rust-toolchain@beta
|
|
- name: Set override to beta in rust-toolchain.toml file
|
|
run: echo -e "[toolchain]\nchannel = \"beta\"" > rust-toolchain.toml
|
|
- name: Run the action with rust-toolchain set to nightly
|
|
uses: ./action/
|
|
with:
|
|
rust-toolchain: nightly
|
|
- name: Get cache key
|
|
uses: actions/cache/restore@v4
|
|
id: get-cache-key
|
|
with:
|
|
path: ${{ github.workspace }}/semver-checks/target/semver-checks/cache
|
|
fail-on-cache-miss: true
|
|
lookup-only: true
|
|
key: semver-${{ github.job }}
|
|
restore-keys: |
|
|
semver-${{ github.job }}
|
|
- name: Fail if the toolchain used by the action is invalid
|
|
if: ${{ ! contains(steps.get-cache-key.outputs.cache-matched-key, 'nightly') }}
|
|
run: |
|
|
echo "The toolchain used by the action should be nightly, but it is not!"
|
|
exit 1
|
|
- name: Check the active toolchain
|
|
run: |
|
|
if ! rustup show active-toolchain | grep -q "beta"; then
|
|
echo "The active toolchain should be still beta, but it is $(rustup show active-toolchain)!"
|
|
exit 1
|
|
fi
|
|
|
|
test-rust-toolchain-manual:
|
|
name: Test whether action works properly with rust-toolchain set to 'manual'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the test repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: mgr0dzicki/cargo-semver-action-ref-slice
|
|
ref: patch_change
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Install latest beta
|
|
uses: dtolnay/rust-toolchain@beta
|
|
- name: Set local override to beta
|
|
run: rustup override set beta
|
|
- name: Run the action with manual rust-toolchain
|
|
uses: ./action/
|
|
with:
|
|
rust-toolchain: manual
|
|
- name: Get cache key
|
|
uses: actions/cache/restore@v4
|
|
id: get-cache-key
|
|
with:
|
|
path: ${{ github.workspace }}/semver-checks/target/semver-checks/cache
|
|
fail-on-cache-miss: true
|
|
lookup-only: true
|
|
key: semver-${{ github.job }}
|
|
restore-keys: |
|
|
semver-${{ github.job }}
|
|
- name: Fail if the toolchain used by the action is invalid
|
|
if: ${{ ! contains(steps.get-cache-key.outputs.cache-matched-key, 'beta') }}
|
|
run: |
|
|
echo "The toolchain used by the action should be beta, but it is not!"
|
|
exit 1
|
|
- name: Uninstall Rust
|
|
run: rustup self uninstall -y
|
|
- name: Run the action with manual rust-toolchain (expected to fail)
|
|
id: action_without_rust
|
|
uses: ./action/
|
|
with:
|
|
rust-toolchain: manual
|
|
continue-on-error: true
|
|
- name: Fail if the action has not returned any errors (but it should have)
|
|
if: steps.action_without_rust.outcome != 'failure'
|
|
run: |
|
|
echo "Error! The action should have failed because the Rust is not installed and rust-toolchain was set to '', but it has not."
|
|
exit 1
|
|
|
|
test-rust-toolchain-installs-rust:
|
|
name: Test whether action installs Rust toolchain by default
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the test repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: mgr0dzicki/cargo-semver-action-ref-slice
|
|
ref: patch_change
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Uninstall Rust
|
|
run: rustup self uninstall -y
|
|
- name: Run the action with default arguments
|
|
uses: ./action/
|
|
|
|
test-release-type:
|
|
name: Test input release-type
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the test repository and test with major change
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: mgr0dzicki/cargo-semver-action-ref-slice
|
|
ref: major_change
|
|
- name: Checkout the action
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: action
|
|
- name: Run the action with release-type set to major
|
|
uses: ./action/
|
|
with:
|
|
release-type: major
|