Skip to content

Updating metadata.yaml - Component: 'Dashboard', Execution ID: '05012… #35

Updating metadata.yaml - Component: 'Dashboard', Execution ID: '05012…

Updating metadata.yaml - Component: 'Dashboard', Execution ID: '05012… #35

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