Skip to content

TEST PR

TEST PR #232

# testing merge on the main branch after a pullrequest approval
name: Merge on Pull request
on:
pull_request_target:
branches: [ main ]
jobs:
# Firts authenticate user based on PR details
validate_request:
runs-on: ubuntu-latest
outputs:
is_valid: ${{ steps.validate.outputs.validation }}
changed_files: ${{ steps.get_changed_files.outputs.all_changed_files }}
output_data: ${{ steps.compile_output.outputs.output_data }}
steps:
# DEBUG ONLY
- name: dump info
run: |
echo ">>> Secret: ${{ secrets.FLUCAST_TOKEN }} "
echo ">>> Repo: ${{ github.repository }}"
echo ">>> SrcPath: $GITHUB_WORKSPACE"
echo ">>> Pull request number: ${{ github.event.pull_request.number }}"
echo ">>> Git hub actor: ${{ github.actor }}"
echo ">>> Branch name is $(echo ${{github.ref}} | sed 's/refs\/heads\///')"
echo ">>> Branch commit is ${{ github.event.pull_request.merge_commit_sha }}"
echo ">>> Branch head is ${{ github.event.pull_request.head.sha }}"
echo ">>> PR_URL is ${{ github.event.pull_request.html_url }}"
# Checkout the forecast repo
# ---------------------------
# - name: checkout repo
# uses: actions/checkout@v3
# with:
# token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout code
uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
# ref: "${{ github.event.pull_request.merge_commit_sha }}"
ref: ${{ github.event.pull_request.head.sha }}
# Checkout the python tools repo
# used to authenticate and validate the PR
# -------------------------------------------
- name: checkout python tools repo
uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
repository: 'Testing-Forecast-Actions/Testing-Tools'
ref: 'main'
path: tools
# Collect details about the pull request
# ----------------------------------------
- name: Collect PR details
id: collect_details
run: |
echo "gh_actor=${{ github.actor }}"
echo "pr_number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT
# Get changes from pull request
# --------------------------------
- name: Get changes
id: get_changed_files
uses: tj-actions/changed-files@v36
# DEBUG ONLY
- name: List all changed files
run: |
for file in ${{ steps.get_changed_files.outputs.all_changed_files }}; do
echo "$file was changed"
done
# Authenticate the pull_request
# -------------------------------
- name: Execute Authentication script
id: authenticate
env:
calling_actor: ${{ github.actor }}
changed_files: ${{ steps.get_changed_files.outputs.all_changed_files }}
# local_test_var: "MyLocalValue"
# calling_actor: ${{ steps.collect_details.outputs.gh_actor }}
# changed_files: ${{ steps.get_changed_files.outputs.all_changed_files }}
run: python ./tools/.github/scripts/request_authentication/authenticate_request.py
# DEBUG ONLY
- name: Trace execution
run: |
echo "authentication result: ${{ steps.authenticate.outputs.authentication }}"
# If authenticated proceed with validation
# -------------------------------------------
- name: Execute Validation script
id: validate
env:
changed_files: ${{ steps.get_changed_files.outputs.all_changed_files }}
run: |
if [[ ${{ steps.authenticate.outputs.authentication == 'true' }} ]]; then
python ./tools/.github/scripts/forecast_validation/validate.py
else
echo "validation=false" >> $GITHUB_OUTPUT
fi
- name: Prepare Job Output Data
id: compile_output
env:
changed_files: ${{ steps.get_changed_files.outputs.all_changed_files }}
run: |
print(">>> PREPARE OUTPUT")
import os
import json
env_file = os.getenv('GITHUB_OUTPUT')
to_validate = os.getenv("changed_files")
changed_files = to_validate.split(" ")
res_data = {}
res_data['models'] = {}
for elem in changed_files :
team_model = tuple(os.path.basename(os.path.split(elem)[0]).split('_'))
# add the team. It is only one
if team_model[0] not in res_data:
res_data['team'] = team_model[0]
if team_model[1] not in res_data['models'] :
res_data['models'][team_model[1]] = [elem]
else:
res_data['models'][team_model[1]].append(elem)
res_data_s = json.dumps(res_data)
print(f'::set-output name=output_data::{res_data_s}')
shell: python
# -------------------------------------------
# SUCCESS
# -------------------------------------------
on_successful_validation:
runs-on: ubuntu-latest
needs: validate_request
if: ${{ needs.validate_request.outputs.is_valid == 'true'}}
steps:
# DUMP INPUT
- name: Dump for Debug
run: |
echo ">>> SUCCESS - output data: ${{ needs.validate_request.outputs.output_data }}"
# Checkout the forecast repo
# ---------------------------
# - name: checkout repo
# uses: actions/checkout@v3
# with:
# token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout code
uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
ref: "${{ github.event.pull_request.merge_commit_sha }}"
# Checkout the python tools repo
# used to authenticate and validate the PR
# -------------------------------------------
- name: checkout python tools repo
uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
repository: 'Testing-Forecast-Actions/Testing-Tools'
ref: 'main'
path: tools
# Approve pull request
# ---------------------------
- name: Approve Pull Request
uses: juliangruber/[email protected]
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
number: ${{ github.event.pull_request.number }}
# Eventually comment on it
- name: Comment PR
uses: thollander/actions-comment-pull-request@v2
with:
message: |
All checks completed successfully ! :wave:
pr_number: ${{ github.event.pull_request.number }}
# Merge changes
# ---------------------------
- uses: de-vri-es/setup-git-credentials@v2
with:
credentials: ${{ secrets.WF_PR_CREDENTIALS }}
- name: Merge the pull request
id: merge_pr
run: |
echo ">>> USER: secrets.WF_PR_USER"
echo ">>> PAT: ${{ secrets.WF_PR_PAT }} "
export GIT_USER=${{secrets.WF_PR_USER}}
git config --global user.name $GIT_USER
git config --global user.email "[email protected]"
gh pr merge --auto --squash $PR_URL
echo "status=true" >> $GITHUB_OUTPUT
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.WF_PR_PAT }}
# Store changes
# -------------------------
- name: Store Changes
if: ${{ steps.merge_pr.outputs.status == 'true' }}
env:
data: ${{ needs.validate_request.outputs.output_data }}
run: |
echo ">>> Store changes to json"
python ./tools/.github/scripts/utils/store_changes.py
# # Activate client view
# # ---------------------------
# # WEBHOOK
# - name: Invoke deployment hook
# if: ${{ steps.merge_pr.outputs.status == 'true' }}
# #uses: distributhor/[email protected]
# env:
# webhook_url: ${{ secrets.WEB_HOOK_URL_DEV }}
# # webhook_url: ${{ secrets.WEBHOOK_URL }}
# # webhook_url: ${{ secrets.WEB_HOOK_URL_PRODUCTION }}
# webhook_secret: ${{ secrets.WEB_HOOK_SECRET }}
# #data: '{ "changes": ${{ toJSON(needs.validate_request.outputs.changed_files) }}, "actor" : ${{ toJSON(github.actor) }} }'
# data: ${{ needs.validate_request.outputs.output_data }}
# run: |
# echo ">>> Calling custom webhook"
# pip install requests
# echo ">>> Pip installed"
# python ./tools/.github/scripts/utils/workflow_webhook.py
# -------------------------------------------
# FAILED
# -------------------------------------------
on_validation_failed:
runs-on: ubuntu-latest
needs: validate_request
if: ${{ needs.validate_request.outputs.is_valid == 'false'}}
steps:
# DEBUG ONLY
- name: DEBUG - DUMP INFO
env:
changed-files: ${{ needs.validate_request.outputs.changes }}
run: |
echo ">>> FAILED JOB "
echo ">>> Changes: $changed-files"
echo ">>> Repo: ${{ github.repository }}"
echo ">>> SrcPath: $GITHUB_WORKSPACE"
echo ">>> Pull request number: ${{ github.event.pull_request.number }}"
echo ">>> Git hub actor: ${{ github.actor }}"
# Inform the user about what went wrong
- name: Comment PR
uses: thollander/actions-comment-pull-request@v2
with:
message: |
Something went wrong. PR is rejected
pr_number: ${{ github.event.pull_request.number }}