Commit graph

17 commits

Author SHA1 Message Date
Alejandro González
1f2e0f336a
Revamp CI workflow to upload artifacts, cross-compile ARM64 binaries, and more (#534)
As commented in issues https://github.com/shssoichiro/oxipng/issues/444
and https://github.com/shssoichiro/oxipng/issues/518, there is some user
interest for distributing binaries for each unstable commit, and target
ARM64 platforms. Personally, I think both suggestions are useful for the
project, as uploading binary artifacts for each commit might help
interested users to catch regressions and give feedback earlier, and
powerful ARM64 platforms are becoming increasingly popular due to some
cloud services (e.g., Amazon EC2, Azure VMs, Oracle Cloud) offering
cheaper plans for this hardware, in addition to the well-known push for
ARM by Apple with their custom M1 chips.

These changes make the CI target ARM64 as a first-class citizen. Because
the public GitHub actions runners can only be hosted on x64 for now, I
resorted to cross-compilation, [Debian's
multiarch](https://elinux.org/images/d/d8/Multiarch_and_Why_You_Should_Care-_Running%2C_Installing_and_Crossbuilding_With_Multiple_Architectures.pdf),
and QEMU to build, get ARM64 C library dependencies, and run tests,
respectively.

When the CI workflow finishes, a release CLI binary artifact is now
uploaded, which can be downloaded from the workflow run page on the
GitHub web interface.

In addition, these changes also introduce some cleanup and miscellaneous
improvements and changes to the CI workflow:

- Tests are run using [`nextest`](https://nexte.st/) instead of `cargo
test`, which substantially speeds up their execution. (On my development
workstation, `cargo test --release` takes around 10.67 s, while `cargo
nextest run --release` takes around 6.02 s.)
- The dependencies on unmaintained `actions-rs` actions were dropped in
favor of running Cargo commands directly, or using
`giraffate/clippy-action` for pretty inline annotations for Clippy. This
gets rid of the deprecation warnings for each workflow run.
- Most CI steps are run with a nightly Rust toolchain now, which allows
to take advantage of the latest Clippy lints and codegen improvements.
In my experience, when not relying on specific nightly features or
compiler internals, Rust does a pretty good job at making it possible to
rely on a rolling-release compiler for CI, as breakage is extremely rare
and thus offset by the improved features.
- The MSRV check was moved to a separate job with less steps, so that it
takes less of a toll on total workflow run minutes.

## Pending tasks

- [x] Generate universal macOS binaries with `lipo` (i.e., containing
both `aarch64` and `x64` code)
- [x] Tirelessly fix the stupid errors that tend to happen when
deploying a new CI workflow for the first time
- [x] Think what to do with the `deploy.yml` workflow. Should it fetch
artifacts from the CI job instead of building them again?
- [x] Maybe bring back 32-bit Windows binaries. Are they actually useful
for somebody, or just a way to remember the good old days?

---------

Co-authored-by: Josh Holmer <jholmer.in@gmail.com>
2023-09-02 11:09:20 -04:00
XhmikosR
e88b9be12b Update CI
* add `workflow_dispatch` for manual running
* add `fail-fast` false in matrix
* specify `persist-credentials: false` for actions/checkout
* update actions to the latest versions
* move cache before installing the toolchain
* cache more stuff
* limit deploy to shssoichiro/oxipng repository
* reindent
2023-04-24 20:22:25 -04:00
Josh Holmer
1ebe7b01bc Temporarily disable i686 binaries so that amd64 binaries at least will get published 2021-01-04 16:00:31 -05:00
Luni-4
9d67d9d4bd Split windows and unix deploy action 2020-11-06 18:02:16 -05:00
lunaryorn
f5d8aa0249
Build more release binaries (#233)
* Build more release binaries

Include a static Linux binary with musl and a macOS build.  Also add
readme, license and changelog to the release archives.

Fixes GH-134

* Merge windows and linux builds

* Test musl and darwin targets

* Fix matrix exclude key
2020-06-02 09:35:49 -04:00
Luni-4
e4d4c93d9c
Add release description (#230)
* Add description to a release

* Fix typo
2020-05-15 15:07:03 -04:00
Luni-4
0a51fb06ea
Update deploy script (#229) 2020-05-14 22:14:16 -04:00
Josh Holmer
48b3c3ba61 Fix deploy prefix
Some checks failed
deploy / create-binaries-windows (i686-pc-windows-msvc, i686-pc-windows-msvc) (push) Has been cancelled
deploy / create-binaries-windows (x86_64-pc-windows-msvc, x86_64-pc-windows-msvc) (push) Has been cancelled
deploy / deploy (push) Has been cancelled
2020-05-11 12:35:23 -04:00
Josh Holmer
971fd5aaed Try correcting artifact path 2020-05-11 11:41:56 -04:00
Josh Holmer
ef33e11a62 More release deploy fixes 2020-05-11 10:11:38 -04:00
Josh Holmer
ba36c4b046 Fix the last CI change 2020-05-11 09:38:11 -04:00
Josh Holmer
f9bb89481b Attempt i686 cross compilation on Github Actions release 2020-05-11 09:26:40 -04:00
Josh Holmer
50d5ec48cf Fix getting tag name on Windows deploy 2020-05-11 09:14:12 -04:00
Josh Holmer
820667c608 Remove unnecessary steps from deploy 2020-05-11 09:05:00 -04:00
Josh Holmer
9d156723c0
Use msvc toolchain for creating release binaries
The GNU toolchain seems to fail on compiling cloudflare-zlib-sys
2020-05-11 08:41:51 -04:00
Josh Holmer
380c21ea97 Use checkout v2 2020-04-17 07:13:35 -04:00
Josh Holmer
43735086d1 Migrate to Github Actions
Closes #206
2020-04-15 13:26:28 -04:00