Skip to content

Cover basic and colored output regressions with unit tests #720

Cover basic and colored output regressions with unit tests

Cover basic and colored output regressions with unit tests #720

Workflow file for this run

name: CI
on:
push:
branches: ["main"]
tags: ["v*"]
pull_request:
branches: ["main"]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
RUST_BACKTRACE: 1
jobs:
################
# Pull Request #
################
pr:
if: ${{ github.event_name == 'pull_request' }}
needs:
- clippy
- feature
- msrv
- rustdoc
- rustfmt
- test
- test-book
runs-on: ubuntu-latest
steps:
- run: true
##########################
# Linting and formatting #
##########################
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: stable
components: clippy
- run: make cargo.lint
rustfmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: nightly
components: rustfmt
- run: make cargo.fmt check=yes
###########
# Testing #
###########
feature:
strategy:
fail-fast: false
matrix:
feature:
- <none>
- macros
- timestamps
- output-json
- output-junit
- libtest
- tracing
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: nightly
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: stable
- run: cargo +nightly update -Z minimal-versions
- run: cargo check -p cucumber --no-default-features
${{ (matrix.feature != '<none>'
&& format('--features {0}', matrix.feature))
|| '' }}
env:
RUSTFLAGS: -D warnings
msrv:
name: MSRV
strategy:
fail-fast: false
matrix:
msrv: ["1.70.0"]
crate:
- cucumber-codegen
- cucumber
os: ["ubuntu", "macOS", "windows"]
runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: nightly
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: ${{ matrix.msrv }}
- run: cargo +nightly update -Z minimal-versions
- run: make test.cargo crate=${{ matrix.crate }}
test:
strategy:
fail-fast: false
matrix:
crate:
- cucumber-codegen
- cucumber
toolchain: ["stable", "beta", "nightly"]
os: ["ubuntu", "macOS", "windows"]
runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
components: rust-src
- run: cargo install cargo-careful
if: ${{ matrix.toolchain == 'nightly' }}
- run: make test.cargo crate=${{ matrix.crate }}
careful=${{ (matrix.toolchain == 'nightly' && 'yes')
|| 'no' }}
test-book:
name: test (Book, ${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: ["ubuntu", "macOS", "windows"]
runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: stable
- uses: peaceiris/actions-mdbook@v1
- run: make test.book
#################
# Documentation #
#################
rustdoc:
strategy:
fail-fast: false
matrix:
crate:
- cucumber-codegen
- cucumber
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: nightly
- run: make cargo.doc crate=${{ matrix.crate }}
private=yes docsrs=yes
open=no
env:
RUSTFLAGS: -D warnings
#############
# Releasing #
#############
publish:
name: publish (crates.io)
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
needs: ["release-github"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: stable
- run: cargo publish -p cucumber-codegen
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CRATESIO_TOKEN }}
- run: cargo publish -p cucumber
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CRATESIO_TOKEN }}
release-github:
name: release (GitHub)
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
needs:
- clippy
- feature
- msrv
- rustdoc
- rustfmt
- test
- test-book
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Parse release version
id: release
run: echo "version=${GITHUB_REF#refs/tags/v}"
>> $GITHUB_OUTPUT
- name: Verify release version matches `cucumber-codegen` Cargo manifest
run: |
test "${{ steps.release.outputs.version }}" \
== "$(grep -m1 'version = "' codegen/Cargo.toml | cut -d '"' -f2)"
- name: Verify release version matches `cucumber` Cargo manifest
run: |
test "${{ steps.release.outputs.version }}" \
== "$(grep -m1 'version = "' Cargo.toml | cut -d '"' -f2)"
- name: Parse CHANGELOG link
id: changelog
run: echo "link=${{ github.server_url }}/${{ github.repository }}/blob/v${{ steps.release.outputs.version }}/CHANGELOG.md#$(sed -n '/^## \[${{ steps.release.outputs.version }}\]/{s/^## \[\(.*\)\][^0-9]*\([0-9].*\)/\1--\2/;s/[^0-9a-z-]*//g;p;}' CHANGELOG.md)"
>> $GITHUB_OUTPUT
- name: Create GitHub release
uses: softprops/action-gh-release@v1
with:
name: ${{ steps.release.outputs.version }}
body: |
[API docs](https://docs.rs/cucumber/${{ steps.release.outputs.version }})
[Changelog](${{ steps.changelog.outputs.link }})
prerelease: ${{ contains(steps.release.outputs.version, '-') }}
##########
# Deploy #
##########
deploy-book:
name: deploy (Book)
if: ${{ github.ref == 'refs/heads/main'
|| startsWith(github.ref, 'refs/tags/v') }}
needs: ["test-book"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: peaceiris/actions-mdbook@v1
- run: make book.build
out=gh-pages/${{ (github.ref == 'refs/heads/main'
&& 'main')
|| 'current' }}
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
keep_files: true
publish_dir: book/gh-pages