Updating metadata.yaml - Component: 'Dashboard', Execution ID: '05012… #35
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: Trigger Auto Merge | |
on: | |
push: | |
branches: | |
- metadata # Trigger only on the 'metadata' branch | |
paths: | |
- 'executions/**/test-report.html' # File path pattern for test-report.html | |
jobs: | |
setup: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.matrix.outputs.config }} | |
metadata_file: ${{ steps.metadata.outputs.metadata_file }} | |
trigger_automerge: ${{ steps.matrix.outputs.trigger_automerge }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
# Enable listing of files matching each filter. | |
# Paths to files will be available in `${FILTER_NAME}_files` output variable. | |
# Paths will be escaped and space-delimited. | |
# Output is usable as command-line argument list in Linux shell | |
list-files: shell | |
# Detect changes against the most recent commit on the same branch before the push | |
base: ${{ github.ref }} | |
# Only filters added or modified files. | |
filters: | | |
test_report: | |
- added|modified: 'executions/**/test-report.html' | |
- name: Print File Paths | |
if: ${{ steps.filter.outputs.test_report == 'true' }} | |
id: metadata | |
env: | |
TEST_REPORT_FILE: ${{ steps.filter.outputs.test_report_files }} | |
run: | | |
echo "metadata_file=${TEST_REPORT_FILE%/*}/metadata.yaml" | tee -a $GITHUB_OUTPUT | |
echo "Test Report File: ${{ env.TEST_REPORT_FILE }}" | |
- name: Generate Matrix Config | |
if: ${{ steps.filter.outputs.test_report == 'true' }} | |
id: matrix | |
run: | | |
test_result=$(yq -o json ${{ steps.metadata.outputs.metadata_file }} | jq -r '.metadata.test_result') | |
test_result=$(echo "$test_result" | tr '[:upper:]' '[:lower:]') | |
echo "test_result=$test_result" | |
if [ "$test_result" == "pass" ]; then | |
echo "Tests have passed successfully. Auto-merge will now be triggered!" | |
echo "trigger_automerge=yes" >> $GITHUB_OUTPUT | |
else | |
echo "Tests have failed. Auto-merge will be skipped!" | |
echo "trigger_automerge=no" >> $GITHUB_OUTPUT | |
fi | |
config=$(yq -o json ${{ steps.metadata.outputs.metadata_file }} | jq -c '.metadata.git') | |
echo "${config}" | jq '.' | |
length=$(echo $config | jq '. | length') | |
echo "$length repo(s) will be synced by this workflow" | |
if [[ $length -eq 0 ]] | |
then | |
echo "No valid repos available for auto-merge." | |
exit 1 | |
fi | |
echo "config=$config" >> $GITHUB_OUTPUT | |
sync: | |
name: sync (${{ matrix.mapping.name }}) | |
needs: [setup] | |
if: ${{ needs.setup.outputs.trigger_automerge == 'yes' }} | |
runs-on: ubuntu-latest | |
outputs: | |
metadata_file: ${{ needs.setup.outputs.metadata_file }} | |
strategy: | |
fail-fast: false | |
matrix: | |
mapping: ${{ fromJSON(needs.setup.outputs.matrix) }} | |
steps: | |
- name: Print matrix config | |
run: | | |
echo ${{ matrix.mapping.ignore_files }} | |
echo ${{ join(matrix.mapping.ignore_files, ',') }} | |
echo ${{ needs.setup.outputs.matrix }} | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
ref: main | |
- uses: actions/create-github-app-token@v1 | |
id: app-token | |
with: | |
app-id: ${{ secrets.APP_ID }} | |
private-key: ${{ secrets.PRIVATE_KEY }} | |
owner: ${{ github.repository_owner }} | |
- name: Get GitHub App User ID | |
id: get-user-id | |
run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT" | |
env: | |
GH_TOKEN: ${{ steps.app-token.outputs.token }} | |
- name: configure git committer string | |
run: |- | |
git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]' | |
git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>' | |
- name: Sync Repository | |
run: ./scripts/sync-git-repos.sh | |
env: | |
UPSTREAM_REPO: "${{ matrix.mapping.src.url }}" | |
UPSTREAM_BRANCH: "${{ matrix.mapping.src.branch }}" | |
DOWNSTREAM_REPO: "${{ matrix.mapping.dest.url }}" | |
DOWNSTREAM_BRANCH: "${{ matrix.mapping.dest.branch }}" | |
IGNORE_FILES: "${{ join(matrix.mapping.ignore_files, ',') }}" | |
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }} | |
MERGE_ARGS: "--no-edit" | |
PUSH_ARGS: "" | |
FETCH_ARGS: "" | |
update-metadata: | |
needs: [sync] | |
if: always() # This ensures the job runs regardless of the sync job's success or failure. | |
runs-on: ubuntu-latest | |
env: | |
METADATA_FILE: ${{ needs.sync.outputs.metadata_file }} | |
steps: | |
- uses: actions/create-github-app-token@v1 | |
id: app-token | |
with: | |
app-id: ${{ secrets.APP_ID }} | |
private-key: ${{ secrets.PRIVATE_KEY }} | |
owner: red-hat-data-services | |
repositories: Gated-Auto-Merger | |
- name: Get GitHub App User ID | |
id: get-user-id | |
run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT" | |
env: | |
GH_TOKEN: ${{ steps.app-token.outputs.token }} | |
- name: configure git committer string | |
run: |- | |
git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]' | |
git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>' | |
- uses: actions/checkout@v3 | |
with: | |
repository: red-hat-data-services/Gated-Auto-Merger | |
token: ${{ steps.app-token.outputs.token }} | |
ref: metadata | |
path: gam | |
- name: Update Metadata | |
working-directory: gam | |
run: | | |
STATUS=${{ needs.sync.result }} | |
WORKFLOW_RUN_URL=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID} | |
yq e ".metadata.status = \"$STATUS\" | .metadata.auto_merge_url = \"$WORKFLOW_RUN_URL\"" -i ${{ env.METADATA_FILE }} | |
- name: Commit and push changes to metadata branch | |
working-directory: gam | |
run: | | |
COMPONENT=$(cat ${{ env.METADATA_FILE }} | yq '.config.name') | |
GAM_EXECUTION_ID=$(cat ${{ env.METADATA_FILE }} | yq '.metadata.execution_id') | |
git status | |
git add . | |
git commit -m "Updating metadata.yaml - Component: '${COMPONENT}', Execution ID: '${GAM_EXECUTION_ID}'" | |
git push origin metadata |