Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(workflows):[#828] add new cucumber workflow with integration to… #850

Merged
merged 5 commits into from
Jul 26, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
62 changes: 62 additions & 0 deletions .github/workflows/cucumber-integration-test-INT-association.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: IRS Association INT Cucumber Integration test execution

on:
workflow_dispatch: # Trigger manually

# Cancel previous Test executions if a new one is triggered.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:

check-config:
runs-on: ubuntu-latest
steps:
- name: Check if INT_REGULAR_USER_API_KEY is defined
run: |
if [[ -z "${{ secrets.INT_REGULAR_USER_API_KEY }}" ]]; then
echo "Error: Missing secret: Please configure INT_REGULAR_USER_API_KEY."
exit 1
fi
- name: Check if INT_ADMIN_USER_API_KEY is defined
run: |
if [[ -z "${{ secrets.INT_ADMIN_USER_API_KEY }}" ]]; then
echo "Error: Missing secret: Please configure INT_ADMIN_USER_API_KEY."
exit 1
fi
- name: Check if IRS_CUCUMBER_PUBLISH_TOKEN is defined
run: |
if [[ -z "${{ secrets.IRS_CUCUMBER_PUBLISH_TOKEN }}" ]]; then
echo "Error: Missing secret: Please configure IRS_CUCUMBER_PUBLISH_TOKEN."
exit 1
fi
shell: bash
- name: Check if is defined jiraUser is defined
run: |
if [[ -z "${{ secrets.IRS_XRAY_JIRA_USER }}" ]]; then
echo "Error: Missing secret: Please configure IRS_XRAY_JIRA_USER."
exit 1
fi
- name: Check if is defined jiraUser is defined
run: |
if [[ -z "${{ secrets.IRS_XRAY_JIRA_SECRET }}" ]]; then
echo "Error: Missing secret: Please configure IRS_XRAY_JIRA_SECRET."
exit 1
fi

trigger-integration-test:
needs: check-config
uses: ./.github/workflows/cucumber-integration-test-xray.yaml
secrets:
# TODO set secrets in GH
regularUserApiKey: ${{ secrets.INT_REGULAR_USER_API_KEY }}
adminUserApiKey: ${{ secrets.INT_ADMIN_USER_API_KEY }}
cucumberPublishToken: ${{ secrets.IRS_CUCUMBER_PUBLISH_TOKEN }}
jiraUser: ${{ secrets.jiraUser }}
jiraPassword: ${{ secrets.jiraPassword }}
with:
executionFilter: "!Ignore & !INACTIVE & INTEGRATION_TEST & INT"
# JIRA filter 10001: project = TRI AND type = Test AND "Test Type" = Cucumber TODO set correct filter description
exportFilter: 10001

140 changes: 140 additions & 0 deletions .github/workflows/cucumber-integration-test-xray.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
name: IRS Cucumber Integration Test execution with Xray

on:
workflow_call: # Trigger by another workflow
secrets:
regularUserApiKey:
required: true
adminUserApiKey:
required: true
cucumberPublishToken:
required: true
jiraUser:
required: true
jiraPassword:
required: true
inputs:
executionFilter:
required: true
type: string
exportFilter:
required: true
type: string

jobs:

build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'

- name: Cache maven packages
uses: actions/cache@v4
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2

- name: Download Feature Files
id: download
env:
JIRA_USERNAME: ${{ secrets.jiraUser }}
JIRA_PASSWORD: ${{ secrets.jiraPassword }}
EXPORT_FILTER: ${{ inputs.exportFilter }}
# Downloads all feature files of cucumber tests inside TRI project
run: |
token=$(curl -H "Content-Type: application/json" -X POST \
--data "{ \"client_id\": \"$JIRA_USERNAME\",\"client_secret\": \"$JIRA_PASSWORD\" }" \
https://xray.cloud.getxray.app/api/v2/authenticate | tr -d '"')

export HTTP_RESULT=$(curl -s --show-error -w "%{http_code}" --header "Authorization: Bearer $token" \
"https://xray.cloud.getxray.app/api/v2/export/cucumber?filter=$EXPORT_FILTER&fz=true" -o features.zip)

[[ $HTTP_RESULT == 200 || $HTTP_RESULT == 400 ]]
echo "::set-output name=http_response::$HTTP_RESULT"

- name: Build with Maven
if: ${{ steps.download.outputs.http_response == '200' }}
env:
KEYCLOAK_HOST: ${{ secrets.keycloakTokenUrl }}
KEYCLOAK_CLIENT_ID: ${{ secrets.clientId }}
KEYCLOAK_CLIENT_SECRET: ${{ secrets.clientSecret }}
ISSUE_FILTER: ${{ inputs.executionFilter }}
run: |
unzip -o features.zip -d irs-cucumber-tests/src/test/resources/org/eclipse/tractusx/irs/cucumber/features
mvn --batch-mode clean install -pl irs-cucumber-tests,irs-models -D"cucumber.filter.tags"="$ISSUE_FILTER"

- name: Submit results to Xray
if: ${{ always() && steps.download.outputs.http_response == '200' }}
env:
JIRA_USERNAME: ${{ secrets.jiraUser }}
JIRA_PASSWORD: ${{ secrets.jiraPassword }}
run: |
token=$(curl -H "Content-Type: application/json" -X POST \
--data "{ \"client_id\": \"$JIRA_USERNAME\",\"client_secret\": \"$JIRA_PASSWORD\" }" \
https://xray.cloud.getxray.app/api/v2/authenticate | tr -d '"')

curl --request POST \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $token" \
--data-binary '@irs-cucumber-tests/target/report.json' \
"https://xray.cloud.getxray.app/api/v2/import/execution/cucumber"

- name: Run Tests with Maven
env:
REGULAR_USER_API_KEY: ${{ secrets.regularUserApiKey }}
ADMIN_USER_API_KEY: ${{ secrets.adminUserApiKey }}
ISSUE_FILTER: ${{ inputs.executionFilter }}
CUCUMBER_PUBLISH_TOKEN: ${{ secrets.cucumberPublishToken }}
run: |
# workaround replacement since injecting the token via environment variable does not work
sed -i "s/CUCUMBER_TOKEN_IRS_PLACEHOLDER/${CUCUMBER_PUBLISH_TOKEN}/g" irs-cucumber-tests/src/test/java/org/eclipse/tractusx/irs/cucumber/RunCucumberTest.java

mvn clean verify -P cucumber -Dgroups="$ISSUE_FILTER" -pl irs-cucumber-tests -am --batch-mode 2> irs-cucumber-tests/report-banner.txt

- name: Publish Cucumber Results
uses: EnricoMi/[email protected]

Check notice

Code scanning / KICS

Unpinned Actions Full Length Commit SHA Note

Action is not pinned to a full length commit SHA.
if: always()
with:
files: |
irs-cucumber-tests/target/cucumber-junit-report.xml

- name: Get Cucumber Report
if: always()
id: get-cucumber-report
run: |
grep -E "^│.*│$" irs-cucumber-tests/report-banner.txt > irs-cucumber-tests/cucumber-report.txt
sed -i 's/│//g' irs-cucumber-tests/cucumber-report.txt
cat irs-cucumber-tests/cucumber-report.txt
cat irs-cucumber-tests/cucumber-report.txt >> $GITHUB_STEP_SUMMARY

- name: Find previous comment in PR
if: always() && github.event_name == 'pull_request'
uses: peter-evans/find-comment@v3

Check notice

Code scanning / KICS

Unpinned Actions Full Length Commit SHA Note

Action is not pinned to a full length commit SHA.
id: find-comment
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: 'View your Cucumber Report at'

- name: Create or update comment in PR
if: always() && github.event_name == 'pull_request'
uses: peter-evans/create-or-update-comment@v4

Check notice

Code scanning / KICS

Unpinned Actions Full Length Commit SHA Note

Action is not pinned to a full length commit SHA.
with:
comment-id: ${{ steps.find-comment.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body-path: 'irs-cucumber-tests/cucumber-report.txt'
edit-mode: replace

- name: Upload Report
if: always()
uses: actions/upload-artifact@v4
with:
path: 'irs-cucumber-tests/target/report.html'
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,6 @@
@ConfigurationParameter(key = PLUGIN_PUBLISH_TOKEN_PROPERTY_NAME, value = "CUCUMBER_TOKEN_IRS_PLACEHOLDER")
@ConfigurationParameter(key = ANSI_COLORS_DISABLED_PROPERTY_NAME, value = "true")
@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME,
value = "pretty,junit:target/cucumber-junit-report.xml,html:target/report.html")
value = "pretty,junit:target/cucumber-junit-report.xml,html:target/report.html,json:target/report.json")
public class RunCucumberTest {
}
Loading