Skip to content

Commit

Permalink
Split release profile into release and release-opt
Browse files Browse the repository at this point in the history
In `Cargo.toml`:

- Add thin LTO to `release` profile.

- Create `release-opt` profile with fat LTO and other slow
  optimizations, as well as stripping all symbols.

- Remove some old commented out configuration that has been
  superseded by more granular configuration (separate from the
  above changes)

In the `release.yml` CI workflow:

- Build `release-opt` rather than `release` workflow.

- Use an environment variable to name the `release-opt` profile so
  it is easy to change and identify (and make the style in which
  long options are passed more consistent).

- Remove explicit stripping of debug symbols, since `release-opt`
  does that.

- *Temporarily* disable the step that takes the release from draft
  to published, to avoid publishing more "DO-NOT-USE" releases than
  necessary when testing the workflow (since, for example, it is
  possible for them to appear in users' "Home" feeds on GitHub).
  This change must be undone, so the workflow will really publish.
  • Loading branch information
EliahKagan committed Aug 7, 2024
1 parent 29898e3 commit afd8d39
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 28 deletions.
30 changes: 9 additions & 21 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ jobs:
TARGET: ${{ matrix.target }}
TARGET_FLAGS: --target=${{ matrix.target }}
TARGET_DIR: target/${{ matrix.target }}
PROFILE: release-opt

steps:
- name: Checkout repository
Expand Down Expand Up @@ -171,23 +172,9 @@ jobs:
echo "target flag is: $TARGET_FLAGS"
echo "target dir is: $TARGET_DIR"
- name: Build release binary
- name: Build release binary (with extra optimizations)
run: |
"$CARGO" build --verbose --release "$TARGET_FLAGS" --no-default-features --features "$FEATURE"
- name: Strip release binary (x86-64 Linux, and all macOS)
if: matrix.target == 'x86_64-unknown-linux-musl' || matrix.os == 'macos-latest'
run: strip "$TARGET_DIR"/release/{ein,gix}

- name: Strip release binary (ARM Linux)
if: matrix.target == 'arm-unknown-linux-gnueabihf'
run: |
docker run --rm -v \
"$PWD/target:/target:Z" \
rustembedded/cross:arm-unknown-linux-gnueabihf \
arm-linux-gnueabihf-strip \
/target/arm-unknown-linux-gnueabihf/release/ein \
/target/arm-unknown-linux-gnueabihf/release/gix
"$CARGO" build --verbose --profile="$PROFILE" "$TARGET_FLAGS" --no-default-features --features="$FEATURE"
- name: Determine archive basename
run: echo "ARCHIVE=gitoxide-$FEATURE-$VERSION-$TARGET" >> "$GITHUB_ENV"
Expand All @@ -200,8 +187,8 @@ jobs:
- name: Build archive (Windows)
if: matrix.os == 'windows-latest'
run: |
file -- "$TARGET_DIR"/release/{ein,gix}.exe
cp -- "$TARGET_DIR"/release/{ein,gix}.exe "$ARCHIVE/"
file -- "$TARGET_DIR/$PROFILE"/{ein,gix}.exe
cp -- "$TARGET_DIR/$PROFILE"/{ein,gix}.exe "$ARCHIVE/"
7z a "$ARCHIVE.zip" "$ARCHIVE"
/usr/bin/core_perl/shasum --algorithm=256 --binary "$ARCHIVE.zip" > "$ARCHIVE.zip.sha256"
echo "ASSET=$ARCHIVE.zip" >> "$GITHUB_ENV"
Expand All @@ -210,8 +197,8 @@ jobs:
- name: Build archive (Unix)
if: matrix.os != 'windows-latest'
run: |
file -- "$TARGET_DIR"/release/{ein,gix}
cp -- "$TARGET_DIR"/release/{ein,gix} "$ARCHIVE/"
file -- "$TARGET_DIR/$PROFILE"/{ein,gix}
cp -- "$TARGET_DIR/$PROFILE"/{ein,gix} "$ARCHIVE/"
tar czf "$ARCHIVE.tar.gz" "$ARCHIVE"
shasum --algorithm=256 --binary "$ARCHIVE.tar.gz" > "$ARCHIVE.tar.gz.sha256"
echo "ASSET=$ARCHIVE.tar.gz" >> "$GITHUB_ENV"
Expand Down Expand Up @@ -346,7 +333,8 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Publish the release
- name: Publish the release # FIXME: Reenable this.
if: false
run: gh release --repo="$REPOSITORY" edit "$VERSION" --draft=false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
15 changes: 8 additions & 7 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -206,17 +206,18 @@ sha1_smol = { opt-level = 3 }

[profile.release]
overflow-checks = false
#lto = "fat"
# this bloats files but assures destructors are called, important for tempfiles. One day I hope we
lto = "thin"
# This bloats files but assures destructors are called, important for tempfiles. One day I hope we
# can wire up the 'abrt' signal handler so tempfiles will be removed in case of panics.
panic = 'unwind'
#codegen-units = 1
panic = "unwind"
incremental = false
build-override = { opt-level = 0 }

# It's not quite worth building dependencies with more optimizations yet. Let's keep it here for later.
#[profile.dev.package."*"]
#opt-level = 2
[profile.release-opt]
inherits = "release"
lto = "fat"
codegen-units = 1
strip = "symbols"

[workspace]
members = [
Expand Down

0 comments on commit afd8d39

Please sign in to comment.