Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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