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

Unify release flags and correctly mark dev build releases #1324

Merged
merged 11 commits into from
Nov 9, 2022
55 changes: 35 additions & 20 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,39 @@ env:
# used to rename and upload the binaries
PROJ_NAME: fj-app

# This lets our app know it's an "official" release. Otherwise we would get
# a version number like "fj-app 0.8.0 (8cb928bb, unreleased)"
FJ_OFFICIAL_RELEASE: 1

defaults:
run:
shell: bash

jobs:
calculate-release-flags:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perfect, this is the way to go.
Minor thing to fix: the job needs to define the output that the release operator populates, see:
https://docs.github.com/en/actions/using-jobs/defining-outputs-for-jobs

Like that, the subsequent jobs can access the data.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch, fixed 👍🏻

name: Calculate release flags
runs-on: ubuntu-latest
outputs:
release-detected: ${{ steps.release.outputs.release-detected }}

steps:
- name: Checkout
uses: actions/checkout@v3

- name: Operator | Cache
uses: Swatinem/rust-cache@v2
with:
key: release-operator-01

- name: Operator | Deduce
id: release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_LABEL: release
RUST_LOG: info
run: |
# Run release operator
cargo run -p release-operator -- detect

binaries:
name: Binaries
needs: calculate-release-flags
strategy:
matrix:
include:
Expand All @@ -30,7 +52,7 @@ jobs:
- { target: aarch64-apple-darwin, os: macOS-latest }
- { target: x86_64-pc-windows-msvc, os: windows-latest }

runs-on: ${{matrix.os}}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v3
Expand All @@ -45,6 +67,10 @@ jobs:

- name: Binaries | Compile
run: cargo build --release --target ${{ matrix.target }}
env:
# This lets our app know it's an "official" release. Otherwise we would get
# a version number like "fj-app 0.8.0 (8cb928bb, unreleased)"
RELEASE_DETECTED: ${{ needs.calculate-release-flags.outputs.release-detected }}

- name: Binaries | Prepare upload
run: |
Expand All @@ -69,7 +95,10 @@ jobs:

release:
name: Release
needs: binaries
if: ${{ needs.calculate-release-flags.outputs.release-detected == 'true' }}
needs:
- calculate-release-flags
- binaries
runs-on: ubuntu-latest
steps:
- name: Checkout
Expand All @@ -80,22 +109,10 @@ jobs:
with:
key: release-operator-01

- name: Operator | Deduce
id: release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_LABEL: release
RUST_LOG: info
run: |
# Run release operator
cargo run -p release-operator -- detect

- name: Binaries | Download
if: ${{ steps.release.outputs.release-detected == 'true' }}
uses: actions/download-artifact@v3

- name: Binaries | Checksums
if: ${{ steps.release.outputs.release-detected == 'true' }}
run: |
# Build binary checksums
for file in "${PROJ_NAME}"-*/"${PROJ_NAME}"-*; do
Expand All @@ -105,15 +122,13 @@ jobs:
done

- name: Release | GitHub
if: ${{ steps.release.outputs.release-detected == 'true' }}
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.release.outputs.tag-name }}
name: ${{ steps.release.outputs.tag-name }}
files: ${{ env.PROJ_NAME }}-*/${{ env.PROJ_NAME }}-*

- name: Release | Crates.io
if: ${{ steps.release.outputs.release-detected == 'true' }}
env:
RUST_LOG: info
run: |
Expand Down
4 changes: 2 additions & 2 deletions crates/fj/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ impl Version {
let commit = git_description();

let official_release =
std::env::var("FJ_OFFICIAL_RELEASE").as_deref() == Ok("1");
println!("cargo:rerun-if-env-changed=FJ_OFFICIAL_RELEASE");
std::env::var("RELEASE_DETECTED").as_deref() == Ok("true");
println!("cargo:rerun-if-env-changed=RELEASE_DETECTED");

let full_string = match (commit, official_release) {
(Some(commit), true) => format!("{pkg_version} ({commit})"),
Expand Down