Commit Graph

78 Commits

Author SHA1 Message Date
Erick Cestari 2a6cbda304 ci: Update GitHub workflows to use ubuntu-24.04 instead of ubuntu-latest 2025-03-05 16:24:41 -03:00
Erick Cestari e3f409e3c4 ci: update Kani GitHub Actions runners to ubuntu-24.04
GitHub is deprecating the ubuntu-20.04 runner, with removal scheduled for
2025-04-01 (see: https://github.com/actions/runner-images/issues/11101)
This commit updates workflow files to use ubuntu-24.04 instead.
2025-03-04 14:11:22 -03:00
Tobin C. Harding cdece244d5
Update to latest maintainer-tools
We have made a couple of improvements to the `run_task` script
lately (*cough* actually test code with `--all-features`).

Lets update to use it.
2025-02-18 18:55:15 +11:00
Tobin C. Harding 2eccb3897a
CI: Remove the API job
It has been argued that the API files provide value for verifying that
code changes produce API changes in the expected way. This helps devs
and reviewers.

It has also been argued that the CI job adds friction and forces devs
to configure their environment unnecessarily.

Both viewpoints have some merit.

Lets remove the API files for now, and when we start doing 1.0-alpha
releases and can start to expect minimal API breaking changes (and
therefore minimal need to use the tooling).
2025-02-06 08:44:15 +11:00
Jamil Lambert, PhD ebab2d9aa7
Update cargo-public-api version
Version 0.42.0 is not compatible with the new version of rust nightly.

Update to v0.43.0
2025-02-04 17:36:26 +00:00
Tobin C. Harding e126a24307
Add API script
Add a script to generate API files using `cargo public-api` for the
crates that we are trying to stabalise (the so called 'leaf crates').

- hashes
- io
- primitives
- units

We already ran the script and committed the files last patch. The fact
that this patch does not include any changes to the `api/` directory and
that CI passes is enough to convince us that last patch was valid.

Add a CI job that runs the script and checks there are no changes to
the committed text files thereby proving no API changes are made in a
PR without explicitly modifying the API text files.

Add documentation to `CONTRIBUTING.md` on what is expected of devs.
2024-12-06 15:42:22 +11:00
Tobin C. Harding ec06028f63
hashes: Make hex dependency optional
The only reason we need `hex-conservative` is to parse strings and
format them as hex. For users that do not require this functionality we
can make the `hex-conservative` crate an optional dependency.

The `serde` feature requires `Display` so we enable `hex` from the
`serde` feature.

If `hex` feature is not enabled we still need to be able to debug so
provide `fmt::Debug` functionality by way of macros.

Close: #2654
2024-11-14 09:36:55 +11:00
Tobin C. Harding 312718cd6e
Update rust-bitcoin-maintainer-tools
Update to the latest commit hash of tip of master.
2024-11-05 07:52:13 +11:00
Tobin C. Harding b8dab65c3d
CI: Use latest run_task version
Recently we discovered a bug in the `run_task` script where we forgot to
use `--no-default-features` in a subset of test runs (the feature matrix
stuff).

Upgrade to use the latest version of `run_task.sh`.
2024-09-25 06:54:59 +10:00
Tobin C. Harding 90e073ef3e
Set CRATES mechanically
Instead of manually setting the crates list it is less error prone to do
so mechanically. This required some changes to the `run_task` script
which have now merged, so we update to use the new commit hash at the
same time.

- Use shell to set the `CRATES` env var used by `run_task.sh`.
- Use latest revision of  rust-bitcoin-maintainer-tools
2024-09-02 09:21:19 +10:00
Andrew Poelstra d03e5456a3
ci: fix `rev` to be `ref` when pinning bitcoin-maintainer-tools
Apparently the `checkout` action will just grab random shit in the case
that you configure it with an unknown key. There is a warning in the
middle of the CI output so ok, I guess there's that.

This commit does not change the pinned version of
rust-bitcoin-maintainer-tools, though we do want to update the pin,
because I want to make sure that the pin is actually working.
2024-08-22 17:22:25 +00:00
Martin Habovstiak c72069e921 Bump MSRV to 1.63
The version 1.63 satisfies our requirements for MSRV and provides
significant benefits so this commit bumps it. This commit also starts
using some advantages of the new MSRV, namely namespaced features, weak
dependencies and the ability to use trait bounds in `const` context.

This however does not yet migrade the `rand-std` feature because that
requires a release of `secp256k1` with the same kind of change - bumping
MSRV to 1.63 and removing `rand-std` in favor of weak dependency.
2024-07-27 07:24:32 +02:00
Jose Storopoli f8c91b067b
ci: move semver-checks to its own job
This is necessary because it needs to run only on pull_request,
and not on push events.
2024-07-05 17:27:08 -03:00
Jose Storopoli eeae225cfc
ci: add cargo-semver-checks 2024-07-04 10:08:06 +00:00
Jose Storopoli d9567b097f
ci: remove check-api
Removes check-api workflow, helper scripts, documentation, and files.
2024-07-04 10:08:06 +00:00
Tobin C. Harding 7e3b2ebb74
CI: Pin cargo-public-api version
So that updates don't break our CI setup used a specific version of
`cargo-public-api`, this means we will have to update it manually
periodically though.

For now, since the latest release just broke us, use the release from a
month ago.
2024-06-21 08:47:12 +10:00
Tobin C. Harding 1f58476cb4
Run schemars test from extra_tests
We have a mechanism to run additional custom tests by way of the
`extra_tests.sh` script in each crate.

Remove the CI job and run the schemars test using `extra_tests.sh`. This
patch changes the test coverage because currently the schemars test is
only run with a stable toolchain but with this patch applied it runs
with stable, MSRV, and nightly.

Fix: #2787
2024-06-14 13:44:18 +10:00
Tobin C. Harding 61b428b2d9
CI: Fix workflow quotes
During the last month of CI changes a few anomalies have snuck into the
main workflow file.

Make quotes uniform.
2024-05-19 08:50:17 +10:00
Tobin C. Harding b222f40f99
CI: Add job to check for API changes
Add a job that runs the new script to check for changes to the public
APIs of `hashes` and `bitcoin`.
2024-05-18 09:54:53 +10:00
Tobin C. Harding 6def5bc974
CI: Use run_task from maintainer tools
Use the shiny new `run_task.sh` script from maintainer tools.

This patch should not change the test coverage in any way.
2024-05-08 08:08:24 +10:00
Tobin C. Harding c5af52847b
CI: Add docs and document start
Add a document start and comment to help try to stop the readme from
going stale.

This removes a `yamllint` warning.

While we are clearing lint warnings disable the one causing

  warning  truthy value should be one of [false, true]  (truthy)

This is a know issue with GitHub actions yaml because `on` is a yaml
keyword, or something like that.
2024-05-08 06:12:13 +10:00
Tobin C. Harding 62ba10503a
CI: Use correct spacing
`yamllint` emits a few warnings of form:

  warning too few spaces before comment  (comments)

Use "correct" spacing.
2024-05-08 06:12:13 +10:00
Tobin C. Harding 44cb2255d3
CI: Add sanitizer script
As we did for the wasm job.

In preparation for using the `run_task` script from maintainer tools we
want to have all the things that are particular to `rust-bitcoin` out of
the current `run_task` script.

The address/memory sanitizer test is specific to `hashes`. Add a script
in `hashes/contrib` and call it from the ASAN job.

No test coverage change.
2024-05-08 06:12:13 +10:00
Tobin C. Harding 3407257936
CI: Add WASM script
In preparation for using the `run_task` script from maintainer tools we
want to have all the things that are particular to `rust-bitcoin` out of
the current `run_task` script.

The wasm test is specific to `hashes`. Add a script in `hashes/contrib`
and call it from the wasm job.

No test coverage change.
2024-05-08 06:12:13 +10:00
Tobin C. Harding cc14edf63f
CI: Run the schemars job directly using cargo
The `Schemars` job calls the `run_task.sh` script only to do a single
invocation of `cargo test` - just call cargo directly.
2024-05-08 06:12:13 +10:00
Tobin C. Harding 1fb12e1917
CI: Remove recent from schemars job
We do not used `cargo --locked` in the schemars job so copying the
recent lock file is deceiving.
2024-05-08 06:12:12 +10:00
Tobin C. Harding 8d7117bb0e
CI: Use original name
I've been a bit confused lately about pinning and the locks, at some
stage recently I changed 'Set dependencies' to 'Copy lock file'. Its no
biggy but the original that Kix wrote was correct and descriptive - it
was me who was confused. Revert it back to the original.
2024-05-08 06:12:12 +10:00
Tobin C. Harding 26b9782d8b
CI: Re-write run_task.sh
Recently we re-wrote CI to increase VM level parallelism, in hindsite
this has proved to be not that great because:

- It resulted in approx 180 jobs
- We are on free tier so only get 20 jobs (VMs) at a time so its slow to run
- The UI is annoying to dig through the long job list to find failures

Have another go at organising the jobs with the main aim of shortening
total run time and making it easier to quickly see fails.

Re-write the `run_task.sh` script, notable moving manifest handling
to the workflow. Also don't bother testing with beta toolchain.

WASM Note

Removes the `cdylib` and `rlib` from the manifest patching during wasm
build - I do not know the following:

- Why this breaks on this PR but not on other PRs
- Why I can't get wasm test to run locally on master but PRs are passing
- What the `cdylib` and `rlib` were meant to be doing

This is the docs from: https://doc.rust-lang.org/reference/linkage.html

* --crate-type=cdylib, #![crate_type = "cdylib"] - A dynamic system
library will be produced. This is used when compiling a dynamic library
to be loaded from another language. This output type will create *.so
files on Linux, *.dylib files on macOS, and *.dll files on Windows.

* --crate-type=rlib, #![crate_type = "rlib"] - A "Rust library" file
will be produced. This is used as an intermediate artifact and can be
thought of as a "static Rust library". These rlib files, unlike
staticlib files, are interpreted by the compiler in future linkage. This
essentially means that rustc will look for metadata in rlib files like
it looks for metadata in dynamic libraries. This form of output is used
to produce statically linked executables as well as staticlib outputs.
2024-04-26 09:41:51 +10:00
Tobin C. Harding f162e13afb
CI: Run kani daily job with latest version
Version `0.49` of `kani` broke our daily CI job, there is now a new
release out that fixes the issue.

Remove the explicit `kani` version so we pull the latest version.
2024-04-23 17:48:22 +10:00
Tobin C. Harding 0f0bd91929
kani: Pin version to 0.48.0
Kani version `0.49.0` came out 10 days ago, its odd that our CI just
broke today but in an attempt to see if its release related pin to the
version before the latest release.
2024-04-16 10:05:07 +10:00
Tobin C. Harding 1a85eac01b
Move nightly_version file to crate root
The nightly pinning is used by a bunch of different tools outside of
github actions, move the config file to the crate root.

Update the path in the justfile.

Done in preparation for fixing the git pre-commit hook.
2024-04-04 15:42:12 +11:00
Andrew Poelstra 50e772fe79
Revert "ci: introduce `classify-pr.sh` script which determines whether a PR should have CI run"
This reverts commit 9aca8a18c7.
2024-03-20 14:08:17 +00:00
Andrew Poelstra ae381fcc01
Revert "ci: gate CI workflow on source being changed"
This reverts commit 09f7fc3cff.
2024-03-20 14:08:16 +00:00
Andrew Poelstra 09f7fc3cff
ci: gate CI workflow on source being changed 2024-03-01 16:12:23 +00:00
Andrew Poelstra 9aca8a18c7
ci: introduce `classify-pr.sh` script which determines whether a PR should have CI run 2024-03-01 16:12:19 +00:00
Andrew Poelstra 85ead84a99
ci: pin nightly in current CI 2024-02-28 20:47:39 +00:00
Martin Habovstiak 5c15ed5441
CI: Epic overhaul
Re-write the whole CI pipeline.

Co-developed-by: Martin Habovstiak <martin.habovstiak@gmail.com>
2024-02-02 05:57:23 +11:00
Tobin C. Harding 4383202f23
CI: Add a job to build kani proofs
Currently we do not build the code in the kani tests when PRs are
pushed, instead we run the verifier once a day. We should at least check
the code builds on each PR. One way to do this is to build the proofs
without running them, `kani --only-codegen` does that.
2024-02-01 15:44:38 +11:00
Tobin C. Harding 1fe90223aa
Remove DO_COV
We have test coverage by way of `coveralls` now. Remove the old stale
`DO_COV` stuff.

Fix: #1853
2024-01-23 14:27:10 +11:00
Martin Habovstiak bb0f839c2f Lint with nightly
While `clippy` now allows `TBD` to be used in `since` parameter of
`deprecated` attribute it is only available in the newest, nightly,
version. Switch `clippy` version to nightly to enable the `TBD` value.
2023-12-08 13:22:41 +01:00
Tobin C. Harding 48879e7ad9
Remove no-std feature
Currently `bitcoin` cannot be built with no features enabled, it must
have either "no-std" or "std" enabled. This is an artifact from when
we depended on `core2` for "no-std", now that we have our own `io` crate
and we unconditionally depend on it we can remove the "no-std" feature.
2023-12-06 09:54:33 +11:00
Tobin C. Harding d9cc724187
Bump MSRV to Rust version 1.56.1
Rust version 1.56.0 introduced edition 2021. Shortly afterwards, on
October 21 2021 Rust version 1.56.1 was released.

Debian stable is currently shipping `rustc 1.63.0`.

Our stated MSRV policy is: In Debian stable and at least 2 years old.

Therefore our MSRV policy is met by Rust version 1.56.1 and we can strat
to bump our MSRV org wide.

Start by bumping the `rust-bitcoin` and `hashes` MSRV to Rust 1.56.1,
includes:

- Update docs.
- Update CI and remove pinning.
- Update the build files and remove now stale cfg attributes rust_v_1_x
  for values less than the new MSRV.
- Use new `IntoIterator` for arrays so we no longer need to allocate a
  vector to iterate.

Links:

- https://blog.rust-lang.org/2021/11/01/Rust-1.56.1.html
- https://blog.rust-lang.org/2021/10/21/Rust-1.56.0.html
- https://packages.debian.org/stable/rust/rustc
2023-11-23 06:20:02 +11:00
Einherjar d391ada5b8
ci: nightly rustfmt PR scheduled/manual 2023-10-22 05:34:16 -03:00
Andrew Poelstra 26c27d9071
Merge rust-bitcoin/rust-bitcoin#2060: fix(CI): `rust-toolchain` stable
c2f3c1fa11 fix(CI): rust-toolchain stable (Einherjar)

Pull request description:

  - sets `dtolnay/rust-toolchain` to `stable`
  - delegates the `toolchain` to `1.48.0` as GitHub action input

  This will make the rust-toolchain to always run in the `stable` branch with the toolchain version being handled in the action. It will appease dependabot and we can change at any time the `toolchain` action input.

  Discussed in https://github.com/rust-bitcoin/rust-bitcoin/pull/2055

ACKs for top commit:
  apoelstra:
    ACK c2f3c1fa11
  tcharding:
    ACK c2f3c1fa11

Tree-SHA512: 83637bcd73aed1210ff67376c9f99047293dd22c2b863dd5f39ba5efb65081ff2d0cce4e375abb79b33918101a12f1780c3bde78b76a29331733f5cf515d1ac7
2023-09-10 21:10:17 +00:00
dependabot[bot] ddcf705f6a
Bump actions/checkout from 2 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-09 15:26:36 +00:00
Einherjar c2f3c1fa11
fix(CI): rust-toolchain stable
- sets `dtolnay/rust-toolchain` to `stable`
- delegates the `toolchain` to `1.48.0` as GitHub action input

This will make the rust-toolchain to always run in the `stable` branch with the toolchain version being handled in the action.
It will appease dependabot and we can change at any time the `toolchain` action input.
2023-09-09 10:16:36 -04:00
Tobin C. Harding 71fa9e81e7
Bump MSRV to 1.48.1
As per discussion [0] bump our MSRV for all crates in `rust-bitcoin`
repo to 1.48.1 [1].

[0] https://github.com/rust-bitcoin/rust-bitcoin/discussions/1329
[1] https://blog.rust-lang.org/2020/11/19/Rust-1.48.html
2023-03-23 08:03:06 +11:00
Jonathan Underwood a629bef85e
CI: Prevent duplicate CI runs 2023-03-22 08:19:30 -07:00
Tobin C. Harding c1360067e9
Enable formatting in CI
Enable formatting in CI by doing:

- Add a section to the `test.sh` scripts to run the formatter (guarded by
  the env variable `DO_FMT`) for all crates (bitcoin, hashes, internals).
- Add `DO_FMT` to the nightly `Tests` CI job.
2023-03-07 08:57:32 +11:00
Andrew Poelstra 9615dd12b8
Merge rust-bitcoin/rust-bitcoin#1505: Improve test coverage for docs build
41f2dcf6ae Improve test coverage for docs build (Tobin C. Harding)
b4c14a4b7c hashes: Use automatic link (Tobin C. Harding)
96e8a080d1 ci: Remove redundant || exit (Tobin C. Harding)

Pull request description:

  Currently the docs build commands in `hashes` and `bitcoin` differ, they should be the same.

  Add a command `cargo doc` to improve coverage e.g., recently we botched the feature guarding but since CI only runs `cargo rustdoc` with custom compiler conditional set we didn't catch it.

  Done after seeing: https://github.com/rust-bitcoin/rust-bitcoin/pull/1504 and CI should fail on this PR until 1504 is in.

ACKs for top commit:
  apoelstra:
    ACK 41f2dcf6ae
  Kixunil:
    ACK 41f2dcf6ae

Tree-SHA512: 7cde68292cfc6f32b75d066e188e7c418ee251f9a5abc57fbd642ba33e9cd5bd8ef7c5ba7cffd206acae6ddec2f8c3db38c8c911a4319e979158666b8225953d
2023-02-10 23:20:57 +00:00