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

Add CI #1

Merged
merged 69 commits into from
Nov 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 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
99f108f
Quote MSRV version to avoid float parsing (#11)
jmchacon Aug 13, 2023
c704bcc
Install Openssl for Windows (#12)
chapeupreto Aug 20, 2023
7c327dd
Don't install OpenSSL on Windows by default
jonhoo Aug 20, 2023
deb9fd3
Bump actions/checkout from 3 to 4 (#13)
dependabot[bot] Sep 9, 2023
bfee117
docs: Add documentation based on the youtube video (#10)
joshka Nov 11, 2023
3d6ab95
Nit: Selecting direct minimal versions flag is -Zdirect-minimal-versi…
MathiasPius Nov 11, 2023
597afe4
Merge remote-tracking branch 'ci/main'
OchirErkhembayar Nov 17, 2023
ec7d87f
Remove unnecessary workflow files
OchirErkhembayar Nov 17, 2023
6003139
Adding build step
OchirErkhembayar Nov 17, 2023
8bda732
Remove doc test
OchirErkhembayar Nov 17, 2023
6676e34
Remove upload to codecov.io
OchirErkhembayar Nov 17, 2023
d3947d5
Chage msrv
OchirErkhembayar Nov 17, 2023
29a71ad
Updated check
OchirErkhembayar Nov 17, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .github/DOCS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Github config and workflows

In this folder there is configuration for codecoverage, dependabot, and ci
workflows that check the library more deeply than the default configurations.

This folder can be or was merged using a --allow-unrelated-histories merge
strategy from <https://github.com/jonhoo/rust-ci-conf/> which provides a
reasonably sensible base for writing your own ci on. By using this strategy
the history of the CI repo is included in your repo, and future updates to
the CI can be merged later.

To perform this merge run:

```shell
git remote add ci https://github.com/jonhoo/rust-ci-conf.git
git fetch ci
git merge --allow-unrelated-histories ci/main
```

An overview of the files in this project is available at:
<https://www.youtube.com/watch?v=xUH-4y92jPg&t=491s>, which contains some
rationale for decisions and runs through an example of solving minimal version
and OpenSSL issues.
21 changes: 21 additions & 0 deletions .github/codecov.yml
Original file line number Diff line number Diff line change
@@ -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: true
19 changes: 19 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
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 as consumers of this library build
# with their own lockfile, rather than the version specified in this library's lockfile
# remove this ignore rule if your package has binaries to ensure that the binaries are
# built with the exact set of dependencies and those are up to date.
update-types:
- "version-update:semver-patch"
- "version-update:semver-minor"
112 changes: 112 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# This workflow runs whenever a PR is opened or updated, or a commit is pushed to main. It runs
# several checks:
# - fmt: checks that the code is formatted according to rustfmt
# - clippy: checks that the code does not contain any clippy warnings
# - doc: checks that the code can be documented without errors
# - hack: check combinations of feature flags
# - msrv: check that the msrv specified in the crate is correct
permissions:
contents: read
# This configuration allows maintainers of this repo to create a branch and pull request based on
# the new branch. Restricting the push trigger to the main branch ensures that the PR only gets
# built once.
on:
push:
branches: [main]
pull_request:
# If new code is pushed to a PR branch, then cancel in progress workflows for that PR. Ensures that
# we don't waste CI time, and returns results quicker 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@v4
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:
# Get early warning of new lints which are regularly introduced in beta channels.
toolchain: [stable, beta]
steps:
- uses: actions/checkout@v4
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:
# run docs generation on nightly rather than stable. This enables features like
# https://doc.rust-lang.org/beta/unstable-book/language-features/doc-cfg.html which allows an
# API be documented as only available in some specific platforms.
runs-on: ubuntu-latest
name: nightly / doc
steps:
- uses: actions/checkout@v4
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:
# cargo-hack checks combinations of feature flags to ensure that features are all additive
# which is required for feature unification
runs-on: ubuntu-latest
name: ubuntu / stable / features
steps:
- uses: actions/checkout@v4
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
# --feature-powerset runs for every combination of features
- name: cargo hack
run: cargo hack --feature-powerset check
msrv:
# check that we can build using the minimal rust version that is specified by this crate
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.73.0"]
name: ubuntu / ${{ matrix.msrv }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install ${{ matrix.msrv }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.msrv }}
- name: cargo +${{ matrix.msrv }} check
run: cargo check
58 changes: 58 additions & 0 deletions .github/workflows/scheduled.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Run scheduled (rolling) jobs on a nightly basis, as your crate may break independently of any
# given PR. E.g., updates to rust nightly and updates to this crates dependencies. See check.yml for
# information about how the concurrency cancelation and workflow triggering works
permissions:
contents: read
on:
push:
branches: [main]
pull_request:
schedule:
- cron: '7 7 * * *'
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@v4
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:
# This action checks that updating the dependencies of this crate to the latest available that
# satisfy the versions in Cargo.toml does not break this crate. This is important as consumers
# of this crate will generally use the latest available crates. This is subject to the standard
# Cargo semver rules (i.e cargo does not update to a new major version unless explicitly told
# to).
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 repeat it.
steps:
- uses: actions/checkout@v4
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
130 changes: 130 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# This is the main CI workflow that runs the test suite on all pushes to main and all pull requests.
# It runs the following jobs:
# - required: runs the test suite on ubuntu with stable and beta rust toolchains
# - minimal: runs the test suite with the minimal versions of the dependencies that satisfy the
# requirements of this crate, and its dependencies
# - os-check: runs the test suite on mac and windows
# - coverage: runs the test suite and collects coverage information
# See check.yml for information about how the concurrency cancelation and workflow triggering works
permissions:
contents: read
on:
push:
branches: [main]
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
name: test
jobs:
required:
runs-on: ubuntu-latest
name: ubuntu / ${{ matrix.toolchain }}
strategy:
matrix:
# run on stable and beta to ensure that tests won't break on the next version of the rust
# toolchain
toolchain: [stable, beta]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install ${{ matrix.toolchain }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
- name: cargo generate-lockfile
# enable this ci template to run regardless of whether the lockfile is checked in or not
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
- name: Build
run: cargo build --all --release
# https://twitter.com/jonhoo/status/1571290371124260865
- name: cargo test --locked
run: cargo test --locked --all-features --all-targets
minimal:
# This action chooses the oldest version of the dependencies permitted by Cargo.toml to ensure
# that this crate is compatible with the minimal version that this crate and its dependencies
# require. This will pickup issues where this create relies on functionality that was introduced
# later than the actual version specified (e.g., when we choose just a major version, but a
# method was added after this version).
#
# This particular check can be difficult to get to succeed as often transitive dependencies may
# be incorrectly specified (e.g., a dependency specifies 1.0 but really requires 1.1.5). There
# is an alternative flag available -Zdirect-minimal-versions that uses the minimal versions for
# direct dependencies of this crate, while selecting the maximal versions for the transitive
# dependencies. Alternatively, you can add a line in your Cargo.toml to artificially increase
# the minimal dependency, which you do with e.g.:
# ```toml
# # for minimal-versions
# [target.'cfg(any())'.dependencies]
# openssl = { version = "0.10.55", optional = true } # needed to allow foo to build with -Zminimal-versions
# ```
# The optional = true is necessary in case that dependency isn't otherwise transitively required
# by your library, and the target bit is so that this dependency edge never actually affects
# Cargo build order. See also
# https://github.com/jonhoo/fantoccini/blob/fde336472b712bc7ebf5b4e772023a7ba71b2262/Cargo.toml#L47-L49.
# This action is run on ubuntu with the stable toolchain, as it is not expected to fail
runs-on: ubuntu-latest
name: ubuntu / stable / minimal-versions
steps:
- uses: actions/checkout@v4
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:
# run cargo test on mac and windows
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }} / stable
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest]
steps:
# if your project needs OpenSSL, uncommment this to fix Windows builds.
# it's commented out by default as tthe install command takes 5-10m.
# - run: echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append
# if: runner.os == 'Windows'
# - run: vcpkg install openssl:x64-windows-static-md
# if: runner.os == 'Windows'
- uses: actions/checkout@v4
with:
submodules: true
- name: Install stable
uses: dtolnay/rust-toolchain@stable
- name: cargo generate-lockfile
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
- name: cargo test
run: cargo test --locked --all-features --all-targets
coverage:
# use llvm-cov to build and collect coverage and outputs in a format that is compatible with
# codecov.io
runs-on: ubuntu-latest
name: ubuntu / stable / coverage
steps:
- uses: actions/checkout@v4
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
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/indexing/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ impl Parser {
let token = self.next_token();
if token.token_type != TokenType::Identifier {
// hack to get over things like $this->match()
if vec![TokenType::ColonColon, TokenType::ThinArrow].contains(&token.token_type) {
if [TokenType::ColonColon, TokenType::ThinArrow].contains(&token.token_type) {
self.next_token();
self.next_token();
self.next_token();
Expand Down
Loading