name: Main on: push: branches: - "**" tags: - "v*" pull_request: branches: - "**" workflow_dispatch: concurrency: group: ${{github.workflow}}-${{github.ref}} cancel-in-progress: false jobs: init: name: Init runs-on: self-hosted env: default_cargo_profiles: '["test", "release"]' default_feat_sets: '["none", "default", "all"]' default_rust_toolchains: '["nightly", "stable"]' default_sys_names: '["debian"]' default_sys_versions: '["testing-slim"]' default_rust_targets: '["x86_64-unknown-linux-gnu"]' default_sys_targets: '["x86_64-linux-gnu"]' default_machines: '["x86_64"]' outputs: cargo_profiles: ${{vars.CARGO_PROFILES || env.default_cargo_profiles}} feat_sets: ${{vars.FEAT_SETS || env.default_feat_sets}} rust_toolchains: ${{vars.RUST_TOOLCHAINS || env.default_rust_toolchains}} rust_targets: ${{vars.RUST_TARGETS || env.default_rust_targets}} sys_names: ${{vars.SYS_NAMES || env.default_sys_names}} sys_targets: ${{vars.SYS_TARGETS || env.default_sys_targets}} sys_versions: ${{vars.SYS_VERSIONS || env.default_sys_versions}} machines: ${{vars.MACHINES || env.default_machines}} steps: - name: Initialize Builder run: | set +e docker buildx inspect "${GITHUB_ACTOR}" if test x"$?" = x"0"; then exit 0 fi set -e cat < ./buildkitd.toml [system] platformsCacheMaxAge = "504h" [worker.oci] enabled = true rootless = false gc = true reservedSpace = "256GB" maxUsedSpace = "576GB" [[worker.oci.gcpolicy]] reservedSpace = "256GB" maxUsedSpace = "576GB" filters = ["label!=cache==pin"] all = true EOF docker buildx create \ --bootstrap \ --driver docker-container \ --buildkitd-config ./buildkitd.toml \ --name "${GITHUB_ACTOR}" \ --buildkitd-flags "--allow-insecure-entitlement network.host" ## commented due to https://github.com/orgs/community/discussions/18001 #deps: # if: ${{fromJSON(vars.CI_VERBOSE_DEPS || 'false')}} # name: Deps # needs: [init] # uses: ./.github/workflows/deps.yml # with: # cargo_profiles: ${{needs.init.outputs.cargo_profiles}} # feat_sets: ${{needs.init.outputs.feat_sets}} # rust_toolchains: ${{needs.init.outputs.rust_toolchains}} # rust_targets: ${{needs.init.outputs.rust_targets}} # sys_names: ${{needs.init.outputs.sys_names}} # sys_targets: ${{needs.init.outputs.sys_targets}} # sys_versions: ${{needs.init.outputs.sys_versions}} # machines: ${{needs.init.outputs.machines}} # excludes: > # [ # {"cargo_profile": "release-debuginfo", "rust_toolchain": "nightly"}, # {"cargo_profile": "release-native", "rust_toolchain": "stable"}, # {"cargo_profile": "release-native", "feat_set": "none"} # ] lint: if: > !failure() && !cancelled() && !contains(github.ref, 'refs/tags/v') name: Lint needs: [init] #needs: [init, deps] uses: ./.github/workflows/lint.yml with: cargo_profiles: ${{needs.init.outputs.cargo_profiles}} feat_sets: ${{needs.init.outputs.feat_sets}} rust_toolchains: ${{needs.init.outputs.rust_toolchains}} rust_targets: ${{needs.init.outputs.rust_targets}} sys_names: ${{needs.init.outputs.sys_names}} sys_targets: ${{needs.init.outputs.sys_targets}} sys_versions: ${{needs.init.outputs.sys_versions}} machines: ${{needs.init.outputs.machines}} excludes: > [ {"cargo_profile": "release-debuginfo"}, {"cargo_profile": "release-native", "rust_toolchain": "stable"}, {"cargo_profile": "release-native", "feat_set": "none"}, {"cargo_profile": "release-native", "feat_set": "default"}, {"cargo_profile": "test", "rust_toolchain": "stable", "feat_set": "none"}, {"cargo_profile": "release", "rust_toolchain": "nightly", "feat_set": "none"}, {"cargo_profile": "release", "rust_toolchain": "nightly", "feat_set": "default"} ] test: if: > !failure() && !cancelled() && !contains(github.ref, 'refs/tags/v') name: Test needs: [init, lint] uses: ./.github/workflows/test.yml with: complement: ${{fromJSON(vars.COMPLEMENT || 'true')}} cargo_profiles: ${{needs.init.outputs.cargo_profiles}} feat_sets: ${{needs.init.outputs.feat_sets}} rust_toolchains: ${{needs.init.outputs.rust_toolchains}} rust_targets: ${{needs.init.outputs.rust_targets}} sys_names: ${{needs.init.outputs.sys_names}} sys_targets: ${{needs.init.outputs.sys_targets}} sys_versions: ${{needs.init.outputs.sys_versions}} machines: ${{needs.init.outputs.machines}} excludes: > [ {"cargo_profile": "test", "rust_toolchain": "stable", "feat_set": "none"}, {"cargo_profile": "release-native", "rust_toolchain": "stable"}, {"cargo_profile": "release-native", "feat_set": "default"}, {"cargo_profile": "release-native", "feat_set": "none"}, {"cargo_profile": "release-debuginfo"} ] package: if: > !failure() && !cancelled() name: Package needs: [init, lint] uses: ./.github/workflows/package.yml with: cargo_profiles: ${{needs.init.outputs.cargo_profiles}} feat_sets: ${{needs.init.outputs.feat_sets}} rust_toolchains: ${{needs.init.outputs.rust_toolchains}} rust_targets: ${{needs.init.outputs.rust_targets}} sys_names: ${{needs.init.outputs.sys_names}} sys_targets: ${{needs.init.outputs.sys_targets}} sys_versions: ${{needs.init.outputs.sys_versions}} machines: ${{needs.init.outputs.machines}} excludes: > [ {"feat_set": "none"}, {"cargo_profile": "test"}, {"cargo_profile": "release-debuginfo", "feat_set": "default"}, {"cargo_profile": "release-debuginfo", "rust_toolchain": "nightly"}, {"cargo_profile": "release-debuginfo", "bake_target": "oci"}, {"cargo_profile": "release-native", "feat_set": "default"}, {"cargo_profile": "release-native", "rust_toolchain": "stable"}, {"cargo_profile": "release-native", "feat_set": "default"}, {"cargo_profile": "release-native", "bake_target": "docker"}, {"cargo_profile": "release-native", "bake_target": "oci"}, {"cargo_profile": "release", "rust_toolchain": "nightly"} ] publish: if: > !failure() && !cancelled() name: Publish needs: [init, package, test] uses: ./.github/workflows/publish.yml with: docker_repo: ${{vars.DOCKER_REPO}} cargo_profiles: ${{needs.init.outputs.cargo_profiles}} feat_sets: ${{needs.init.outputs.feat_sets}} rust_toolchains: ${{needs.init.outputs.rust_toolchains}} rust_targets: ${{needs.init.outputs.rust_targets}} sys_names: ${{needs.init.outputs.sys_names}} sys_targets: ${{needs.init.outputs.sys_targets}} sys_versions: ${{needs.init.outputs.sys_versions}} machines: ${{needs.init.outputs.machines}} excludes: > [ {"feat_set": "none"}, {"cargo_profile": "test"}, {"rust_toolchain": "nightly", "cargo_profile": "release"}, {"cargo_profile": "release-debuginfo"}, {"cargo_profile": "release-native"} ] secrets: ghcr_token: ${{ secrets.GHCR_TOKEN }} dockerhub_token: ${{ secrets.DOCKERHUB_TOKEN }}