cargo-semver-checks/.github/workflows/test-inputs.yml
Mieszko Grodzicki f9ffdc4a3d
Add inputs to control the Rust toolchain (#34)
* Add inputs for controlling rust toolchain

* Add tests for new inputs

* Negated ifs!

* Fix action input name

* Better description of rust-override

* New logic of choosing toolchain

* Add explaining comment.

* Add rust-toolchain.toml test
2023-04-08 10:21:06 -04:00

342 lines
12 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
CARGO_TERM_COLOR: always
jobs:
test-package-patch:
name: Test input package (patch change)
runs-on: ubuntu-latest
steps:
- name: Checkout the action
uses: actions/checkout@v3
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 (allowed 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
test-package-major:
name: Test input package (major change)
runs-on: ubuntu-latest
steps:
- name: Checkout the action
uses: actions/checkout@v3
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 (allowed 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-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@v3
with:
repository: mgr0dzicki/cargo-semver-action-ref-slice
ref: patch_change
- name: Checkout the action
uses: actions/checkout@v3
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@v3
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, allowed 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@v3
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, allowed 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, allowed 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@v3
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@v3
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 (allowed 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@v3
with:
repository: mgr0dzicki/cargo-semver-action-ref-slice
ref: patch_change
- name: Checkout the action
uses: actions/checkout@v3
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@v3
id: get-cache-key
with:
path: ${{ github.workspace }}/semver-checks/target/semver-checks/cache
fail-on-cache-miss: true
lookup-only: true
key: -${{ github.job }}
restore-keys: |
-${{ 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@v3
with:
repository: mgr0dzicki/cargo-semver-action-ref-slice
ref: patch_change
- name: Checkout the action
uses: actions/checkout@v3
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@v3
id: get-cache-key
with:
path: ${{ github.workspace }}/semver-checks/target/semver-checks/cache
fail-on-cache-miss: true
lookup-only: true
key: -${{ github.job }}
restore-keys: |
-${{ 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-empty:
name: Test whether action works properly with rust-toolchain set to an empty string
runs-on: ubuntu-latest
steps:
- name: Checkout the test repository
uses: actions/checkout@v3
with:
repository: mgr0dzicki/cargo-semver-action-ref-slice
ref: patch_change
- name: Checkout the action
uses: actions/checkout@v3
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 empty rust-toolchain
uses: ./action/
with:
rust-toolchain: ''
- name: Get cache key
uses: actions/cache/restore@v3
id: get-cache-key
with:
path: ${{ github.workspace }}/semver-checks/target/semver-checks/cache
fail-on-cache-miss: true
lookup-only: true
key: -${{ github.job }}
restore-keys: |
-${{ 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 empty rust-toolchain (allowed to fail)
id: action_without_rust
uses: ./action/
with:
rust-toolchain: ''
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@v3
with:
repository: mgr0dzicki/cargo-semver-action-ref-slice
ref: patch_change
- name: Checkout the action
uses: actions/checkout@v3
with:
path: action
- name: Uninstall Rust
run: rustup self uninstall -y
- name: Run the action with default arguments
uses: ./action/