Skip to content

PR E2E Tests

PR E2E Tests #7

Workflow file for this run

on:
pull_request:
workflow_dispatch:
inputs:
test_path:
description: 'Enter specific test path. E.g. linode_client/test_linode_client.py, models/test_account.py'
required: false
sha:
description: 'The hash value of the commit.'
required: true
pull_request_number:
description: 'The number of the PR.'
required: false
name: PR E2E Tests
jobs:
integration-fork-ubuntu:
runs-on: ubuntu-latest
if:
github.event_name == 'workflow_dispatch' && inputs.sha != ''
steps:
- uses: actions-ecosystem/action-regex-match@v2
id: validate-tests
with:
text: ${{ inputs.test_path }}
regex: '[^a-z0-9-:.\/_]' # Tests validation
flags: gi
# Check out merge commit
- name: Checkout PR
uses: actions/checkout@v3
with:
ref: ${{ inputs.sha }}
- name: Get the hash value of the latest commit from the PR branch
uses: octokit/[email protected]
id: commit-hash
if: ${{ inputs.pull_request_number != '' }}
with:
query: |
query PRHeadCommitHash($owner: String!, $repo: String!, $pr_num: Int!) {
repository(owner:$owner, name:$repo) {
pullRequest(number: $pr_num) {
headRef {
target {
... on Commit {
oid
}
}
}
}
}
}
owner: ${{ github.event.repository.owner.login }}
repo: ${{ github.event.repository.name }}
pr_num: ${{ fromJSON(inputs.pull_request_number) }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Update system packages
run: sudo apt-get update -y
- name: Install system deps
run: sudo apt-get install -y build-essential
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install Python deps
run: pip install -r requirements.txt -r requirements-dev.txt wheel boto3
- name: Install Python SDK
run: make install
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Run Integration tests
run: |
timestamp=$(date +'%Y%m%d%H%M')
report_filename="${timestamp}_sdk_test_report.xml"
status=0
if ! python3 -m pytest test/integration/${INTEGRATION_TEST_PATH} --junitxml="${report_filename}"; then
echo "Tests failed, but attempting to upload results anyway"
fi
env:
LINODE_TOKEN: ${{ secrets.LINODE_TOKEN }}
- name: Set release version env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Add additional information to XML report
run: |
filename=$(ls | grep -E '^[0-9]{12}_sdk_test_report\.xml$')
python test/script/add_to_xml_test_report.py \
--branch_name "${{ env.RELEASE_VERSION }}" \
--gha_run_id "$GITHUB_RUN_ID" \
--gha_run_number "$GITHUB_RUN_NUMBER" \
--xmlfile "${filename}"
- name: Upload test results
run: |
filename=$(ls | grep -E '^[0-9]{12}_sdk_test_report\.xml$')
python3 test/script/test_report_upload_script.py "${report_filename}"
env:
LINODE_CLI_TOKEN: ${{ secrets.SHARED_DX_TOKEN }}
LINODE_CLI_OBJ_ACCESS_KEY: ${{ secrets.LINODE_CLI_OBJ_ACCESS_KEY }}
LINODE_CLI_OBJ_SECRET_KEY: ${{ secrets.LINODE_CLI_OBJ_SECRET_KEY }}
- uses: actions/github-script@v6
id: update-check-run
if: ${{ inputs.pull_request_number != '' && fromJson(steps.commit-hash.outputs.data).repository.pullRequest.headRef.target.oid == inputs.sha }}
env:
number: ${{ inputs.pull_request_number }}
job: ${{ github.job }}
conclusion: ${{ job.status }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const { data: pull } = await github.rest.pulls.get({
...context.repo,
pull_number: process.env.number
});
const ref = pull.head.sha;
const { data: checks } = await github.rest.checks.listForRef({
...context.repo,
ref
});
const check = checks.check_runs.filter(c => c.name === process.env.job);
const { data: result } = await github.rest.checks.update({
...context.repo,
check_run_id: check[0].id,
status: 'completed',
conclusion: process.env.conclusion
});
return result;