Skip to content

Commit bb0b4cf

Browse files
committed
feat(mpm): Add cargo-workspace-docker command with feature extraction
- Add new `mpm tools cargo-workspace-docker` command that generates minimal Cargo.toml files for Docker builds - Extract package-level features from dependencies (e.g., serde derive) - Fix arm64 binary builds in CI with explicit matrix dimensions - Fix zitadel-resource-controller Docker build by switching from nightly to stable Rust (1.92.0) - Remove old standalone cargo-workspace-docker utility - Update all build.sh scripts to use the new command name
1 parent 77f22e7 commit bb0b4cf

53 files changed

Lines changed: 1115 additions & 715 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/publish-mpm.yml

Lines changed: 73 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ on:
44
push:
55
tags:
66
- 'mpm-v*'
7+
paths:
8+
- 'utils/mpm/**'
9+
- 'utils/mows-common-rust/**'
10+
- '.github/workflows/publish-mpm.yml'
11+
pull_request:
12+
paths:
13+
- 'utils/mpm/**'
14+
- 'utils/mows-common-rust/**'
15+
- '.github/workflows/publish-mpm.yml'
716
workflow_dispatch:
817
inputs:
918
dry_run:
@@ -13,24 +22,85 @@ on:
1322
type: boolean
1423

1524
jobs:
25+
test:
26+
runs-on: ubuntu-latest
27+
steps:
28+
- uses: actions/checkout@v4
29+
30+
- name: Install Rust
31+
uses: dtolnay/rust-toolchain@stable
32+
33+
- name: Cache cargo registry
34+
uses: actions/cache@v4
35+
with:
36+
path: |
37+
~/.cargo/registry
38+
~/.cargo/git
39+
utils/mpm/target
40+
key: ${{ runner.os }}-cargo-test-${{ hashFiles('utils/mpm/Cargo.lock') }}
41+
restore-keys: |
42+
${{ runner.os }}-cargo-test-
43+
44+
- name: Run unit tests
45+
run: |
46+
cd utils/mpm
47+
cargo test --release
48+
49+
- name: Build release binary for e2e tests
50+
run: |
51+
cd utils/mpm
52+
cargo build --release
53+
54+
- name: Run e2e tests
55+
run: |
56+
cd utils/mpm/tests
57+
./run-all.sh
58+
env:
59+
MPM_BIN: ${{ github.workspace }}/utils/mpm/target/release/mpm
60+
1661
build:
62+
needs: test
63+
if: github.event_name != 'pull_request'
1764
runs-on: ubuntu-latest
1865
strategy:
66+
fail-fast: false
1967
matrix:
68+
arch: [amd64, arm64]
2069
include:
21-
- target: x86_64-unknown-linux-musl
70+
- arch: amd64
71+
target: x86_64-unknown-linux-musl
72+
os_name: linux
73+
- arch: arm64
74+
target: aarch64-unknown-linux-musl
2275
os_name: linux
23-
arch: amd64
2476
steps:
2577
- uses: actions/checkout@v4
2678

79+
- name: Set up QEMU
80+
uses: docker/setup-qemu-action@v3
81+
2782
- name: Set up Docker Buildx
2883
uses: docker/setup-buildx-action@v3
2984

85+
- name: Cache Docker layers
86+
uses: actions/cache@v4
87+
with:
88+
path: /tmp/.buildx-cache
89+
key: ${{ runner.os }}-buildx-${{ matrix.arch }}-${{ hashFiles('utils/mpm/Cargo.lock', 'utils/mpm/Dockerfile') }}
90+
restore-keys: |
91+
${{ runner.os }}-buildx-${{ matrix.arch }}-
92+
3093
- name: Build static binary
3194
run: |
3295
cd utils/mpm
33-
./build.sh
96+
TARGETARCH=${{ matrix.arch }} BUILDX_CACHE_DIR=/tmp/.buildx-cache ./build.sh
97+
98+
- name: Move cache
99+
run: |
100+
rm -rf /tmp/.buildx-cache
101+
if [ -d /tmp/.buildx-cache-new ]; then
102+
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
103+
fi
34104
35105
- name: Get version from tag
36106
id: get_version

Cargo.lock

Lines changed: 5 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/cloud/filez-old/addons/metadata/cargo-workspace-docker.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
# This file is generated by cargo-workspace-docker. Do not edit manually.
1+
# This file is generated by mpm. Do not edit manually.
2+
23
[profile.release]
34
debug = false
45
debug-assertions = false
@@ -12,7 +13,6 @@ resolver = "2"
1213

1314
[workspace.dependencies.reqwest]
1415
default-features = false
15-
features = ["rustls-tls"]
1616
version = "0.12.15"
1717

1818
[workspace.lints.clippy]

apis/cloud/filez/apps/backend/images/build.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#!/bin/bash
22
set -euo pipefail
33

4+
mpm tools cargo-workspace-docker
5+
46
export SERVICE_NAME="filez-apps-backend-images"
57

68
export BAKE_ARGS="${BAKE_ARGS:-default} --allow=fs.read=/home/paul/projects/mows"

apis/cloud/filez/apps/backend/images/cargo-workspace-docker.toml

Lines changed: 4 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
# This file is generated by cargo-workspace-docker. Do not edit manually.
1+
# This file is generated by mpm. Do not edit manually.
2+
23
[profile.release]
34
debug = false
45
debug-assertions = false
@@ -12,31 +13,23 @@ resolver = "2"
1213

1314
[workspace.dependencies.anyhow]
1415
default-features = false
15-
features = ["default"]
1616
version = "1.0.98"
1717

1818
[workspace.dependencies.chrono]
1919
default-features = false
20-
features = ["default"]
2120
version = "0.4.41"
2221

23-
[workspace.dependencies.data-encoding]
24-
default-features = false
25-
features = ["default"]
26-
version = "2.9.0"
27-
2822
[workspace.dependencies.filez-server-client]
2923
default-features = false
3024
path = "./filez-server-client"
3125

3226
[workspace.dependencies.futures]
3327
default-features = false
34-
features = ["default"]
3528
version = "0.3.31"
3629

37-
[workspace.dependencies.gtmpl]
30+
[workspace.dependencies.gtmpl-ng]
3831
default-features = false
39-
version = "0.7"
32+
version = "0.7.5"
4033

4134
[workspace.dependencies.gtmpl_derive]
4235
default-features = false
@@ -48,52 +41,38 @@ version = "0.5.1"
4841

4942
[workspace.dependencies.k8s-openapi]
5043
default-features = false
51-
features = ["latest"]
5244
version = "=0.23.0"
5345

5446
[workspace.dependencies.kube]
5547
default-features = false
56-
features = ["runtime", "derive", "default"]
5748
version = "=0.96.0"
5849

5950
[workspace.dependencies.mows-common-rust]
6051
default-features = false
61-
features = ["default"]
6252
path = "./mows-common-rust"
6353

6454
[workspace.dependencies.opentelemetry]
6555
default-features = false
66-
features = ["trace"]
6756
version = "=0.26.0"
6857

6958
[workspace.dependencies.opentelemetry-otlp]
7059
default-features = false
71-
features = ["trace", "logs", "grpc-tonic", "metrics"]
7260
version = "=0.26.0"
7361

7462
[workspace.dependencies.opentelemetry_sdk]
7563
default-features = false
76-
features = ["rt-tokio"]
7764
version = "=0.26.0"
7865

7966
[workspace.dependencies.rand]
8067
default-features = false
81-
features = ["default"]
8268
version = "0.9.1"
8369

84-
[workspace.dependencies.rcgen]
85-
default-features = false
86-
features = ["pem", "x509-parser", "default", "crypto"]
87-
version = "0.13.2"
88-
8970
[workspace.dependencies.reqwest]
9071
default-features = false
91-
features = ["json", "rustls-tls", "stream"]
9272
version = "0.12.15"
9373

9474
[workspace.dependencies.reqwest-tracing]
9575
default-features = false
96-
features = ["opentelemetry_0_28"]
9776
version = "0.5.7"
9877

9978
[workspace.dependencies.serde]
@@ -108,48 +87,32 @@ version = "1.0.141"
10887
default-features = false
10988
version = "0.9.34"
11089

111-
[workspace.dependencies.sha2]
112-
default-features = false
113-
features = ["default"]
114-
version = "0.10.9"
115-
11690
[workspace.dependencies.thiserror]
11791
default-features = false
11892
version = "2.0.12"
11993

120-
[workspace.dependencies.time]
121-
default-features = false
122-
features = ["default"]
123-
version = "0.3.41"
124-
12594
[workspace.dependencies.tokio]
12695
default-features = false
127-
features = ["full"]
12896
version = "1.45.0"
12997

13098
[workspace.dependencies.tracing]
13199
default-features = false
132-
features = ["default"]
133100
version = "0.1.40"
134101

135102
[workspace.dependencies.tracing-opentelemetry]
136103
default-features = false
137-
features = ["metrics", "tracing-log"]
138104
version = "=0.27.0"
139105

140106
[workspace.dependencies.tracing-subscriber]
141107
default-features = false
142-
features = ["json", "env-filter", "chrono", "default"]
143108
version = "0.3.20"
144109

145110
[workspace.dependencies.url]
146111
default-features = false
147-
features = ["serde"]
148112
version = "2.5.4"
149113

150114
[workspace.dependencies.utoipa]
151115
default-features = false
152-
features = ["default", "uuid", "chrono"]
153116
version = "5.4.0"
154117

155118
[workspace.dependencies.uuid]
@@ -158,7 +121,6 @@ version = "1.17.0"
158121

159122
[workspace.dependencies.vaultrs]
160123
default-features = false
161-
features = ["rustls"]
162124
version = "0.7.4"
163125

164126
[workspace.lints.clippy]

apis/cloud/filez/apps/backend/metadata/build.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#!/bin/bash
22
set -euo pipefail
33

4+
mpm tools cargo-workspace-docker
5+
46
export SERVICE_NAME="filez-apps-backend-metadata"
57

68
export BAKE_ARGS="${BAKE_ARGS:-default} --allow=fs.read=/home/paul/projects/mows"

0 commit comments

Comments
 (0)