Skip to content

Commit

Permalink
Merge pull request sclorg#425 from phracek/support_github_matrix
Browse files Browse the repository at this point in the history
Support GitHub matrix
  • Loading branch information
zmiklank authored Nov 23, 2021
2 parents 279e73f + cc4d1f5 commit 60f95e9
Show file tree
Hide file tree
Showing 8 changed files with 149 additions and 1,106 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: CentOS7-tests@TF
name: container-tests at Testing Farm

on:
issue_comment:
Expand All @@ -7,15 +7,40 @@ on:
jobs:
build:
# This job only runs for '[test]' pull request comments by owner, member
name: Schedule test on Testing Farm service for CentOS7
name: Container tests on Testing Farm service
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
include:
- tmt_plan: "fedora"
os_test: "fedora"
context: "Fedora"
compose: "CentOS-7"
tmt_url: "http://artifacts.dev.testing-farm.io/"
tmt_repo: "https://github.com/sclorg/sclorg-testing-farm"
- tmt_plan: "centos7"
os_test: "centos7"
context: "CentOS7"
compose: "CentOS-7"
tmt_url: "http://artifacts.dev.testing-farm.io/"
tmt_repo: "https://github.com/sclorg/sclorg-testing-farm"
- tmt_plan: "rhel7-docker"
os_test: "rhel7"
context: "RHEL7"
compose: "RHEL-7.9-Released"
tmt_url: "http://artifacts.osci.redhat.com/testing-farm/"
tmt_repo: "https://gitlab.cee.redhat.com/platform-eng-core-services/sclorg-tmt-plans"
- tmt_plan: "rhel8-docker"
os_test: "rhel8"
context: "RHEL8"
compose: "RHEL-8.3.1-Released"
tmt_url: "http://artifacts.osci.redhat.com/testing-farm/"
tmt_repo: "https://gitlab.cee.redhat.com/platform-eng-core-services/sclorg-tmt-plans"
if: |
github.event.issue.pull_request
&& (contains(github.event.comment.body, '[test]') || contains(github.event.comment.body, '[test-all]'))
&& contains(fromJson('["OWNER", "MEMBER"]'), github.event.comment.author_association)
outputs:
REQ_ID: ${{steps.sched_test.outputs.REQ_ID}}
SHA: ${{steps.sha.outputs.SHA}}
steps:
- name: Get pull request number
id: pr_nr
Expand All @@ -28,106 +53,97 @@ jobs:
with:
ref: "refs/pull/${{ steps.pr_nr.outputs.PR_NR }}/head"

- name: Get sha
id: sha
- name: SHA value
id: sha_value
run: |
# Store SHA into outputs
echo "::set-output name=SHA::$(git rev-parse HEAD)"
- name: Create status check to pending
id: pending
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Create a JSON file for Testing Farm in order to schedule a CI testing job
# Create a JSON data structure for GitHub API to display the test status in the PR
cat << EOF > pending.json
{
"sha": "${{steps.sha.outputs.SHA}}",
"sha": "${{ steps.sha_value.outputs.SHA }}",
"state": "pending",
"context": "Testing Farm - CentOS7",
"target_url": "http://artifacts.dev.testing-farm.io/${{ steps.sched_test.outputs.req_id }}/pipeline.log"
"context": "Testing Farm - ${{ matrix.context }}",
"target_url": "${{ matrix.tmt_url }}"
}
EOF
echo "https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/${{steps.sha.outputs.SHA}}"
echo "https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/${{ steps.sha_value.outputs.SHA }}"
# GITHUB_TOKEN is used for updating pull request status.
# It is provided by GitHub https://docs.github.com/en/actions/reference/authentication-in-a-workflow#about-the-github_token-secret
curl -X POST -H "Authorization: Bearer $GITHUB_TOKEN" -H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/${{steps.sha.outputs.SHA}} \
https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/${{ steps.sha_value.outputs.SHA }} \
--data @pending.json
echo "::set-output name=GITHUB_REPOSITORY::$GITHUB_REPOSITORY"
- name: Schedule a test on Testing Farm forn CentOS7
- name: Schedule a test on Testing Farm
id: sched_test
run: |
# Update ubuntu-20.04 in order to install curl and jq
apt update && apt -y install curl jq
sudo apt update && sudo apt -y install curl jq
if [ "${{ matrix.tmt_plan }}" == "fedora" ] || [ "${{ matrix.tmt_plan }}" == "centos7" ]; then
api_key="${{ secrets.TF_PUBLIC_API_KEY }}"
branch_name="main"
else
api_key="${{ secrets.TF_INTERNAL_API_KEY }}"
branch_name="master"
fi
cat << EOF > request.json
{
"api_key": "${{ secrets.TF_PUBLIC_API_KEY }}",
"api_key": "$api_key",
"test": {"fmf": {
"url": "https://github.com/sclorg/sclorg-testing-farm",
"ref": "main",
"name": "fedora"
"url": "${{ matrix.tmt_repo }}",
"ref": "$branch_name",
"name": "${{ matrix.tmt_plan }}"
}},
"environments": [{
"arch": "x86_64",
"os": {"compose": "CentOS-7"},
"os": {"compose": "${{ matrix.compose }}"},
"variables": {
"REPO_URL": "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY",
"REPO_NAME": "$GITHUB_REPOSITORY",
"PR_NUMBER": "${{ steps.pr_nr.outputs.PR_NR }}",
"OS": "centos7",
"OS": "${{ matrix.os_test }}",
"TEST_NAME": "test"
}
}]
}
EOF
curl ${{ secrets.TF_ENDPOINT }}/requests --data @request.json --header "Content-Type: application/json" --output response.json
cat response.json
# Store REQ_ID into outputs for later on usage
echo "::set-output name=REQ_ID::$(jq -r .id response.json)"
running:
needs: build
name: Check running tests on Testing Farm service
runs-on: ubuntu-20.04
outputs:
REQ_ID: ${{steps.req_sha.outputs.REQ_ID}}
SHA: ${{steps.req_sha.outputs.SHA}}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Check if REQ_ID and SHA exists
id: req_sha
run: |
# Update ubuntu-20.04 in order to install curl and jq
# each job is separate machine
apt update && apt -y install curl jq
# Propagate REQ_ID and SHA into the finish section
echo "::set-output name=REQ_ID::${{needs.build.outputs.REQ_ID}}"
echo "::set-output name=SHA::${{needs.build.outputs.SHA}}"
req_id=$(jq -r .id response.json)
echo "REQ_ID=$req_id" >> $GITHUB_ENV
- name: Switch to running state of Testing Farm request
id: running
run: |
# Create running.json file for query, whether job is finished or not.
cat << EOF > running.json
{
"sha": "${{needs.build.outputs.SHA}}",
"sha": "${{ steps.sha_value.outputs.SHA }}",
"state": "pending",
"context": "Testing Farm - CentOS7",
"context": "Testing Farm - ${{ matrix.context }}",
"description": "Build started",
"target_url": "http://artifacts.dev.testing-farm.io/${{ needs.build.outputs.REQ_ID }}/"
"target_url": "${{ matrix.tmt_url }}/${{ env.REQ_ID }}"
}
EOF
# Update GitHub status description to 'Build started'
curl -X POST -H "Authorization: Bearer ${{secrets.GITHUB_TOKEN}}" -H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/${{needs.build.outputs.SHA}} \
curl -X POST -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/${{ steps.sha_value.outputs.SHA }} \
--data @running.json
- name: Check test is still running
id: still_running
run: |
CMD=${{ secrets.TF_ENDPOINT }}/requests/${{needs.build.outputs.REQ_ID}}
CMD=${{ secrets.TF_ENDPOINT }}/requests/${{ env.REQ_ID }}
curl $CMD > job.json
cat job.json
state=$(jq -r .state job.json)
# Wait till job is not finished. As soon as state is complete or failure then go to the finish action
while [ "$state" == "running" ] || [ "$state" == "new" ] || [ "$state" == "pending" ] || [ "$state" == "queued" ]; do
Expand All @@ -137,24 +153,10 @@ jobs:
state=$(jq -r .state job.json)
done
finish:
needs: running
name: Tests are finished - switching to proper state
runs-on: ubuntu-20.04
steps:
- name: Check if REQ_ID exists
run: echo "${{ needs.running.outputs.REQ_ID }}"

- name: Check if SHA exists
run: echo "${{ needs.running.outputs.SHA }}"

- name: Get final state of Testing Farm request
id: final_state
run: |
# Update ubuntu-20.04 in order to install curl and jq
# each job is separate machine
apt update && apt -y install curl jq
curl ${{ secrets.TF_ENDPOINT }}/requests/${{needs.running.outputs.REQ_ID}} > job.json
curl ${{ secrets.TF_ENDPOINT }}/requests/${{ env.REQ_ID }} > job.json
cat job.json
state=$(jq -r .state job.json)
result=$(jq -r .result.overall job.json)
Expand All @@ -179,15 +181,15 @@ jobs:
run: |
cat << EOF > final.json
{
"sha": "${{needs.running.outputs.SHA}}",
"state": "${{steps.final_state.outputs.FINAL_STATE}}",
"context": "Testing Farm - CentOS7",
"description": "Build finished${{steps.final_state.outputs.INFRA_STATE}}",
"target_url": "http://artifacts.dev.testing-farm.io/${{ needs.running.outputs.REQ_ID }}/"
"sha": "${{ steps.sha_value.outputs.SHA }}",
"state": "${{ steps.final_state.outputs.FINAL_STATE }}",
"context": "Testing Farm - ${{ matrix.context }}",
"description": "Build finished${{ steps.final_state.outputs.INFRA_STATE }}",
"target_url": "${{ matrix.tmt_url }}/${{ env.REQ_ID }}"
}
EOF
cat final.json
# Switch Github status to proper state
curl -X POST -H "Authorization: Bearer ${{secrets.GITHUB_TOKEN}}" -H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/${{needs.running.outputs.SHA}} \
curl -X POST -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/${{ steps.sha_value.outputs.SHA }} \
--data @final.json
Loading

0 comments on commit 60f95e9

Please sign in to comment.