Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: add github workflows #271

Closed
wants to merge 64 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
1c486b2
Add one codecov
jonhoo Sep 17, 2022
1b8c305
Merge another codecov
jonhoo Sep 17, 2022
7f34f79
Merge another codecov
jonhoo Sep 17, 2022
510b696
Merge another codecov
jonhoo Sep 17, 2022
b32648c
Merge another codecov
jonhoo Sep 17, 2022
126c9a3
Place codecov config under .github
jonhoo Sep 17, 2022
11027d3
Add (only) ASAN workflow
jonhoo Sep 17, 2022
bbdbd96
Add first coverage workflow
jonhoo Sep 17, 2022
fe6ba38
Merge another coverage.yml
jonhoo Sep 17, 2022
1fe2a6d
Merge another coverage.yml
jonhoo Sep 17, 2022
225ad39
Add first features workflow
jonhoo Sep 17, 2022
922692a
Merge another features workflow
jonhoo Sep 17, 2022
043eb24
Merge another features workflow
jonhoo Sep 17, 2022
d8c8a99
Merge another features workflow
jonhoo Sep 17, 2022
f67cad0
Add (only) loom workflow
jonhoo Sep 17, 2022
bf66d94
Add (only) LSAN workflow
jonhoo Sep 17, 2022
c65a7c4
Add first minial workflow
jonhoo Sep 17, 2022
77079d7
Add (only) miri workflow
jonhoo Sep 17, 2022
9b48ae3
Add first msrv workflow
jonhoo Sep 17, 2022
b60aa55
Merge another msrv workflow
jonhoo Sep 17, 2022
1113c89
Merge another msrv workflow
jonhoo Sep 17, 2022
e6ef8e3
Merge another msrv workflow
jonhoo Sep 17, 2022
c74ee96
Add (only) no-std workflow
jonhoo Sep 17, 2022
92379c8
Add first os-check workflow
jonhoo Sep 17, 2022
05dd468
Merge another os-check workflow
jonhoo Sep 17, 2022
bc3f551
Add first style workflow
jonhoo Sep 17, 2022
fe46040
Merge another style workflow
jonhoo Sep 17, 2022
3bd8b12
Merge another style workflow
jonhoo Sep 17, 2022
8953a88
Add first test workflow
jonhoo Sep 17, 2022
0910d97
Merge another test workflow
jonhoo Sep 17, 2022
971c3fd
Merge another test workflow
jonhoo Sep 17, 2022
2de2235
Merge another test workflow
jonhoo Sep 17, 2022
0f90a0b
Make everything use checkout@v3
jonhoo Sep 17, 2022
99ddee8
Standardize on 'main' as branch name
jonhoo Sep 17, 2022
8736566
Missed a submodule checkout
jonhoo Sep 17, 2022
4859c12
Add TODOs from twitter thread
jonhoo Sep 18, 2022
afa2531
Practice what you preach
jonhoo Sep 18, 2022
71c2048
mv github .github
jonhoo Sep 18, 2022
56d4398
Merge safety workflows
jonhoo Sep 18, 2022
15c1fa2
Catch upcoming deprecations
jonhoo Sep 18, 2022
ea198cc
More concise name for scheduled jobs
jonhoo Sep 18, 2022
441dc27
Allow examples and binaries to require features
jonhoo Sep 18, 2022
b783cb3
Use dependabot, but only for major versions
jonhoo Sep 23, 2022
cf47d4c
ignore is a list
jonhoo Sep 29, 2022
82cbed8
Notify if actions themselves are outdated
jonhoo Dec 10, 2022
c8a7835
Bump codecov/codecov-action from 2 to 3
dependabot[bot] Dec 10, 2022
d6bd5c6
Merge pull request #1 from jonhoo/dependabot/github_actions/codecov/c…
jonhoo Dec 10, 2022
362696a
Move to maintained rust installer
jonhoo Mar 11, 2023
90999e1
Fix install message for msrv
jonhoo Mar 11, 2023
9afb0e1
Get rid of most actions-rs bits
jonhoo Mar 11, 2023
a076ec1
Minimal token permissions
jonhoo Mar 11, 2023
5ea5935
Remove -Zmiri-tag-raw-pointers as it's now default
jonhoo Mar 12, 2023
0d12c82
Unbreak cargo hack for non-libraries (#4)
Tudyx Mar 20, 2023
80a8919
Add action to run doctest. (#3)
Wasabi375 Mar 20, 2023
16a2c29
chore: automatically cancel superseded Actions runs (#5)
SimenB Apr 8, 2023
6332a3a
[sanity] More robust injection of opt-level 1 (#9)
jonhoo Apr 24, 2023
d668c3d
ci: merge https://github.com/jonhoo/rust-ci-conf/
joshka May 16, 2023
4255fc8
ci: check msrv against 1.32.0
joshka May 16, 2023
c237241
style: run cargo fmt to fix formatting
joshka May 16, 2023
08ac778
ci: add 1.32 and nightly to the OS text matrix
joshka May 16, 2023
d6af9fd
ci: do not test 1.32.0 against all-features
joshka May 16, 2023
ed4fda4
ci: remove safety.yml
joshka May 16, 2023
ede610f
ci: exclude strum_tests from no-std checks
joshka May 16, 2023
0166b90
fix: strum_nostd_tests should not include std
joshka May 16, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
21 changes: 21 additions & 0 deletions .github/codecov.yml
@@ -0,0 +1,21 @@
# ref: https://docs.codecov.com/docs/codecovyml-reference
coverage:
# Hold ourselves to a high bar
range: 85..100
round: down
precision: 1
status:
# ref: https://docs.codecov.com/docs/commit-status
project:
default:
# Avoid false negatives
threshold: 1%

# Test files aren't important for coverage
ignore:
- "tests"

# Make comments less noisy
comment:
layout: "files"
require_changes: yes
17 changes: 17 additions & 0 deletions .github/dependabot.yml
@@ -0,0 +1,17 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: daily
- package-ecosystem: cargo
directory: /
schedule:
interval: daily
ignore:
- dependency-name: "*"
# patch and minor updates don't matter for libraries
# remove this ignore rule if your package has binaries
update-types:
- "version-update:semver-patch"
- "version-update:semver-minor"
93 changes: 93 additions & 0 deletions .github/workflows/check.yml
@@ -0,0 +1,93 @@
permissions:
contents: read
on:
push:
branches: [main]
pull_request:
# Spend CI time only on latest ref: https://github.com/jonhoo/rust-ci-conf/pull/5
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
name: check
jobs:
fmt:
runs-on: ubuntu-latest
name: stable / fmt
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install stable
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: cargo fmt --check
run: cargo fmt --check
clippy:
runs-on: ubuntu-latest
name: ${{ matrix.toolchain }} / clippy
permissions:
contents: read
checks: write
strategy:
fail-fast: false
matrix:
toolchain: [stable, beta]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install ${{ matrix.toolchain }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
components: clippy
- name: cargo clippy
uses: actions-rs/clippy-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
doc:
runs-on: ubuntu-latest
name: nightly / doc
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install nightly
uses: dtolnay/rust-toolchain@nightly
- name: cargo doc
run: cargo doc --no-deps --all-features
env:
RUSTDOCFLAGS: --cfg docsrs
hack:
runs-on: ubuntu-latest
name: ubuntu / stable / features
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install stable
uses: dtolnay/rust-toolchain@stable
- name: cargo install cargo-hack
uses: taiki-e/install-action@cargo-hack
# intentionally no target specifier; see https://github.com/jonhoo/rust-ci-conf/pull/4
- name: cargo hack
run: cargo hack --feature-powerset check
msrv:
runs-on: ubuntu-latest
# we use a matrix here just because env can't be used in job names
# https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability
strategy:
matrix:
msrv: [1.32.0]
name: ubuntu / ${{ matrix.msrv }}
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install ${{ matrix.msrv }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.msrv }}
- name: cargo +${{ matrix.msrv }} check
run: cargo check
29 changes: 29 additions & 0 deletions .github/workflows/nostd.yml
@@ -0,0 +1,29 @@
permissions:
contents: read
on:
push:
branches: [main]
pull_request:
# Spend CI time only on latest ref: https://github.com/jonhoo/rust-ci-conf/pull/5
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
name: no-std
jobs:
nostd:
runs-on: ubuntu-latest
name: ${{ matrix.target }}
strategy:
matrix:
target: [thumbv7m-none-eabi, aarch64-unknown-none]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install stable
uses: dtolnay/rust-toolchain@stable
- name: rustup target add ${{ matrix.target }}
run: rustup target add ${{ matrix.target }}
- name: cargo check
# exclude strum_tests as textwrap (used by structopt) is not compatible with no-std
run: cargo check --target ${{ matrix.target }} --no-default-features -p strum -p strum_nostd_tests
52 changes: 52 additions & 0 deletions .github/workflows/scheduled.yml
@@ -0,0 +1,52 @@
permissions:
contents: read
on:
push:
branches: [main]
pull_request:
schedule:
- cron: '7 7 * * *'
# Spend CI time only on latest ref: https://github.com/jonhoo/rust-ci-conf/pull/5
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
name: rolling
jobs:
# https://twitter.com/mycoliza/status/1571295690063753218
nightly:
runs-on: ubuntu-latest
name: ubuntu / nightly
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install nightly
uses: dtolnay/rust-toolchain@nightly
- name: cargo generate-lockfile
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
- name: cargo test --locked
run: cargo test --locked --all-features --all-targets
# https://twitter.com/alcuadrado/status/1571291687837732873
update:
runs-on: ubuntu-latest
name: ubuntu / beta / updated
# There's no point running this if no Cargo.lock was checked in in the
# first place, since we'd just redo what happened in the regular test job.
# Unfortunately, hashFiles only works in if on steps, so we reepeat it.
# if: hashFiles('Cargo.lock') != ''
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install beta
if: hashFiles('Cargo.lock') != ''
uses: dtolnay/rust-toolchain@beta
- name: cargo update
if: hashFiles('Cargo.lock') != ''
run: cargo update
- name: cargo test
if: hashFiles('Cargo.lock') != ''
run: cargo test --locked --all-features --all-targets
env:
RUSTFLAGS: -D deprecated
111 changes: 111 additions & 0 deletions .github/workflows/test.yml
@@ -0,0 +1,111 @@
permissions:
contents: read
on:
push:
branches: [main]
pull_request:
# Spend CI time only on latest ref: https://github.com/jonhoo/rust-ci-conf/pull/5
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
name: test
jobs:
required:
# test on ubuntu, fail fast if this fails, as it's unlikely that the other
# OSes will succed. This is the only target that builds the docs, as it's
# not necessary to build this on every OS.
runs-on: ubuntu-latest
name: ubuntu / ${{ matrix.toolchain }}
strategy:
fail-fast: true
matrix:
toolchain: [1.32.0, stable, beta, nightly]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install ${{ matrix.toolchain }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
- name: cargo generate-lockfile
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
# https://twitter.com/jonhoo/status/1571290371124260865
- name: cargo test --locked --all-features
# test_phf feature is incompatible with 1.32
if: matrix.toolchain != '1.32.0'
run: cargo test --locked --all-features --all-targets --verbose
- name: cargo test --locked
if: matrix.toolchain == '1.32.0'
run: cargo test --locked --all-targets --verbose
# Cargo test --all-targets doesn't run doc tests
# https://github.com/rust-lang/cargo/issues/6669
- name: cargo test --doc
if: matrix.toolchain != '1.32.0'
run: cargo test --locked --all-features --doc
minimal:
runs-on: ubuntu-latest
name: ubuntu / stable / minimal-versions
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install stable
uses: dtolnay/rust-toolchain@stable
- name: Install nightly for -Zminimal-versions
uses: dtolnay/rust-toolchain@nightly
- name: rustup default stable
run: rustup default stable
- name: cargo update -Zminimal-versions
run: cargo +nightly update -Zminimal-versions
- name: cargo test
run: cargo test --locked --all-features --all-targets
os-check:
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }} / ${{ matrix.toolchain}}
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest]
toolchain: [1.32.0, stable, beta, nightly]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install ${{ matrix.toolchain}}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain}}
- name: cargo generate-lockfile
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
- name: cargo test --locked --all-features
# test_phf feature is incompatible with 1.32
if: matrix.toolchain != '1.32.0'
run: cargo test --locked --all-features --all-targets --verbose
- name: cargo test --locked
if: matrix.toolchain == '1.32.0'
run: cargo test --locked --all-targets --verbose
coverage:
runs-on: ubuntu-latest
name: ubuntu / stable / coverage
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install stable
uses: dtolnay/rust-toolchain@stable
with:
components: llvm-tools-preview
- name: cargo install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- name: cargo generate-lockfile
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
- name: cargo llvm-cov
run: cargo llvm-cov --locked --all-features --lcov --output-path lcov.info
- name: Upload to codecov.io
uses: codecov/codecov-action@v3
with:
fail_ci_if_error: true
3 changes: 2 additions & 1 deletion strum_macros/src/helpers/case_style.rs
@@ -1,5 +1,6 @@
use heck::{
ToKebabCase, ToLowerCamelCase, ToShoutySnakeCase, ToSnakeCase, ToTitleCase, ToUpperCamelCase, ToTrainCase,
ToKebabCase, ToLowerCamelCase, ToShoutySnakeCase, ToSnakeCase, ToTitleCase, ToTrainCase,
ToUpperCamelCase,
};
use std::str::FromStr;
use syn::{
Expand Down
19 changes: 11 additions & 8 deletions strum_macros/src/macros/enum_messages.rs
Expand Up @@ -74,14 +74,17 @@ pub fn enum_message_inner(ast: &DeriveInput) -> syn::Result<TokenStream> {
if !documentation.is_empty() {
let params = params.clone();
// Strip a single leading space from each documentation line.
let documentation: Vec<LitStr> = documentation.iter().map(|lit_str| {
let line = lit_str.value();
if line.starts_with(' ') {
LitStr::new(&line.as_str()[1..], lit_str.span())
} else {
lit_str.clone()
}
}).collect();
let documentation: Vec<LitStr> = documentation
.iter()
.map(|lit_str| {
let line = lit_str.value();
if line.starts_with(' ') {
LitStr::new(&line.as_str()[1..], lit_str.span())
} else {
lit_str.clone()
}
})
.collect();
if documentation.len() == 1 {
let text = &documentation[0];
documentation_arms
Expand Down
2 changes: 1 addition & 1 deletion strum_macros/src/macros/strings/from_string.rs
Expand Up @@ -79,7 +79,7 @@ pub fn from_string_inner(ast: &DeriveInput) -> syn::Result<TokenStream> {
phf_exact_match_arms.push(quote! { #serialization => #name::#ident #params, });

if is_ascii_case_insensitive {
// Store the lowercase and UPPERCASE variants in the phf map to capture
// Store the lowercase and UPPERCASE variants in the phf map to capture
let ser_string = serialization.value();

let lower =
Expand Down
2 changes: 1 addition & 1 deletion strum_nostd_tests/Cargo.toml
Expand Up @@ -6,7 +6,7 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
strum = { path = "../strum", features = ["derive"] }
strum = { path = "../strum", default-features = false, features = ["derive"] }
strum_macros = { path = "../strum_macros", features = [] }

[dev-dependencies]
Expand Down
5 changes: 4 additions & 1 deletion strum_tests/tests/enum_message.rs
Expand Up @@ -47,7 +47,10 @@ fn only_detailed_message() {

#[test]
fn documentation() {
assert_eq!("I eat birds.\n\nAnd fish.\n", (Pets::Cat).get_documentation().unwrap());
assert_eq!(
"I eat birds.\n\nAnd fish.\n",
(Pets::Cat).get_documentation().unwrap()
);
assert_eq!("I'm a fish.", (Pets::Fish).get_documentation().unwrap());
assert_eq!("I'm a bird.", (Pets::Bird).get_documentation().unwrap());
}
Expand Down