hyperi-ci 2.7.2__tar.gz → 2.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.github/actions/predict-version/action.yml +30 -2
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.github/actions/setup-runtime/action.yml +1 -1
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.github/workflows/_release-tail.yml +22 -16
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.github/workflows/ci.yml +30 -9
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.github/workflows/go-ci.yml +47 -16
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.github/workflows/python-ci.yml +40 -11
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.github/workflows/rust-ci.yml +47 -17
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.github/workflows/ts-ci.yml +40 -11
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.hyperi-ci.yaml +4 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/PKG-INFO +14 -1
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/README.md +13 -0
- hyperi_ci-2.8.0/VERSION +1 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/config/versions.yaml +13 -13
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/ARCHITECTURE.md +19 -4
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/DESIGN.md +1 -0
- hyperi_ci-2.8.0/docs/quality-gate.md +142 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/scripts/update-versions.py +58 -94
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/argocd/stage.py +6 -15
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/cli.py +25 -4
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/config/defaults.yaml +1 -4
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/container/build.py +26 -14
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/container/stage.py +57 -48
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/dispatch.py +8 -1
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/helm/stage.py +6 -15
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/golang/quality.py +10 -13
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/python/quality.py +14 -16
- hyperi_ci-2.8.0/src/hyperi_ci/languages/quality_common.py +131 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/rust/quality.py +10 -13
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/typescript/quality.py +10 -11
- hyperi_ci-2.8.0/src/hyperi_ci/publish_mode.py +119 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/quality/commit_validation.py +1 -1
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/quality/gitleaks.py +3 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/quality/predicted_bump.py +2 -1
- hyperi_ci-2.8.0/src/hyperi_ci/quality/semgrep.py +98 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/watch.py +45 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_container_build.py +47 -3
- hyperi_ci-2.8.0/tests/unit/test_publish_mode.py +139 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_push.py +4 -0
- hyperi_ci-2.8.0/tests/unit/test_quality_strict.py +134 -0
- hyperi_ci-2.8.0/tests/unit/test_semgrep.py +71 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_typescript_quality.py +7 -6
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_update_versions.py +40 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_watch.py +94 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_workflow_consistency.py +133 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/uv.lock +3 -3
- hyperi_ci-2.7.2/VERSION +0 -1
- hyperi_ci-2.7.2/src/hyperi_ci/languages/quality_common.py +0 -48
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.gitattributes +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.github/actions/setup-osv-scanner/action.yml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.github/actions/setup-semantic-release/action.yml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.github/actions/setup-semantic-release/default.releaserc.json +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.gitignore +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/.releaserc.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/AI-TRAINING-POLICY.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/CHANGELOG.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/COMMERCIAL.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/CONTRIBUTING.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/LICENSE +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/SECURITY.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/config/commit-types.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/config/org.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/config/runners.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/config/secrets-access.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/ARC-RUNNERS.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/CI-LESSONS.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/FLOW.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/JFROG-MIGRATION.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/LESSONS.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/MIGRATION-GUIDE.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/PGO-WORKLOAD-GUIDE.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/README.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/dependencies/DEPS-PINNING.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/dependencies/WORKFLOW-PINNING.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/deployment/CONTRACT-IDENTITY.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/deployment/CONTRACT.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/deployment/TIERS.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/deployment-contract.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/languages/GO.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/languages/PYTHON.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/languages/RUST.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/languages/TYPESCRIPT.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/migration/CODEBERG-SECRETS-AND-CI.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/migration/JFROG.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/migration/ONBOARDING.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/migration/codeberg-secrets-and-ci.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/migration/codeberg.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/migration/deployment-contract-tier3.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/runtime/PGO-BOLT.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/runtime/RUNNERS.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/runtime/TESTENV.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/rust.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/docs/typescript.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/pyproject.toml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/renovate.json +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/robots.txt +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/scripts/check-workflow-interfaces.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/scripts/pre-commit-versions.sh +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/scripts/recover-tags.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/scripts/setup-rust-dev.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/scripts/sync-secrets-access.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/argocd/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/argocd/gitops_push.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/common.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/config/native-deps/golang.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/config/native-deps/python.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/config/native-deps/rust.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/config/native-deps/typescript.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/config/org.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/config/toolchains/gcc.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/config/toolchains/llvm.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/config.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/container/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/container/binary_stage.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/container/compose.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/container/detect.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/container/labels.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/container/manifest.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/container/registry.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/container/templates.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/cli.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/contract.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/detect.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/overlay/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/overlay/anchors/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/overlay/anchors/argocd.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/overlay/anchors/dockerfile.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/overlay/anchors/helm.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/overlay/cli.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/overlay/errors.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/overlay/model.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/overlay/render.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/registry.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/scaffold.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/stage.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/topology/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/topology/resolve.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/deployment/topology/stitch.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/detect.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gh.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/.gitbook.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/.gitignore +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/CODEOWNERS +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/LICENSE +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/README.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/argocd/README.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/argocd/applicationsets/.gitkeep +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/argocd/appprojects/.gitkeep +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/argocd/bootstrap/.gitkeep +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/docs/concepts/architecture.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/docs/concepts/overview.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/docs/how-to/add-app.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/docs/how-to/add-environment.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/docs/how-to/add-topology.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/docs/index.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/docs/operations/disaster-recovery.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/docs/operations/rollback.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/docs/quickstart.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/docs/reference/sync-waves.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/docs/reference/topology-schema.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/mkdocs.yml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/pull_request_template.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/terraform/README.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/terraform/aws/environments/.gitkeep +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/terraform/aws/modules/.gitkeep +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/terraform/rancher/clusters/.gitkeep +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/terraform/rancher/modules/.gitkeep +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/topologies/README.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/values/.gitkeep +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/workflows/docs.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/workflows/stitch-and-publish.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/gitops_templates/workflows/validate.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/helm/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/init.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/init_gitops.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/install_deps.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/_build_common.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/golang/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/golang/build.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/golang/publish.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/golang/test.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/python/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/python/build.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/python/publish.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/python/test.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/rust/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/rust/build.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/rust/optimize.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/rust/pgo.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/rust/publish.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/rust/test.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/typescript/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/typescript/_common.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/typescript/build.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/typescript/install_deps.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/typescript/publish.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/languages/typescript/test.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/licenses.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/logs.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/migrate.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/native_deps.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/publish/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/publish/binaries.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/publish/dispatch.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/publish_binaries.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/push.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/quality/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/quality/ignores.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/quality/osv_scanner.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/release.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/stamp.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/trigger.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/src/hyperi_ci/upgrade.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/templates/pgo-workload/README.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/templates/pgo-workload/grpc-server.sh +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/templates/pgo-workload/http-server.sh +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/templates/pgo-workload/kafka-consumer.sh +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/templates/pgo-workload/kafka-producer.sh +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/templates/pgo-workload/multi-protocol.sh +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/templates/testenv/README.md +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/templates/testenv/clickhouse-low-mem.xml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/templates/testenv/clickhouse.compose.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/templates/testenv/redpanda.compose.yaml +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/argocd/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/argocd/test_gitops_push.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/argocd/test_stage.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/deployment/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/deployment/overlay/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/deployment/overlay/test_argocd_anchors.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/deployment/overlay/test_cli.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/deployment/overlay/test_dockerfile_anchors.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/deployment/overlay/test_helm_anchors.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/deployment/overlay/test_model.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/deployment/topology/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/deployment/topology/test_resolve.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/deployment/topology/test_stitch.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/helm/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/helm/test_stage.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/helm/test_stage_topology_mode.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/integration/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/integration/test_rust_build_optimize.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/deployment/__init__.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/deployment/test_contract.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/deployment/test_detect_tier.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/deployment/test_emit_artefacts_cli.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/deployment/test_registry_cascade.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/deployment/test_scaffold.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/deployment/test_stage.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_build_common.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_cli.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_cli_init_gitops.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_cli_stitch.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_commit_validation.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_common.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_config.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_container_binary_stage.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_container_compose.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_container_detect.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_container_labels.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_container_manifest.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_container_registry.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_container_stage.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_container_templates.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_detect.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_dispatch_alias.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_dispatch_status.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_gh.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_init.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_init_gitops.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_init_topology.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_licenses.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_migrate.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_native_deps.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_osv_scanner.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_predicted_bump.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_publish.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_publish_dispatch.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_quality_ignore_wiring.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_quality_ignores.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_recover_tags.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_release_version.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_rust_optimize.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_rust_pgo.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_rust_quality.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_stamp.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_upgrade.py +0 -0
- {hyperi_ci-2.7.2 → hyperi_ci-2.8.0}/tests/unit/test_workflow_interfaces.py +0 -0
|
@@ -29,6 +29,10 @@ inputs:
|
|
|
29
29
|
description: "Version resolution for from-head: auto (semantic-release picks) | patch | minor (forced)"
|
|
30
30
|
required: false
|
|
31
31
|
default: "auto"
|
|
32
|
+
branch-build:
|
|
33
|
+
description: "'true' to run build + container on pull_request events (branch-mode: PRs validate the full pipeline; whether the container also pushes a dev image is the separate publish.container.dev_push opt-in in .hyperi-ci.yaml)"
|
|
34
|
+
required: false
|
|
35
|
+
default: ""
|
|
32
36
|
|
|
33
37
|
outputs:
|
|
34
38
|
will-publish:
|
|
@@ -63,7 +67,22 @@ runs:
|
|
|
63
67
|
exit 0
|
|
64
68
|
fi
|
|
65
69
|
|
|
66
|
-
#
|
|
70
|
+
# Publish only ever happens from main (branch-mode decision 1:
|
|
71
|
+
# branches validate, main is the sole publish path). Stated HERE,
|
|
72
|
+
# at the gate SSOT, rather than relying on downstream job `if:`
|
|
73
|
+
# conditions to catch a trailer on a branch. A trailer on a
|
|
74
|
+
# non-main ref is ignored LOUDLY, never silently.
|
|
75
|
+
if [[ "${{ github.ref }}" != "refs/heads/main" ]]; then
|
|
76
|
+
echo "will-publish=false" >> "$GITHUB_OUTPUT"
|
|
77
|
+
msg=$(git log -1 --format=%B HEAD)
|
|
78
|
+
if printf '%s' "$msg" | grep -qiE '^[[:space:]]*Publish:[[:space:]]*true[[:space:]]*$'; then
|
|
79
|
+
echo "::warning::'Publish: true' trailer on non-main ref '${{ github.ref }}' — ignored. Publishing only happens from main; merge first."
|
|
80
|
+
fi
|
|
81
|
+
echo "Non-main ref — validate-only run (no tag, no publish)"
|
|
82
|
+
exit 0
|
|
83
|
+
fi
|
|
84
|
+
|
|
85
|
+
# push to main — match Publish: true trailer (case-insensitive on key)
|
|
67
86
|
msg=$(git log -1 --format=%B HEAD)
|
|
68
87
|
if printf '%s' "$msg" | grep -qiE '^[[:space:]]*Publish:[[:space:]]*true[[:space:]]*$'; then
|
|
69
88
|
echo "will-publish=true" >> "$GITHUB_OUTPUT"
|
|
@@ -215,9 +234,18 @@ runs:
|
|
|
215
234
|
set -euo pipefail
|
|
216
235
|
will_publish='${{ steps.gate.outputs.will-publish }}'
|
|
217
236
|
event_name='${{ github.event_name }}'
|
|
237
|
+
branch_build='${{ inputs.branch-build }}'
|
|
218
238
|
|
|
239
|
+
# run-build: publish runs always; an opted-in pull_request also
|
|
240
|
+
# builds (branch-mode decision 2 — PRs validate the FULL pipeline
|
|
241
|
+
# incl. container; whether that container is pushed as a dev
|
|
242
|
+
# image is the container stage's own dev_push decision). Raw
|
|
243
|
+
# branch pushes never build — the gate doctrine (non-shipping
|
|
244
|
+
# commits compile nothing) is unchanged.
|
|
219
245
|
if [[ "$will_publish" == "true" ]]; then
|
|
220
246
|
run_build=true
|
|
247
|
+
elif [[ "$event_name" == "pull_request" && "$branch_build" == "true" ]]; then
|
|
248
|
+
run_build=true
|
|
221
249
|
else
|
|
222
250
|
run_build=false
|
|
223
251
|
fi
|
|
@@ -230,4 +258,4 @@ runs:
|
|
|
230
258
|
|
|
231
259
|
echo "run-build=$run_build" >> "$GITHUB_OUTPUT"
|
|
232
260
|
echo "run-checks=$run_checks" >> "$GITHUB_OUTPUT"
|
|
233
|
-
echo "::notice::run-checks=$run_checks run-build=$run_build (will-publish=$will_publish event=$event_name)"
|
|
261
|
+
echo "::notice::run-checks=$run_checks run-build=$run_build (will-publish=$will_publish event=$event_name branch-build=$branch_build)"
|
|
@@ -40,7 +40,7 @@ runs:
|
|
|
40
40
|
steps:
|
|
41
41
|
- name: Install uv
|
|
42
42
|
if: ${{ !contains(runner.name, 'arc-runner') }}
|
|
43
|
-
uses: astral-sh/setup-uv@
|
|
43
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
44
44
|
with:
|
|
45
45
|
enable-cache: ${{ inputs.enable-uv-cache }}
|
|
46
46
|
|
|
@@ -85,9 +85,10 @@ env:
|
|
|
85
85
|
jobs:
|
|
86
86
|
container:
|
|
87
87
|
name: Container
|
|
88
|
-
#
|
|
89
|
-
# quality+test+build pre-needs). Pushes to main
|
|
90
|
-
#
|
|
88
|
+
# Raw branch pushes never reach this workflow (caller gates on
|
|
89
|
+
# quality+test+build pre-needs). Pushes to main, workflow_dispatch,
|
|
90
|
+
# and branch-mode pull_request runs (caller's branch-build opt-in)
|
|
91
|
+
# reach here:
|
|
91
92
|
#
|
|
92
93
|
# - Validate-only (push to main, will-publish == 'false'):
|
|
93
94
|
# docker build runs to catch Dockerfile breakages, but no push
|
|
@@ -95,20 +96,25 @@ jobs:
|
|
|
95
96
|
# BEFORE we ever try to publish from it.
|
|
96
97
|
# - Publish (will-publish == 'true'): docker build + push to all
|
|
97
98
|
# configured registries.
|
|
99
|
+
# - pull_request (branch-mode): docker build; pushed as a DEV image
|
|
100
|
+
# (branch-<slug> + sha tags, GHCR only) iff the project sets
|
|
101
|
+
# publish.container.dev_push — else validate-only. Fork PRs are
|
|
102
|
+
# excluded outright (first clause; no secrets, no pushes).
|
|
98
103
|
#
|
|
99
|
-
# The
|
|
100
|
-
# off HYPERCI_PUBLISH_MODE
|
|
104
|
+
# The publish/dev/validate decision lives in hyperi_ci.publish_mode
|
|
105
|
+
# (the SSOT), keyed off HYPERCI_PUBLISH_MODE + the event context.
|
|
101
106
|
if: |
|
|
102
107
|
github.event.pull_request.head.repo.fork != true && (
|
|
103
108
|
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
|
|
104
|
-
github.event_name == 'workflow_dispatch'
|
|
109
|
+
github.event_name == 'workflow_dispatch' ||
|
|
110
|
+
github.event_name == 'pull_request'
|
|
105
111
|
)
|
|
106
112
|
runs-on: ubuntu-latest
|
|
107
113
|
permissions:
|
|
108
114
|
contents: read
|
|
109
115
|
packages: write
|
|
110
116
|
steps:
|
|
111
|
-
- uses: actions/checkout@
|
|
117
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
112
118
|
with:
|
|
113
119
|
ref: ${{ inputs.tag || github.ref }}
|
|
114
120
|
|
|
@@ -121,7 +127,7 @@ jobs:
|
|
|
121
127
|
- name: Install uv
|
|
122
128
|
# Needed to run the resolve step below. Cheap, no Docker Hub —
|
|
123
129
|
# so a library never pays the Buildx/Docker-Hub cost (issue #33).
|
|
124
|
-
uses: astral-sh/setup-uv@
|
|
130
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
125
131
|
with:
|
|
126
132
|
enable-cache: false
|
|
127
133
|
|
|
@@ -142,7 +148,7 @@ jobs:
|
|
|
142
148
|
# anonymous rate limits when the Dockerfile pulls a Hub base
|
|
143
149
|
# image. Conditional on the org var being set; no-op otherwise.
|
|
144
150
|
if: steps.resolve.outputs.build == 'true' && vars.DOCKERHUB_USERNAME != ''
|
|
145
|
-
uses: docker/login-action@
|
|
151
|
+
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
|
|
146
152
|
with:
|
|
147
153
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
148
154
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
@@ -151,7 +157,7 @@ jobs:
|
|
|
151
157
|
# GITHUB_TOKEN via job-level packages:write permission — can create
|
|
152
158
|
# new repo-owned packages on first push.
|
|
153
159
|
if: steps.resolve.outputs.build == 'true'
|
|
154
|
-
uses: docker/login-action@
|
|
160
|
+
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
|
|
155
161
|
with:
|
|
156
162
|
registry: ghcr.io
|
|
157
163
|
username: ${{ github.actor }}
|
|
@@ -159,7 +165,7 @@ jobs:
|
|
|
159
165
|
|
|
160
166
|
- name: Set up Docker Buildx
|
|
161
167
|
if: steps.resolve.outputs.build == 'true'
|
|
162
|
-
uses: docker/setup-buildx-action@
|
|
168
|
+
uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
|
|
163
169
|
|
|
164
170
|
- name: Download build artifacts
|
|
165
171
|
# The build-dist-* artifact carries both dist/ (binaries) and
|
|
@@ -213,7 +219,7 @@ jobs:
|
|
|
213
219
|
pull-requests: write
|
|
214
220
|
packages: write
|
|
215
221
|
steps:
|
|
216
|
-
- uses: actions/checkout@
|
|
222
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
217
223
|
with:
|
|
218
224
|
# On push OR a from-head dispatch (issue #35), check out main HEAD
|
|
219
225
|
# so the tag is created there. On a tag dispatch (retroactive
|
|
@@ -280,13 +286,13 @@ jobs:
|
|
|
280
286
|
|
|
281
287
|
- name: Docker Hub login
|
|
282
288
|
if: vars.DOCKERHUB_USERNAME != ''
|
|
283
|
-
uses: docker/login-action@
|
|
289
|
+
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
|
|
284
290
|
with:
|
|
285
291
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
286
292
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
287
293
|
|
|
288
294
|
- name: GHCR login
|
|
289
|
-
uses: docker/login-action@
|
|
295
|
+
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
|
|
290
296
|
with:
|
|
291
297
|
registry: ghcr.io
|
|
292
298
|
username: ${{ github.actor }}
|
|
@@ -303,12 +309,12 @@ jobs:
|
|
|
303
309
|
|
|
304
310
|
- name: Install Rust toolchain
|
|
305
311
|
if: inputs.language == 'rust'
|
|
306
|
-
uses: dtolnay/rust-toolchain@
|
|
312
|
+
uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 # master
|
|
307
313
|
with:
|
|
308
314
|
toolchain: ${{ inputs.rust-toolchain }}
|
|
309
315
|
|
|
310
316
|
- name: Install uv
|
|
311
|
-
uses: astral-sh/setup-uv@
|
|
317
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
312
318
|
with:
|
|
313
319
|
enable-cache: false
|
|
314
320
|
|
|
@@ -47,18 +47,30 @@ concurrency:
|
|
|
47
47
|
group: ${{ github.workflow }}-${{ inputs.tag || github.ref }}
|
|
48
48
|
cancel-in-progress: true
|
|
49
49
|
|
|
50
|
+
# Least-privilege GITHUB_TOKEN default for every job (CodeQL
|
|
51
|
+
# actions/missing-workflow-permissions). Two jobs elevate: release-tail
|
|
52
|
+
# (passes write down to _release-tail.yml -- semantic-release commit/tag +
|
|
53
|
+
# GHCR) and plan (semantic-release push-access verify on a publish predict).
|
|
54
|
+
# commit-check / quality / test / build are read-only.
|
|
55
|
+
permissions:
|
|
56
|
+
contents: read
|
|
57
|
+
|
|
50
58
|
jobs:
|
|
51
59
|
plan:
|
|
52
60
|
name: Plan
|
|
53
61
|
if: github.event.pull_request.head.repo.fork != true
|
|
54
62
|
runs-on: ubuntu-latest
|
|
63
|
+
# predict-version runs semantic-release, whose git plugin verifies push
|
|
64
|
+
# access (a `git push --dry-run`) on a publish predict -- needs write.
|
|
65
|
+
permissions:
|
|
66
|
+
contents: write
|
|
55
67
|
outputs:
|
|
56
68
|
run-checks: ${{ steps.predict.outputs.run-checks }}
|
|
57
69
|
run-build: ${{ steps.predict.outputs.run-build }}
|
|
58
70
|
will-publish: ${{ steps.predict.outputs.will-publish }}
|
|
59
71
|
next-version: ${{ steps.predict.outputs.version }}
|
|
60
72
|
steps:
|
|
61
|
-
- uses: actions/checkout@
|
|
73
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
62
74
|
with:
|
|
63
75
|
ref: ${{ inputs.tag || github.ref }}
|
|
64
76
|
fetch-depth: 0 # full history -- semantic-release dry-run reads it
|
|
@@ -69,6 +81,7 @@ jobs:
|
|
|
69
81
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
70
82
|
from-head: ${{ inputs.from-head }}
|
|
71
83
|
bump: ${{ inputs.bump }}
|
|
84
|
+
branch-build: ${{ vars.HYPERCI_BRANCH_BUILD }}
|
|
72
85
|
|
|
73
86
|
commit-check:
|
|
74
87
|
name: Commit messages
|
|
@@ -83,11 +96,11 @@ jobs:
|
|
|
83
96
|
github.event_name == 'pull_request'
|
|
84
97
|
runs-on: ubuntu-latest
|
|
85
98
|
steps:
|
|
86
|
-
- uses: actions/checkout@
|
|
99
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
87
100
|
with:
|
|
88
101
|
fetch-depth: 0
|
|
89
102
|
- name: Install uv
|
|
90
|
-
uses: astral-sh/setup-uv@
|
|
103
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
91
104
|
with:
|
|
92
105
|
enable-cache: true
|
|
93
106
|
- name: Set up Python
|
|
@@ -101,7 +114,7 @@ jobs:
|
|
|
101
114
|
name: Quality
|
|
102
115
|
runs-on: ubuntu-latest
|
|
103
116
|
steps:
|
|
104
|
-
- uses: actions/checkout@
|
|
117
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
105
118
|
with:
|
|
106
119
|
ref: ${{ inputs.tag || github.ref }}
|
|
107
120
|
# Full history + tags: the interface gate diffs against the last
|
|
@@ -109,7 +122,7 @@ jobs:
|
|
|
109
122
|
fetch-depth: 0
|
|
110
123
|
|
|
111
124
|
- name: Install uv
|
|
112
|
-
uses: astral-sh/setup-uv@
|
|
125
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
113
126
|
with:
|
|
114
127
|
enable-cache: true
|
|
115
128
|
|
|
@@ -137,12 +150,12 @@ jobs:
|
|
|
137
150
|
matrix:
|
|
138
151
|
os: [ubuntu-latest, macos-latest]
|
|
139
152
|
steps:
|
|
140
|
-
- uses: actions/checkout@
|
|
153
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
141
154
|
with:
|
|
142
155
|
ref: ${{ inputs.tag || github.ref }}
|
|
143
156
|
|
|
144
157
|
- name: Install uv
|
|
145
|
-
uses: astral-sh/setup-uv@
|
|
158
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
146
159
|
with:
|
|
147
160
|
enable-cache: true
|
|
148
161
|
|
|
@@ -161,7 +174,7 @@ jobs:
|
|
|
161
174
|
if: needs.plan.outputs.run-build == 'true'
|
|
162
175
|
runs-on: ubuntu-latest
|
|
163
176
|
steps:
|
|
164
|
-
- uses: actions/checkout@
|
|
177
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
165
178
|
with:
|
|
166
179
|
ref: ${{ inputs.tag || github.ref }}
|
|
167
180
|
|
|
@@ -189,7 +202,7 @@ jobs:
|
|
|
189
202
|
fi
|
|
190
203
|
|
|
191
204
|
- name: Install uv
|
|
192
|
-
uses: astral-sh/setup-uv@
|
|
205
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
193
206
|
with:
|
|
194
207
|
enable-cache: true
|
|
195
208
|
|
|
@@ -218,6 +231,14 @@ jobs:
|
|
|
218
231
|
release-tail:
|
|
219
232
|
name: Release tail
|
|
220
233
|
needs: [plan, build]
|
|
234
|
+
# Elevated + passed to _release-tail.yml: its tag-and-publish job commits +
|
|
235
|
+
# tags (contents), pushes GHCR (packages) and runs the semantic-release GH
|
|
236
|
+
# plugin (issues + pull-requests). Capped by the caller's grant.
|
|
237
|
+
permissions:
|
|
238
|
+
contents: write
|
|
239
|
+
packages: write
|
|
240
|
+
issues: write
|
|
241
|
+
pull-requests: write
|
|
221
242
|
# Local ref (dogfood): a change to the shared release tail is exercised
|
|
222
243
|
# on hyperi-ci's own CI before any consumer pins it. The tail's own
|
|
223
244
|
# tag-and-publish job is gated on will-publish == 'true', so a non-publish
|
|
@@ -59,6 +59,10 @@ on:
|
|
|
59
59
|
type: string
|
|
60
60
|
default: ""
|
|
61
61
|
description: "Space-separated submodule paths to init after checkout (e.g. 'schemas'). Empty (default) inits nothing. The submodule must be reachable by the job token -- public, or a token with cross-repo read access."
|
|
62
|
+
branch-build:
|
|
63
|
+
type: string
|
|
64
|
+
default: ""
|
|
65
|
+
description: "'true' to run build + container on pull_request events (branch-mode). Also settable repo-wide via the HYPERCI_BRANCH_BUILD variable. Dev-image push is the separate publish.container.dev_push opt-in."
|
|
62
66
|
secrets:
|
|
63
67
|
JFROG_TOKEN:
|
|
64
68
|
required: false
|
|
@@ -106,6 +110,18 @@ concurrency:
|
|
|
106
110
|
env:
|
|
107
111
|
HYPERCI_PUBLISH_TARGET: ${{ inputs.publish-target }}
|
|
108
112
|
HYPERCI_INSTALL: uvx --no-cache --refresh hyperi-ci
|
|
113
|
+
# Rare edge-case escape hatch: set the HYPERCI_QUALITY_SKIP repo/org
|
|
114
|
+
# variable (e.g. "semgrep") to force-skip a quality tool whose false
|
|
115
|
+
# positive is halting CI, until the real fix lands. Empty when unset.
|
|
116
|
+
HYPERCI_QUALITY_SKIP: ${{ vars.HYPERCI_QUALITY_SKIP }}
|
|
117
|
+
|
|
118
|
+
# Least-privilege GITHUB_TOKEN default for every job (CodeQL
|
|
119
|
+
# actions/missing-workflow-permissions). Two jobs elevate: release-tail
|
|
120
|
+
# (passes write down to _release-tail.yml -- semantic-release commit/tag +
|
|
121
|
+
# GHCR) and plan (semantic-release push-access verify on a publish predict).
|
|
122
|
+
# commit-check / quality / test / build are read-only.
|
|
123
|
+
permissions:
|
|
124
|
+
contents: read
|
|
109
125
|
|
|
110
126
|
jobs:
|
|
111
127
|
# ---------------------------------------------------------------------------
|
|
@@ -116,6 +132,10 @@ jobs:
|
|
|
116
132
|
name: Plan
|
|
117
133
|
if: github.event.pull_request.head.repo.fork != true
|
|
118
134
|
runs-on: ubuntu-latest
|
|
135
|
+
# predict-version runs semantic-release, whose git plugin verifies push
|
|
136
|
+
# access (a `git push --dry-run`) on a publish predict -- needs write.
|
|
137
|
+
permissions:
|
|
138
|
+
contents: write
|
|
119
139
|
outputs:
|
|
120
140
|
run-checks: ${{ steps.predict.outputs.run-checks }}
|
|
121
141
|
run-build: ${{ steps.predict.outputs.run-build }}
|
|
@@ -126,7 +146,7 @@ jobs:
|
|
|
126
146
|
- name: Beta notice
|
|
127
147
|
run: echo "::warning title=Go CI is beta::The Go reusable workflow is less battle-tested than Rust/Python/TS — verify results carefully."
|
|
128
148
|
|
|
129
|
-
- uses: actions/checkout@
|
|
149
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
130
150
|
with:
|
|
131
151
|
ref: ${{ inputs.tag || github.ref }}
|
|
132
152
|
fetch-depth: 0
|
|
@@ -138,17 +158,20 @@ jobs:
|
|
|
138
158
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
139
159
|
from-head: ${{ inputs.from-head }}
|
|
140
160
|
bump: ${{ inputs.bump }}
|
|
161
|
+
branch-build: ${{ inputs.branch-build || vars.HYPERCI_BRANCH_BUILD }}
|
|
141
162
|
|
|
142
163
|
- name: Generate build matrix
|
|
143
164
|
# Go cross-compiles natively (GOOS/GOARCH) — same multi-arch
|
|
144
|
-
# matrix shape as Rust on publish; single-arch on validate
|
|
165
|
+
# matrix shape as Rust on publish; single-arch on validate AND
|
|
166
|
+
# branch-mode PR builds (arch breadth keys off will-publish,
|
|
167
|
+
# NOT run-build).
|
|
145
168
|
id: matrix
|
|
146
169
|
shell: bash
|
|
147
170
|
run: |
|
|
148
171
|
set -euo pipefail
|
|
149
172
|
AMD64_RUNNER="${{ startsWith(github.head_ref || github.ref_name, 'renovate/') && (vars.GH_RUNNER_RENOVATE || 'ubuntu-latest') || (inputs.runner-mode || vars.GH_RUNNER_MODE) == 'free' && 'ubuntu-latest' || inputs.runner-build || vars.GH_RUNNER_GOLANG || vars.GH_RUNNER_DEFAULT || 'ubuntu-latest' }}"
|
|
150
173
|
ARM64_RUNNER="${{ vars.GH_RUNNER_ARM64 || 'ubuntu-24.04-arm' }}"
|
|
151
|
-
if [[ "${{ steps.predict.outputs.
|
|
174
|
+
if [[ "${{ steps.predict.outputs.will-publish }}" == "true" ]]; then
|
|
152
175
|
matrix='{"include":[{"goos":"linux","goarch":"amd64","runner":"'"$AMD64_RUNNER"'","os_arch":"linux-amd64"},{"goos":"linux","goarch":"arm64","runner":"'"$ARM64_RUNNER"'","os_arch":"linux-arm64"}]}'
|
|
153
176
|
else
|
|
154
177
|
matrix='{"include":[{"goos":"linux","goarch":"amd64","runner":"'"$AMD64_RUNNER"'","os_arch":"linux-amd64"}]}'
|
|
@@ -169,11 +192,11 @@ jobs:
|
|
|
169
192
|
github.event_name == 'pull_request'
|
|
170
193
|
runs-on: ubuntu-latest
|
|
171
194
|
steps:
|
|
172
|
-
- uses: actions/checkout@
|
|
195
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
173
196
|
with:
|
|
174
197
|
fetch-depth: 0
|
|
175
198
|
- name: Install uv
|
|
176
|
-
uses: astral-sh/setup-uv@
|
|
199
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
177
200
|
with:
|
|
178
201
|
enable-cache: false
|
|
179
202
|
- name: Validate commit messages
|
|
@@ -187,18 +210,18 @@ jobs:
|
|
|
187
210
|
steps:
|
|
188
211
|
- name: Docker Hub login
|
|
189
212
|
if: ${{ vars.DOCKERHUB_USERNAME != '' }}
|
|
190
|
-
uses: docker/login-action@
|
|
213
|
+
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
|
|
191
214
|
with:
|
|
192
215
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
193
216
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
194
217
|
|
|
195
|
-
- uses: actions/checkout@
|
|
218
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
196
219
|
with:
|
|
197
220
|
ref: ${{ inputs.tag || github.ref }}
|
|
198
221
|
|
|
199
222
|
- name: Set up Go
|
|
200
223
|
if: ${{ !contains(runner.name, 'arc-runner') }}
|
|
201
|
-
uses: actions/setup-go@
|
|
224
|
+
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
|
|
202
225
|
with:
|
|
203
226
|
go-version-file: ${{ inputs.go-version-file }}
|
|
204
227
|
|
|
@@ -212,7 +235,7 @@ jobs:
|
|
|
212
235
|
|
|
213
236
|
- name: Install uv
|
|
214
237
|
if: ${{ !contains(runner.name, 'arc-runner') }}
|
|
215
|
-
uses: astral-sh/setup-uv@
|
|
238
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
216
239
|
with:
|
|
217
240
|
enable-cache: false
|
|
218
241
|
|
|
@@ -248,24 +271,24 @@ jobs:
|
|
|
248
271
|
steps:
|
|
249
272
|
- name: Docker Hub login
|
|
250
273
|
if: ${{ vars.DOCKERHUB_USERNAME != '' }}
|
|
251
|
-
uses: docker/login-action@
|
|
274
|
+
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
|
|
252
275
|
with:
|
|
253
276
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
254
277
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
255
278
|
|
|
256
|
-
- uses: actions/checkout@
|
|
279
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
257
280
|
with:
|
|
258
281
|
ref: ${{ inputs.tag || github.ref }}
|
|
259
282
|
|
|
260
283
|
- name: Set up Go
|
|
261
284
|
if: ${{ !contains(runner.name, 'arc-runner') }}
|
|
262
|
-
uses: actions/setup-go@
|
|
285
|
+
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
|
|
263
286
|
with:
|
|
264
287
|
go-version-file: ${{ inputs.go-version-file }}
|
|
265
288
|
|
|
266
289
|
- name: Install uv
|
|
267
290
|
if: ${{ !contains(runner.name, 'arc-runner') }}
|
|
268
|
-
uses: astral-sh/setup-uv@
|
|
291
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
269
292
|
with:
|
|
270
293
|
enable-cache: false
|
|
271
294
|
|
|
@@ -303,7 +326,7 @@ jobs:
|
|
|
303
326
|
strategy:
|
|
304
327
|
matrix: ${{ fromJson(needs.plan.outputs.build-matrix) }}
|
|
305
328
|
steps:
|
|
306
|
-
- uses: actions/checkout@
|
|
329
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
307
330
|
with:
|
|
308
331
|
ref: ${{ inputs.tag || github.ref }}
|
|
309
332
|
|
|
@@ -329,13 +352,13 @@ jobs:
|
|
|
329
352
|
|
|
330
353
|
- name: Set up Go
|
|
331
354
|
if: ${{ !contains(runner.name, 'arc-runner') }}
|
|
332
|
-
uses: actions/setup-go@
|
|
355
|
+
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
|
|
333
356
|
with:
|
|
334
357
|
go-version-file: ${{ inputs.go-version-file }}
|
|
335
358
|
|
|
336
359
|
- name: Install uv
|
|
337
360
|
if: ${{ !contains(runner.name, 'arc-runner') }}
|
|
338
|
-
uses: astral-sh/setup-uv@
|
|
361
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
339
362
|
with:
|
|
340
363
|
enable-cache: false
|
|
341
364
|
|
|
@@ -370,6 +393,14 @@ jobs:
|
|
|
370
393
|
release-tail:
|
|
371
394
|
name: Release tail
|
|
372
395
|
needs: [plan, build]
|
|
396
|
+
# Elevated + passed to _release-tail.yml: its tag-and-publish job commits +
|
|
397
|
+
# tags (contents), pushes GHCR (packages) and runs the semantic-release GH
|
|
398
|
+
# plugin (issues + pull-requests). Capped by the caller's grant.
|
|
399
|
+
permissions:
|
|
400
|
+
contents: write
|
|
401
|
+
packages: write
|
|
402
|
+
issues: write
|
|
403
|
+
pull-requests: write
|
|
373
404
|
uses: hyperi-io/hyperi-ci/.github/workflows/_release-tail.yml@main
|
|
374
405
|
with:
|
|
375
406
|
language: golang
|
|
@@ -56,6 +56,10 @@ on:
|
|
|
56
56
|
type: string
|
|
57
57
|
default: ""
|
|
58
58
|
description: "Space-separated submodule paths to init after checkout (e.g. 'schemas'). Empty (default) inits nothing. The submodule must be reachable by the job token -- public, or a token with cross-repo read access."
|
|
59
|
+
branch-build:
|
|
60
|
+
type: string
|
|
61
|
+
default: ""
|
|
62
|
+
description: "'true' to run build + container on pull_request events (branch-mode). Also settable repo-wide via the HYPERCI_BRANCH_BUILD variable. Dev-image push is the separate publish.container.dev_push opt-in."
|
|
59
63
|
secrets:
|
|
60
64
|
JFROG_TOKEN:
|
|
61
65
|
required: false
|
|
@@ -110,6 +114,18 @@ concurrency:
|
|
|
110
114
|
env:
|
|
111
115
|
HYPERCI_PUBLISH_TARGET: ${{ inputs.publish-target }}
|
|
112
116
|
HYPERCI_INSTALL: uvx --no-cache --refresh hyperi-ci
|
|
117
|
+
# Rare edge-case escape hatch: set the HYPERCI_QUALITY_SKIP repo/org
|
|
118
|
+
# variable (e.g. "semgrep") to force-skip a quality tool whose false
|
|
119
|
+
# positive is halting CI, until the real fix lands. Empty when unset.
|
|
120
|
+
HYPERCI_QUALITY_SKIP: ${{ vars.HYPERCI_QUALITY_SKIP }}
|
|
121
|
+
|
|
122
|
+
# Least-privilege GITHUB_TOKEN default for every job (CodeQL
|
|
123
|
+
# actions/missing-workflow-permissions). Two jobs elevate: release-tail
|
|
124
|
+
# (passes write down to _release-tail.yml -- semantic-release commit/tag +
|
|
125
|
+
# GHCR) and plan (semantic-release push-access verify on a publish predict).
|
|
126
|
+
# commit-check / quality / test / build are read-only.
|
|
127
|
+
permissions:
|
|
128
|
+
contents: read
|
|
113
129
|
|
|
114
130
|
jobs:
|
|
115
131
|
# ---------------------------------------------------------------------------
|
|
@@ -121,13 +137,17 @@ jobs:
|
|
|
121
137
|
name: Plan
|
|
122
138
|
if: github.event.pull_request.head.repo.fork != true
|
|
123
139
|
runs-on: ubuntu-latest
|
|
140
|
+
# predict-version runs semantic-release, whose git plugin verifies push
|
|
141
|
+
# access (a `git push --dry-run`) on a publish predict -- needs write.
|
|
142
|
+
permissions:
|
|
143
|
+
contents: write
|
|
124
144
|
outputs:
|
|
125
145
|
run-checks: ${{ steps.predict.outputs.run-checks }}
|
|
126
146
|
run-build: ${{ steps.predict.outputs.run-build }}
|
|
127
147
|
will-publish: ${{ steps.predict.outputs.will-publish }}
|
|
128
148
|
next-version: ${{ steps.predict.outputs.version }}
|
|
129
149
|
steps:
|
|
130
|
-
- uses: actions/checkout@
|
|
150
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
131
151
|
with:
|
|
132
152
|
ref: ${{ inputs.tag || github.ref }}
|
|
133
153
|
fetch-depth: 0 # full history — semantic-release dry-run reads it
|
|
@@ -139,6 +159,7 @@ jobs:
|
|
|
139
159
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
140
160
|
from-head: ${{ inputs.from-head }}
|
|
141
161
|
bump: ${{ inputs.bump }}
|
|
162
|
+
branch-build: ${{ inputs.branch-build || vars.HYPERCI_BRANCH_BUILD }}
|
|
142
163
|
|
|
143
164
|
commit-check:
|
|
144
165
|
name: Commit messages
|
|
@@ -154,11 +175,11 @@ jobs:
|
|
|
154
175
|
github.event_name == 'pull_request'
|
|
155
176
|
runs-on: ubuntu-latest
|
|
156
177
|
steps:
|
|
157
|
-
- uses: actions/checkout@
|
|
178
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
158
179
|
with:
|
|
159
180
|
fetch-depth: 0
|
|
160
181
|
- name: Install uv
|
|
161
|
-
uses: astral-sh/setup-uv@
|
|
182
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
162
183
|
with:
|
|
163
184
|
enable-cache: false
|
|
164
185
|
- name: Validate commit messages
|
|
@@ -172,18 +193,18 @@ jobs:
|
|
|
172
193
|
steps:
|
|
173
194
|
- name: Docker Hub login
|
|
174
195
|
if: ${{ vars.DOCKERHUB_USERNAME != '' }}
|
|
175
|
-
uses: docker/login-action@
|
|
196
|
+
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
|
|
176
197
|
with:
|
|
177
198
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
178
199
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
179
200
|
|
|
180
|
-
- uses: actions/checkout@
|
|
201
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
181
202
|
with:
|
|
182
203
|
ref: ${{ inputs.tag || github.ref }}
|
|
183
204
|
|
|
184
205
|
- name: Install uv
|
|
185
206
|
if: ${{ !contains(runner.name, 'arc-runner') }}
|
|
186
|
-
uses: astral-sh/setup-uv@
|
|
207
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
187
208
|
with:
|
|
188
209
|
enable-cache: true
|
|
189
210
|
|
|
@@ -242,18 +263,18 @@ jobs:
|
|
|
242
263
|
steps:
|
|
243
264
|
- name: Docker Hub login
|
|
244
265
|
if: ${{ vars.DOCKERHUB_USERNAME != '' }}
|
|
245
|
-
uses: docker/login-action@
|
|
266
|
+
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
|
|
246
267
|
with:
|
|
247
268
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
248
269
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
249
270
|
|
|
250
|
-
- uses: actions/checkout@
|
|
271
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
251
272
|
with:
|
|
252
273
|
ref: ${{ inputs.tag || github.ref }}
|
|
253
274
|
|
|
254
275
|
- name: Install uv
|
|
255
276
|
if: ${{ !contains(runner.name, 'arc-runner') }}
|
|
256
|
-
uses: astral-sh/setup-uv@
|
|
277
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
257
278
|
with:
|
|
258
279
|
enable-cache: true
|
|
259
280
|
|
|
@@ -292,7 +313,7 @@ jobs:
|
|
|
292
313
|
if: needs.plan.outputs.run-build == 'true'
|
|
293
314
|
runs-on: ${{ startsWith(github.head_ref || github.ref_name, 'renovate/') && (vars.GH_RUNNER_RENOVATE || 'ubuntu-latest') || (inputs.runner-mode || vars.GH_RUNNER_MODE) == 'free' && 'ubuntu-latest' || inputs.runner-build || vars.GH_RUNNER_PYTHON || vars.GH_RUNNER_DEFAULT || 'ubuntu-latest' }}
|
|
294
315
|
steps:
|
|
295
|
-
- uses: actions/checkout@
|
|
316
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
296
317
|
with:
|
|
297
318
|
ref: ${{ inputs.tag || github.ref }}
|
|
298
319
|
|
|
@@ -330,7 +351,7 @@ jobs:
|
|
|
330
351
|
|
|
331
352
|
- name: Install uv
|
|
332
353
|
if: ${{ !contains(runner.name, 'arc-runner') }}
|
|
333
|
-
uses: astral-sh/setup-uv@
|
|
354
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
334
355
|
with:
|
|
335
356
|
enable-cache: true
|
|
336
357
|
|
|
@@ -367,6 +388,14 @@ jobs:
|
|
|
367
388
|
release-tail:
|
|
368
389
|
name: Release tail
|
|
369
390
|
needs: [plan, build]
|
|
391
|
+
# Elevated + passed to _release-tail.yml: its tag-and-publish job commits +
|
|
392
|
+
# tags (contents), pushes GHCR (packages) and runs the semantic-release GH
|
|
393
|
+
# plugin (issues + pull-requests). Capped by the caller's grant.
|
|
394
|
+
permissions:
|
|
395
|
+
contents: write
|
|
396
|
+
packages: write
|
|
397
|
+
issues: write
|
|
398
|
+
pull-requests: write
|
|
370
399
|
uses: hyperi-io/hyperi-ci/.github/workflows/_release-tail.yml@main
|
|
371
400
|
with:
|
|
372
401
|
language: python
|