For easier integration into docker buildx, Recyclarr is now built inside
of the Dockerfile as a dedicated build stage. This simplified the CI
workflows and local testing a bit.
The changes for this new process were driven by Microsoft's recommended
approach to building .NET applications inside Docker, which is
documented here:
https://github.com/dotnet/dotnet-docker/blob/main/samples/README.md
Use the fork again until the upstream starts merging pull requests. It
is out of date with its forks. The main motivation for this change is to
get off the now deprecated Node v16.
- Remove schemas because there doesn't seem to be any jobs that operate
on these files. I don't remember the reason that it was added in the
first place; but can deal with that later if I notice something wrong.
- Add props/targets files so that we rebuild when we update package
versions, etc.
Due to [an issue][1] with the `actions/upload-artifact` action, when
binaries are uploaded they lose permission bits and `xattr` properties.
Composite actions `upload-tar` and `download-tar` have been added that
tarball the artifacts before uploading them to retain those properties.
[1]: https://github.com/actions/upload-artifact/issues/38
Changelog:
- Sign & notarize Recyclarr on macOS platforms (arm64, x64)
- Use `tar.xz` instead of `zip` on mac & linux platforms
- Compile linux binaries on the ubuntu-latest Github runner
- Compile macOS binaries on the macos-latest Github runner
- Executable size reduced by disabling ReadyToRun
Fixes#39
Edge builds previously would either download from the latest release on
github or directly compile the code. However, dotnet apparently has some
compatibility issues when run inside of a container built with qemu +
buildx.
The approach chosen going forward is to simply copy the builds from the
github workflow artifacts directly into the container during the build
process. This ended up causing a lot of change, mainly cleanup and
simplifying things.
Single-file builds incur a performance cost. Mainly because the runtime
must extract the contents of the C# application to a temp directory in
order for it to run. In a Docker container, single-file offers no
tangible benefit because the user isn't interacting directly with those
files.
To gain some performance improvement, single-file is disabled for MUSL
builds. Furthermore, the docker image is reconfigured to place the
Recyclarr binary files in a different directory. Previously, as a
single-file binary, it was placed in the container at `/usr/local/bin`,
but now that it is a multiple-file application, it now lives in
`/app/recyclarr`.
The matrix build for published platforms is getting extremely large.
It's no longer efficient or productive to run the unit tests during that
job. Instead, a much smaller job is now run prior to the Build job for
running tests.
Squashed commit of the following:
commit 673f4b7441d910cf25dce6842552a06bf5f76490
Author: Robert Dailey <rcdailey@gmail.com>
Date: Wed Nov 10 12:37:55 2021 -0600
Add SonarCloud integration
commit 5dfe5cf7a2c2a96ecdc0c684c605334460efbf73
Author: Robert Dailey <rcdailey@gmail.com>
Date: Wed Nov 10 12:46:40 2021 -0600
Reformat YAML
commit d210104ffee6fea81304312588e9fa89fb1a86f0
Author: Robert Dailey <rcdailey@gmail.com>
Date: Wed Nov 10 12:46:16 2021 -0600
Remove stale comments in build.yml
commit 66f18519c39b1cece888d7028cd2056d2f8dfbe3
Author: Robert Dailey <rcdailey@gmail.com>
Date: Wed Nov 10 12:44:28 2021 -0600
Set up schema for build.yml
- Executable is now compiled using Ready to Run. This increases the size
of the executable but makes the code much faster.
- `src` directory is no longer the cwd
- The matrix build in build.yml now runs on its respective platform to
avoid cross compilation. Cross compiling does not work with the
ReadyToRun optimization on, see:
https://docs.microsoft.com/en-us/dotnet/core/deploying/ready-to-run#cross-platformarchitecture-restrictions
- publish and zip steps in the workflow have been put in a powershell
script for reusability and to keep the workflow YAML minimal.