build: Allow specifying build profile

Additionally splits caches by target CPU
This commit is contained in:
Jade Ellis 2025-06-20 21:48:37 +01:00
parent 0ba4a265be
commit 01200d9b54
No known key found for this signature in database
GPG key ID: 8705A2A3EBF77BD2
2 changed files with 11 additions and 6 deletions

View file

@ -49,6 +49,7 @@ jobs:
const platforms = ['linux/amd64', 'linux/arm64'] const platforms = ['linux/amd64', 'linux/arm64']
core.setOutput('build_matrix', JSON.stringify({ core.setOutput('build_matrix', JSON.stringify({
platform: platforms, platform: platforms,
target_cpu: ['base'],
include: platforms.map(platform => { return { include: platforms.map(platform => { return {
platform, platform,
slug: platform.replace('/', '-') slug: platform.replace('/', '-')
@ -66,6 +67,8 @@ jobs:
strategy: strategy:
matrix: matrix:
{ {
"target_cpu": ["base"],
"profile": ["release"],
"include": "include":
[ [
{ "platform": "linux/amd64", "slug": "linux-amd64" }, { "platform": "linux/amd64", "slug": "linux-amd64" },
@ -73,6 +76,7 @@ jobs:
], ],
"platform": ["linux/amd64", "linux/arm64"], "platform": ["linux/amd64", "linux/arm64"],
} }
steps: steps:
- name: Echo strategy - name: Echo strategy
run: echo '${{ toJSON(fromJSON(needs.define-variables.outputs.build_matrix)) }}' run: echo '${{ toJSON(fromJSON(needs.define-variables.outputs.build_matrix)) }}'
@ -140,8 +144,8 @@ jobs:
uses: actions/cache@v3 uses: actions/cache@v3
with: with:
path: | path: |
cargo-target-${{ matrix.slug }} cargo-target-${{ matrix.target_cpu }}-${{ matrix.slug }}-${{ matrix.profile }}
key: cargo-target-${{ matrix.slug }}-${{hashFiles('**/Cargo.lock') }}-${{steps.rust-toolchain.outputs.rustc_version}} key: cargo-target-${{ matrix.target_cpu }}-${{ matrix.slug }}-${{ matrix.profile }}-${{hashFiles('**/Cargo.lock') }}-${{steps.rust-toolchain.outputs.rustc_version}}
- name: Cache apt cache - name: Cache apt cache
id: cache-apt id: cache-apt
uses: actions/cache@v3 uses: actions/cache@v3
@ -163,9 +167,9 @@ jobs:
{ {
".cargo/registry": "/usr/local/cargo/registry", ".cargo/registry": "/usr/local/cargo/registry",
".cargo/git/db": "/usr/local/cargo/git/db", ".cargo/git/db": "/usr/local/cargo/git/db",
"cargo-target-${{ matrix.slug }}": { "cargo-target-${{ matrix.target_cpu }}-${{ matrix.slug }}-${{ matrix.profile }}": {
"target": "/app/target", "target": "/app/target",
"id": "cargo-target-${{ matrix.platform }}" "id": "cargo-target-${{ matrix.target_cpu }}-${{ matrix.slug }}-${{ matrix.profile }}"
}, },
"var-cache-apt-${{ matrix.slug }}": "/var/cache/apt", "var-cache-apt-${{ matrix.slug }}": "/var/cache/apt",
"var-lib-apt-${{ matrix.slug }}": "/var/lib/apt" "var-lib-apt-${{ matrix.slug }}": "/var/lib/apt"

View file

@ -149,11 +149,12 @@ ENV GIT_REMOTE_COMMIT_URL=$GIT_REMOTE_COMMIT_URL
ENV CONDUWUIT_VERSION_EXTRA=$CONDUWUIT_VERSION_EXTRA ENV CONDUWUIT_VERSION_EXTRA=$CONDUWUIT_VERSION_EXTRA
ENV CONTINUWUITY_VERSION_EXTRA=$CONTINUWUITY_VERSION_EXTRA ENV CONTINUWUITY_VERSION_EXTRA=$CONTINUWUITY_VERSION_EXTRA
ARG RUST_PROFILE=release
# Build the binary # Build the binary
RUN --mount=type=cache,target=/usr/local/cargo/registry \ RUN --mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/usr/local/cargo/git/db \ --mount=type=cache,target=/usr/local/cargo/git/db \
--mount=type=cache,target=/app/target,id=cargo-target-${TARGETPLATFORM} \ --mount=type=cache,target=/app/target,id=cargo-target-${TARGET_CPU}-${TARGETPLATFORM}-${RUST_PROFILE} \
bash <<'EOF' bash <<'EOF'
set -o allexport set -o allexport
set -o xtrace set -o xtrace
@ -162,7 +163,7 @@ RUN --mount=type=cache,target=/usr/local/cargo/registry \
jq -r ".target_directory")) jq -r ".target_directory"))
mkdir /out/sbin mkdir /out/sbin
PACKAGE=conduwuit PACKAGE=conduwuit
xx-cargo build --locked --release \ xx-cargo build --locked --profile ${RUST_PROFILE} \
-p $PACKAGE; -p $PACKAGE;
BINARIES=($(cargo metadata --no-deps --format-version 1 | \ BINARIES=($(cargo metadata --no-deps --format-version 1 | \
jq -r ".packages[] | select(.name == \"$PACKAGE\") | .targets[] | select( .kind | map(. == \"bin\") | any ) | .name")) jq -r ".packages[] | select(.name == \"$PACKAGE\") | .targets[] | select( .kind | map(. == \"bin\") | any ) | .name"))