From 725bcdfc99ca1b911ff9b37bc083ed75da62f265 Mon Sep 17 00:00:00 2001 From: Youjung Kim <126618609+ykim-1@users.noreply.github.com> Date: Mon, 12 Aug 2024 10:23:29 -0700 Subject: [PATCH] test: Add option to run on PR in e2e integration workflow (#633) --- ...e2e-suite-pr.yml => e2e-suite-windows.yml} | 93 ------------------- .github/workflows/e2e-suite.yml | 83 ++++++++++++++++- 2 files changed, 79 insertions(+), 97 deletions(-) rename .github/workflows/{e2e-suite-pr.yml => e2e-suite-windows.yml} (52%) diff --git a/.github/workflows/e2e-suite-pr.yml b/.github/workflows/e2e-suite-windows.yml similarity index 52% rename from .github/workflows/e2e-suite-pr.yml rename to .github/workflows/e2e-suite-windows.yml index 74c5a4390..108c757d8 100644 --- a/.github/workflows/e2e-suite-pr.yml +++ b/.github/workflows/e2e-suite-windows.yml @@ -15,99 +15,6 @@ on: 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@v4 - with: - ref: ${{ inputs.sha }} - - - name: Get the hash value of the latest commit from the PR branch - uses: octokit/graphql-action@v2.x - 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: Setup Python - uses: actions/setup-python@v4 - with: - python-version: '3.x' - - - name: Install Python deps - run: pip install .[dev,obj] - - - name: Install the CLI - run: make install - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - run: make INTEGRATION_TEST_PATH="${{ inputs.test_path }}" testint - if: ${{ steps.validate-tests.outputs.match == '' }} - env: - LINODE_CLI_TOKEN: ${{ secrets.LINODE_TOKEN }} - - - 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; - integration-fork-windows: runs-on: windows-latest if: diff --git a/.github/workflows/e2e-suite.yml b/.github/workflows/e2e-suite.yml index 6f4074d13..6a2b39b93 100644 --- a/.github/workflows/e2e-suite.yml +++ b/.github/workflows/e2e-suite.yml @@ -1,4 +1,5 @@ name: Integration Tests + on: workflow_dispatch: inputs: @@ -6,20 +7,37 @@ on: description: 'Use minimal test account' required: false default: 'false' + test_path: + description: "The path from 'test/integration' to the target to be tested, e.g. 'cli'" + required: false sha: description: 'The hash value of the commit.' required: false default: '' + pull_request_number: + description: 'The number of the PR. Ensure sha value is provided' + required: false push: branches: - main - dev + jobs: integration-tests: - name: Run integration tests + name: Run integration tests on Ubuntu runs-on: ubuntu-latest + if: github.event_name == 'workflow_dispatch' && inputs.sha != '' || github.event_name == 'push' || github.event_name == 'pull_request' steps: - - name: Clone Repository with SHA + - name: Validate Test Path + uses: actions-ecosystem/action-regex-match@v2 + id: validate-tests + if: ${{ inputs.test_path != '' }} + with: + text: ${{ inputs.test_path }} + regex: '[^a-z0-9-:.\/_]' # Tests validation + flags: gi + + - name: Checkout Repository with SHA if: ${{ inputs.sha != '' }} uses: actions/checkout@v4 with: @@ -27,13 +45,38 @@ jobs: submodules: 'recursive' ref: ${{ inputs.sha }} - - name: Clone Repository without SHA + - name: Checkout Repository without SHA if: ${{ inputs.sha == '' }} uses: actions/checkout@v4 with: fetch-depth: 0 submodules: 'recursive' + - name: Get the hash value of the latest commit from the PR branch + uses: octokit/graphql-action@v2.x + 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 @@ -70,6 +113,9 @@ jobs: timestamp=$(date +'%Y%m%d%H%M') report_filename="${timestamp}_cli_test_report.xml" make testint TEST_ARGS="--junitxml=${report_filename}" + if: ${{ steps.validate-tests.outputs.match == '' || inputs.test_path == '' }} + env: + LINODE_CLI_TOKEN: ${{ env.LINODE_CLI_TOKEN }} - name: Apply Calico Rules to LKE if: always() @@ -91,4 +137,33 @@ jobs: python3 e2e_scripts/tod_scripts/xml_to_obj_storage/scripts/xml_to_obj.py "${filename}" env: LINODE_CLI_OBJ_ACCESS_KEY: ${{ secrets.LINODE_CLI_OBJ_ACCESS_KEY }} - LINODE_CLI_OBJ_SECRET_KEY: ${{ secrets.LINODE_CLI_OBJ_SECRET_KEY }} \ No newline at end of file + LINODE_CLI_OBJ_SECRET_KEY: ${{ secrets.LINODE_CLI_OBJ_SECRET_KEY }} + + - name: Update PR Check Run + 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;