test #5
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Pre-Merge Test | |
on: | |
issue_comment: | |
types: | |
- created | |
pull_request: | |
branches: | |
- '**' | |
jobs: | |
pre-merge-test: | |
if: startsWith(github.event.comment.body, '/pre-merge-test') | |
runs-on: ubuntu-latest | |
steps: | |
# Step 1: Debugging - Echo VALID_USERS and BUILDKITE_TOKEN | |
- name: Debug Secrets | |
env: | |
VALID_USERS: ${{ secrets.VALID_USERS }} | |
BUILDKITE_TOKEN: ${{ secrets.BUILDKITE_TOKEN }} | |
run: | | |
echo "Debugging Secrets:" | |
echo "VALID_USERS starts with: ${VALID_USERS:0:5}..." # Print first 5 characters | |
echo "VALID_USERS length: ${#VALID_USERS}" | |
echo "BUILDKITE_TOKEN starts with: ${BUILDKITE_TOKEN:0:5}..." # Print first 5 characters | |
echo "BUILDKITE_TOKEN length: ${#BUILDKITE_TOKEN}" | |
# Step 2: Validate User and Comment | |
- name: Validate User and Comment | |
id: validate_user | |
env: | |
VALID_USERS: ${{ secrets.VALID_USERS }} | |
run: | | |
IFS=',' read -ra VALID_USERS_ARRAY <<< "$VALID_USERS" | |
COMMENT_BODY="${{ github.event.comment.body }}" | |
COMMENT_USER="${{ github.event.sender.login }}" | |
ACTION="${{ github.event.action }}" | |
echo "Valid users: ${VALID_USERS_ARRAY[@]}" | |
echo "Comment user: $COMMENT_USER" | |
echo "Action: $ACTION" | |
if [[ "${ACTION}" != "created" ]]; then | |
echo "Invalid action: ${ACTION}" | |
echo "valid=false" >> $GITHUB_ENV | |
exit 0 | |
fi | |
USER_IS_VALID=false | |
for VALID_USER in "${VALID_USERS_ARRAY[@]}"; do | |
if [[ "$VALID_USER" == "$COMMENT_USER" ]]; then | |
USER_IS_VALID=true | |
break | |
fi | |
done | |
if [[ "$USER_IS_VALID" == "false" ]]; then | |
echo "Invalid user: ${COMMENT_USER}" | |
echo "valid=false" >> $GITHUB_ENV | |
exit 0 | |
fi | |
if [[ ! "${COMMENT_BODY}" =~ ^/pre-merge-test ]]; then | |
echo "Invalid comment format: ${COMMENT_BODY}" | |
echo "valid=false" >> $GITHUB_ENV | |
exit 0 | |
fi | |
echo "valid=true" >> $GITHUB_ENV | |
# Step 3: Stop the job if the user/comment is invalid | |
- name: Exit if Invalid User/Comment | |
if: env.valid == 'false' | |
run: echo "Exiting because the user/comment is invalid." | |
# Step 4: Parse Environment Variables | |
- name: Parse Environment Variables | |
if: env.valid == 'true' | |
id: parse_envs | |
run: | | |
COMMENT_BODY="${{ github.event.comment.body }}" | |
ENV_ARGS=$(echo "${COMMENT_BODY}" | sed -E 's|/pre-merge-test ?||') | |
ALLOWED_ENVS=("aws" "azure" "gcp") | |
FINAL_ENVS=() | |
if [[ -z "${ENV_ARGS}" ]]; then | |
FINAL_ENVS+=("aws") | |
else | |
IFS=',' read -ra ENV_LIST <<< "${ENV_ARGS}" | |
for ENV in "${ENV_LIST[@]}"; do | |
ENV=$(echo "$ENV" | xargs) | |
if [[ " ${ALLOWED_ENVS[@]} " =~ " ${ENV} " ]]; then | |
FINAL_ENVS+=("$ENV") | |
fi | |
done | |
fi | |
if [[ ${#FINAL_ENVS[@]} -eq 0 ]]; then | |
FINAL_ENVS+=("aws") | |
fi | |
ENV_JSON="{" | |
for ENV in "${FINAL_ENVS[@]}"; do | |
ENV_JSON+="\"$ENV\":\"1\"," | |
done | |
ENV_JSON="${ENV_JSON%,}}" | |
echo "Parsed environments: ${ENV_JSON}" | |
echo "envs=${ENV_JSON}" >> $GITHUB_ENV | |
# Step 5: Trigger Buildkite Pipeline | |
- name: Trigger Buildkite Pipeline | |
if: env.valid == 'true' | |
env: | |
BUILDKITE_TOKEN: ${{ secrets.BUILDKITE_TOKEN }} | |
run: | | |
PR_API_URL="${{ github.event.issue.pull_request.url }}" | |
AUTH_HEADER="Authorization: Bearer $BUILDKITE_TOKEN" | |
PR_DATA=$(curl -s -H "$AUTH_HEADER" "$PR_API_URL") | |
HEAD=$(echo "$PR_DATA" | jq -r '.head.ref') | |
COMMIT=$(echo "$PR_DATA" | jq -r '.head.sha') | |
PULL_REQUEST_REPO=$(echo "$PR_DATA" | jq -r '.head.repo.html_url') | |
BASE_BRANCH=$(echo "$PR_DATA" | jq -r '.base.ref') | |
PR_NUMBER=$(echo "$PR_DATA" | jq -r '.number') | |
TITLE=$(echo "$PR_DATA" | jq -r '.title') | |
BUILDKITE_PAYLOAD=$(jq -n \ | |
--arg commit "$COMMIT" \ | |
--arg branch "$HEAD" \ | |
--arg message "PR #$PR_NUMBER: $TITLE triggered by: ${{ github.event.sender.login }}" \ | |
--arg pull_request_repository "$PULL_REQUEST_REPO" \ | |
--argjson envs "$envs" \ | |
'{ | |
commit: $commit, | |
branch: $branch, | |
message: $message, | |
pull_request_repository: $pull_request_repository, | |
ignore_pipeline_branch_filters: true, | |
env: $envs | |
}') | |
BUILDKITE_URL="https://api.buildkite.com/v2/organizations/skypilot-1/pipelines/test-smoke-tests-required-before-merging/builds" | |
curl -X POST -H "$AUTH_HEADER" -H "Content-Type: application/json" -d "$BUILDKITE_PAYLOAD" "$BUILDKITE_URL" |