ci: Add oci image to pipeline.

ci: Tweak package targets; elim max-perf for containers.

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-06-04 04:06:46 +00:00
parent c9a6f97174
commit e332d395f9
5 changed files with 68 additions and 27 deletions

View File

@@ -66,6 +66,7 @@ jobs:
bake: bake:
if: > if: >
!failure() && !cancelled() !failure() && !cancelled()
&& inputs.machines
&& fromJSON(inputs.machines)[0] != null && fromJSON(inputs.machines)[0] != null
&& fromJSON(inputs.bake_targets)[0] != null && fromJSON(inputs.bake_targets)[0] != null

View File

@@ -141,7 +141,7 @@ jobs:
{"cargo_profile": "release-max-perf", "rust_toolchain": "stable"}, {"cargo_profile": "release-max-perf", "rust_toolchain": "stable"},
{"cargo_profile": "release-max-perf", "feat_set": "default"}, {"cargo_profile": "release-max-perf", "feat_set": "default"},
{"cargo_profile": "release-max-perf", "feat_set": "none"}, {"cargo_profile": "release-max-perf", "feat_set": "none"},
{"cargo_profile": "release"} {"cargo_profile": "release-debuginfo"}
] ]
package: package:
@@ -166,9 +166,12 @@ jobs:
{"cargo_profile": "test"}, {"cargo_profile": "test"},
{"cargo_profile": "release-debuginfo", "feat_set": "default"}, {"cargo_profile": "release-debuginfo", "feat_set": "default"},
{"cargo_profile": "release-debuginfo", "rust_toolchain": "nightly"}, {"cargo_profile": "release-debuginfo", "rust_toolchain": "nightly"},
{"cargo_profile": "release-debuginfo", "bake_target": "oci"},
{"cargo_profile": "release-max-perf", "feat_set": "default"}, {"cargo_profile": "release-max-perf", "feat_set": "default"},
{"cargo_profile": "release-max-perf", "rust_toolchain": "stable"}, {"cargo_profile": "release-max-perf", "rust_toolchain": "stable"},
{"cargo_profile": "release-max-perf", "feat_set": "default"}, {"cargo_profile": "release-max-perf", "feat_set": "default"},
{"cargo_profile": "release-max-perf", "bake_target": "docker"},
{"cargo_profile": "release-max-perf", "bake_target": "oci"},
{"cargo_profile": "release", "rust_toolchain": "nightly"} {"cargo_profile": "release", "rust_toolchain": "nightly"}
] ]

View File

@@ -63,14 +63,14 @@ jobs:
"book": {"dst": "book", "src": "/book"}, "book": {"dst": "book", "src": "/book"},
} }
build_standalone: binary:
if: > if: >
!failure() && !cancelled() !failure() && !cancelled()
name: Standalone name: Binaries
uses: ./.github/workflows/bake.yml uses: ./.github/workflows/bake.yml
with: with:
bake_targets: '["standalone", "tuwunel"]' bake_targets: '["static"]'
cargo_profiles: ${{inputs.cargo_profiles}} cargo_profiles: ${{inputs.cargo_profiles}}
feat_sets: ${{inputs.feat_sets}} feat_sets: ${{inputs.feat_sets}}
rust_toolchains: ${{inputs.rust_toolchains}} rust_toolchains: ${{inputs.rust_toolchains}}
@@ -83,18 +83,41 @@ jobs:
includes: ${{inputs.includes}} includes: ${{inputs.includes}}
artifact: > artifact: >
{ {
"standalone": {"dst": "tuwunel", "src": "/usr/bin/tuwunel" }, "static": {"dst": "tuwunel", "src": "/usr/bin/tuwunel" },
"tuwunel": {"dst": "tuwunel-docker.tar.gz", "img": true }
} }
build_pkgs: container:
if: >
!failure() && !cancelled()
name: Containers
uses: ./.github/workflows/bake.yml
with:
bake_targets: '["docker", "oci"]'
cargo_profiles: ${{inputs.cargo_profiles}}
feat_sets: ${{inputs.feat_sets}}
rust_toolchains: ${{inputs.rust_toolchains}}
sys_names: ${{inputs.sys_names}}
sys_versions: ${{inputs.sys_versions}}
rust_targets: ${{inputs.rust_targets}}
sys_targets: ${{inputs.sys_targets}}
machines: ${{inputs.machines}}
excludes: ${{inputs.excludes}}
includes: ${{inputs.includes}}
artifact: >
{
"docker": {"dst": "tuwunel-docker.tar.gz", "img": true },
"oci": {"dst": "tuwunel-oci.tar.zst", "runner": true }
}
pkgs:
if: > if: >
!failure() && !cancelled() !failure() && !cancelled()
&& contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0])
&& contains(fromJSON(inputs.cargo_profiles), fromJSON('["release"]')[0]) && contains(fromJSON(inputs.cargo_profiles), fromJSON('["release"]')[0])
&& contains(fromJSON(inputs.rust_toolchains), fromJSON('["stable"]')[0]) && contains(fromJSON(inputs.rust_toolchains), fromJSON('["stable"]')[0])
name: Build Pkgs name: Distro Pkgs
uses: ./.github/workflows/bake.yml uses: ./.github/workflows/bake.yml
with: with:
bake_targets: '["pkg-deb", "pkg-rpm"]' bake_targets: '["pkg-deb", "pkg-rpm"]'
@@ -120,9 +143,10 @@ jobs:
&& contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0])
&& contains(fromJSON(inputs.cargo_profiles), fromJSON('["release"]')[0]) && contains(fromJSON(inputs.cargo_profiles), fromJSON('["release"]')[0])
&& contains(fromJSON(inputs.rust_toolchains), fromJSON('["stable"]')[0]) && contains(fromJSON(inputs.rust_toolchains), fromJSON('["stable"]')[0])
&& false
name: Check Pkgs name: Check Pkgs
needs: [build_pkgs] needs: [pkgs]
uses: ./.github/workflows/bake.yml uses: ./.github/workflows/bake.yml
with: with:
bake_targets: '["pkg-deb-install", "pkg-rpm-install"]' bake_targets: '["pkg-deb-install", "pkg-rpm-install"]'

View File

@@ -50,7 +50,7 @@ jobs:
&& inputs.docker_repo != '' && inputs.docker_repo != ''
&& github.ref == 'refs/heads/main' && github.ref == 'refs/heads/main'
name: Publish containers name: Containers
runs-on: ${{matrix.machine}} runs-on: ${{matrix.machine}}
permissions: write-all permissions: write-all
continue-on-error: false continue-on-error: false

View File

@@ -280,7 +280,7 @@ target "github" {
output = ["type=registry,compression=zstd,mode=min,compression-level=${image_compress_level}"] output = ["type=registry,compression=zstd,mode=min,compression-level=${image_compress_level}"]
matrix = cargo_rust_feat_sys matrix = cargo_rust_feat_sys
inherits = [ inherits = [
elem("tuwunel", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), elem("docker", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]),
] ]
} }
@@ -294,7 +294,7 @@ target "dockerhub" {
output = ["type=registry,compression=zstd,mode=min,compression-level=${image_compress_level}"] output = ["type=registry,compression=zstd,mode=min,compression-level=${image_compress_level}"]
matrix = cargo_rust_feat_sys matrix = cargo_rust_feat_sys
inherits = [ inherits = [
elem("tuwunel", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), elem("docker", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]),
] ]
} }
@@ -520,8 +520,9 @@ target "smoketest" {
group "installs" { group "installs" {
targets = [ targets = [
"install", "install",
"standalone", "static",
"tuwunel", "docker",
"oci",
] ]
} }
@@ -539,14 +540,26 @@ install_labels = {
"org.opencontainers.image.version" = "${package_version}" "org.opencontainers.image.version" = "${package_version}"
} }
target "tuwunel" { target "oci" {
name = elem("tuwunel", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) name = elem("oci", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target])
tags = [ tags = [
elem_tag("tuwunel", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target], "latest"), elem_tag("oci", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target], "latest"),
]
output = ["type=oci,dest=tuwunel-oci.tar.zst,mode=min,compression-level=${image_compress_level}"]
matrix = cargo_rust_feat_sys
inherits = [
elem("docker", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]),
]
}
target "docker" {
name = elem("docker", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target])
tags = [
elem_tag("docker", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target], "latest"),
] ]
matrix = cargo_rust_feat_sys matrix = cargo_rust_feat_sys
inherits = [ inherits = [
elem("standalone", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), elem("static", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]),
elem("install", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), elem("install", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]),
] ]
contexts = { contexts = {
@@ -555,22 +568,22 @@ target "tuwunel" {
|| cargo_profile == "release-max-perf" || cargo_profile == "release-max-perf"
|| cargo_profile == "release" || cargo_profile == "release"
|| cargo_profile == "release-debuginfo"? || cargo_profile == "release-debuginfo"?
elem("target:standalone", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]): elem("target:static", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]):
elem("target:install", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) elem("target:install", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target])
) )
} }
target = "tuwunel" target = "image"
dockerfile-inline =<<EOF dockerfile-inline =<<EOF
FROM input AS tuwunel FROM input AS image
EXPOSE 8008 8448 EXPOSE 8008 8448
ENTRYPOINT ["tuwunel"] ENTRYPOINT ["tuwunel"]
EOF EOF
} }
target "standalone" { target "static" {
name = elem("standalone", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) name = elem("static", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target])
tags = [ tags = [
elem_tag("standalone", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target], "latest"), elem_tag("static", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target], "latest"),
] ]
matrix = cargo_rust_feat_sys matrix = cargo_rust_feat_sys
inherits = [ inherits = [
@@ -579,9 +592,9 @@ target "standalone" {
contexts = { contexts = {
input = elem("target:install", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), input = elem("target:install", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]),
} }
target = "standalone" target = "static"
dockerfile-inline =<<EOF dockerfile-inline =<<EOF
FROM scratch AS standalone FROM scratch AS static
COPY --from=input /usr/bin/tuwunel /usr/bin/tuwunel COPY --from=input /usr/bin/tuwunel /usr/bin/tuwunel
EOF EOF
} }
@@ -592,7 +605,7 @@ target "install" {
elem_tag("install", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target], "latest"), elem_tag("install", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target], "latest"),
] ]
labels = install_labels labels = install_labels
output = ["type=docker,compression=zstd,mode=min,compression-level=${cache_compress_level}"] output = ["type=docker,compression=zstd,mode=min,compression-level=${image_compress_level}"]
cache_to = ["type=local,compression=zstd,mode=min,compression-level=${cache_compress_level}"] cache_to = ["type=local,compression=zstd,mode=min,compression-level=${cache_compress_level}"]
dockerfile = "${docker_dir}/Dockerfile.install" dockerfile = "${docker_dir}/Dockerfile.install"
target = "install" target = "install"