ci: enforce digest-only dev releases
Some checks failed
State Corp Backend CI/CD / Quality gate (push) Successful in 3m32s
State Corp Backend CI/CD / Build linux/amd64 images once (push) Successful in 3m6s
State Corp Backend CI/CD / Refresh and release internal main (push) Has been skipped
State Corp Backend CI/CD / Release dev (push) Failing after 2s
State Corp Backend CI/CD / Release customer main (push) Has been skipped
Some checks failed
State Corp Backend CI/CD / Quality gate (push) Successful in 3m32s
State Corp Backend CI/CD / Build linux/amd64 images once (push) Successful in 3m6s
State Corp Backend CI/CD / Refresh and release internal main (push) Has been skipped
State Corp Backend CI/CD / Release dev (push) Failing after 2s
State Corp Backend CI/CD / Release customer main (push) Has been skipped
This commit is contained in:
@@ -34,6 +34,9 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Validate release client contract
|
||||||
|
run: ./scripts/ci/release-service-test.sh
|
||||||
|
|
||||||
- name: Install Python and uv
|
- name: Install Python and uv
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|||||||
36
scripts/ci/release-service-test.sh
Executable file
36
scripts/ci/release-service-test.sh
Executable file
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
script_dir=$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd)
|
||||||
|
test_dir=$(mktemp -d)
|
||||||
|
trap 'rm -rf "${test_dir}"' EXIT
|
||||||
|
|
||||||
|
true_path=$(type -P true)
|
||||||
|
cp "${true_path}" "${test_dir}/ssh"
|
||||||
|
digest="registry.dev.nii-ecos.ru/avm/state-corp-backend-web@sha256:$(printf '0%.0s' {1..64})"
|
||||||
|
encoded_fixture=$(printf fixture | base64)
|
||||||
|
|
||||||
|
release_env=(
|
||||||
|
PATH="${test_dir}:${PATH}"
|
||||||
|
RELEASE_HOST=10.10.0.124
|
||||||
|
RELEASE_USER=ecos-deploy
|
||||||
|
RELEASE_SERVICE_PATH=/opt/ecos-dev/release-service
|
||||||
|
RELEASE_SSH_KEY_B64="${encoded_fixture}"
|
||||||
|
RELEASE_KNOWN_HOSTS_B64="${encoded_fixture}"
|
||||||
|
)
|
||||||
|
|
||||||
|
env "${release_env[@]}" \
|
||||||
|
"${script_dir}/release-service.sh" \
|
||||||
|
state-corp-backend test-run "${digest}" "${digest}"
|
||||||
|
|
||||||
|
if env "${release_env[@]}" \
|
||||||
|
"${script_dir}/release-service.sh" \
|
||||||
|
state-corp-backend test-run \
|
||||||
|
registry.dev.nii-ecos.ru/avm/state-corp-backend-web:dev-deadbee \
|
||||||
|
registry.dev.nii-ecos.ru/avm/state-corp-backend-celery:dev-deadbee \
|
||||||
|
>/dev/null 2>&1; then
|
||||||
|
echo "mutable dev tags must be rejected" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "release-service digest contract: PASS"
|
||||||
@@ -67,7 +67,7 @@ require_safe_value \
|
|||||||
"RELEASE_SERVICE_PATH" "${release_service_path}" '^/[A-Za-z0-9._/-]+$'
|
"RELEASE_SERVICE_PATH" "${release_service_path}" '^/[A-Za-z0-9._/-]+$'
|
||||||
case "${release_service_path}" in
|
case "${release_service_path}" in
|
||||||
/opt/ecos-dev/release-service)
|
/opt/ecos-dev/release-service)
|
||||||
image_ref_pattern='^[A-Za-z0-9._:/-]+:dev-[a-f0-9]{7,40}$'
|
image_ref_pattern='^[A-Za-z0-9._:/-]+@sha256:[a-f0-9]{64}$'
|
||||||
[[ "${refresh_data}" == false ]] || fail "dev releases cannot refresh data"
|
[[ "${refresh_data}" == false ]] || fail "dev releases cannot refresh data"
|
||||||
;;
|
;;
|
||||||
/opt/ecos-main/release-service)
|
/opt/ecos-main/release-service)
|
||||||
|
|||||||
Reference in New Issue
Block a user