enhance pipeline: add validation for release tag format and improve AI code review steps
remove duplicate lint, type and unit test validation from PR pipeline.
This commit is contained in:
+26
-20
@@ -125,8 +125,10 @@ definitions:
|
|||||||
# BEFORE any data is written, closing the race window that exists when
|
# BEFORE any data is written, closing the race window that exists when
|
||||||
# writing first and chmodding second (default umask would expose the
|
# writing first and chmodding second (default umask would expose the
|
||||||
# token briefly as 644). printf (not echo) avoids a trailing newline.
|
# token briefly as 644). printf (not echo) avoids a trailing newline.
|
||||||
|
- set +x
|
||||||
- install -m 600 /dev/null "$(pwd)/web-identity-token"
|
- install -m 600 /dev/null "$(pwd)/web-identity-token"
|
||||||
- printf '%s' "$BITBUCKET_STEP_OIDC_TOKEN" > "$(pwd)/web-identity-token"
|
- printf '%s' "$BITBUCKET_STEP_OIDC_TOKEN" > "$(pwd)/web-identity-token"
|
||||||
|
- set -x
|
||||||
|
|
||||||
# Clone the review agent repo (private — needs BITBUCKET_CLONE_TOKEN)
|
# Clone the review agent repo (private — needs BITBUCKET_CLONE_TOKEN)
|
||||||
# SETUP REQUIRED: set BITBUCKET_CLONE_TOKEN (marked "Secured") in
|
# SETUP REQUIRED: set BITBUCKET_CLONE_TOKEN (marked "Secured") in
|
||||||
@@ -196,6 +198,9 @@ pipelines:
|
|||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
# Feature branches represent new functionality. They must go through
|
# Feature branches represent new functionality. They must go through
|
||||||
# dev first for integration testing before promotion to stg/main.
|
# dev first for integration testing before promotion to stg/main.
|
||||||
|
# Note: Code quality checks (lint, typecheck, unit-tests) run in the
|
||||||
|
# default pipeline on every push. This PR pipeline validates branch
|
||||||
|
# routing and performs AI code review only.
|
||||||
"feature/*":
|
"feature/*":
|
||||||
# Gate steps below use atlassian/default-image:4 (not python:3.12.7)
|
# Gate steps below use atlassian/default-image:4 (not python:3.12.7)
|
||||||
# because gates only run bash/shell — no Python needed. The default
|
# because gates only run bash/shell — no Python needed. The default
|
||||||
@@ -214,16 +219,15 @@ pipelines:
|
|||||||
[ "${BITBUCKET_PR_DESTINATION_BRANCH}" = "$t" ] && exit 0
|
[ "${BITBUCKET_PR_DESTINATION_BRANCH}" = "$t" ] && exit 0
|
||||||
done
|
done
|
||||||
echo "BLOCKED: target must be one of: ${ALLOWED}"; exit 1
|
echo "BLOCKED: target must be one of: ${ALLOWED}"; exit 1
|
||||||
- parallel:
|
|
||||||
- step: *lint
|
|
||||||
- step: *typecheck
|
|
||||||
- step: *unit-tests
|
|
||||||
- step: *ai-code-review
|
- step: *ai-code-review
|
||||||
|
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
# bugfix/* → dev only
|
# bugfix/* → dev only
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
# Bug fixes follow the same path as features — must land in dev first.
|
# Bug fixes follow the same path as features — must land in dev first.
|
||||||
|
# Note: Code quality checks (lint, typecheck, unit-tests) run in the
|
||||||
|
# default pipeline on every push. This PR pipeline validates branch
|
||||||
|
# routing and performs AI code review only.
|
||||||
"bugfix/*":
|
"bugfix/*":
|
||||||
- step:
|
- step:
|
||||||
name: "Gate: bugfix → dev"
|
name: "Gate: bugfix → dev"
|
||||||
@@ -239,10 +243,6 @@ pipelines:
|
|||||||
[ "${BITBUCKET_PR_DESTINATION_BRANCH}" = "$t" ] && exit 0
|
[ "${BITBUCKET_PR_DESTINATION_BRANCH}" = "$t" ] && exit 0
|
||||||
done
|
done
|
||||||
echo "BLOCKED: target must be one of: ${ALLOWED}"; exit 1
|
echo "BLOCKED: target must be one of: ${ALLOWED}"; exit 1
|
||||||
- parallel:
|
|
||||||
- step: *lint
|
|
||||||
- step: *typecheck
|
|
||||||
- step: *unit-tests
|
|
||||||
- step: *ai-code-review
|
- step: *ai-code-review
|
||||||
|
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
@@ -250,6 +250,9 @@ pipelines:
|
|||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
# Hotfixes are urgent production fixes. They can go directly to main
|
# Hotfixes are urgent production fixes. They can go directly to main
|
||||||
# (fast-track) or to dev (to keep the dev branch in sync).
|
# (fast-track) or to dev (to keep the dev branch in sync).
|
||||||
|
# Note: Code quality checks (lint, typecheck, unit-tests) run in the
|
||||||
|
# default pipeline on every push. This PR pipeline validates branch
|
||||||
|
# routing and performs AI code review only.
|
||||||
"hotfix/*":
|
"hotfix/*":
|
||||||
- step:
|
- step:
|
||||||
name: "Gate: hotfix → main or dev"
|
name: "Gate: hotfix → main or dev"
|
||||||
@@ -265,10 +268,6 @@ pipelines:
|
|||||||
[ "${BITBUCKET_PR_DESTINATION_BRANCH}" = "$t" ] && exit 0
|
[ "${BITBUCKET_PR_DESTINATION_BRANCH}" = "$t" ] && exit 0
|
||||||
done
|
done
|
||||||
echo "BLOCKED: target must be one of: ${ALLOWED}"; exit 1
|
echo "BLOCKED: target must be one of: ${ALLOWED}"; exit 1
|
||||||
- parallel:
|
|
||||||
- step: *lint
|
|
||||||
- step: *typecheck
|
|
||||||
- step: *unit-tests
|
|
||||||
- step: *ai-code-review
|
- step: *ai-code-review
|
||||||
|
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
@@ -276,6 +275,9 @@ pipelines:
|
|||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
# Once features/fixes are integrated in dev, a PR from dev to stg
|
# Once features/fixes are integrated in dev, a PR from dev to stg
|
||||||
# promotes the code to staging for final validation.
|
# promotes the code to staging for final validation.
|
||||||
|
# Note: Code quality checks (lint, typecheck, unit-tests) run in the
|
||||||
|
# default pipeline on every push. This PR pipeline validates branch
|
||||||
|
# routing and performs AI code review only.
|
||||||
dev:
|
dev:
|
||||||
- step:
|
- step:
|
||||||
name: "Gate: dev → stg"
|
name: "Gate: dev → stg"
|
||||||
@@ -291,10 +293,6 @@ pipelines:
|
|||||||
[ "${BITBUCKET_PR_DESTINATION_BRANCH}" = "$t" ] && exit 0
|
[ "${BITBUCKET_PR_DESTINATION_BRANCH}" = "$t" ] && exit 0
|
||||||
done
|
done
|
||||||
echo "BLOCKED: target must be one of: ${ALLOWED}"; exit 1
|
echo "BLOCKED: target must be one of: ${ALLOWED}"; exit 1
|
||||||
- parallel:
|
|
||||||
- step: *lint
|
|
||||||
- step: *typecheck
|
|
||||||
- step: *unit-tests
|
|
||||||
- step: *ai-code-review
|
- step: *ai-code-review
|
||||||
|
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
@@ -302,6 +300,9 @@ pipelines:
|
|||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
# Final promotion: staging to main. After this merges, the code is
|
# Final promotion: staging to main. After this merges, the code is
|
||||||
# ready for a production release via the custom release-prod pipeline.
|
# ready for a production release via the custom release-prod pipeline.
|
||||||
|
# Note: Code quality checks (lint, typecheck, unit-tests) run in the
|
||||||
|
# default pipeline on every push. This PR pipeline validates branch
|
||||||
|
# routing and performs AI code review only.
|
||||||
stg:
|
stg:
|
||||||
- step:
|
- step:
|
||||||
name: "Gate: stg → main"
|
name: "Gate: stg → main"
|
||||||
@@ -317,10 +318,6 @@ pipelines:
|
|||||||
[ "${BITBUCKET_PR_DESTINATION_BRANCH}" = "$t" ] && exit 0
|
[ "${BITBUCKET_PR_DESTINATION_BRANCH}" = "$t" ] && exit 0
|
||||||
done
|
done
|
||||||
echo "BLOCKED: target must be one of: ${ALLOWED}"; exit 1
|
echo "BLOCKED: target must be one of: ${ALLOWED}"; exit 1
|
||||||
- parallel:
|
|
||||||
- step: *lint
|
|
||||||
- step: *typecheck
|
|
||||||
- step: *unit-tests
|
|
||||||
- step: *ai-code-review
|
- step: *ai-code-review
|
||||||
|
|
||||||
|
|
||||||
@@ -441,6 +438,15 @@ pipelines:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
- export RELEASE_TAG="$(cat release_tag.txt)"
|
- export RELEASE_TAG="$(cat release_tag.txt)"
|
||||||
|
# Validate tag format before deployment — reject corrupted/empty tags.
|
||||||
|
# Regex: v followed by three version numbers (no leading zeros).
|
||||||
|
# Escaped dots: \. matches literal dots, not any character.
|
||||||
|
- |
|
||||||
|
if ! [[ "$RELEASE_TAG" =~ ^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$ ]]; then
|
||||||
|
echo "BLOCKED: invalid release tag format: $RELEASE_TAG"
|
||||||
|
echo "Expected format: v#.#.# (e.g., v1.2.3, no leading zeros)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
- echo "Deploying ${RELEASE_TAG}"
|
- echo "Deploying ${RELEASE_TAG}"
|
||||||
|
|
||||||
# DEPLOY_COMMAND is a repository variable configured in
|
# DEPLOY_COMMAND is a repository variable configured in
|
||||||
|
|||||||
Reference in New Issue
Block a user