Skip to content

OpenMAQS Java Pipeline #941

OpenMAQS Java Pipeline

OpenMAQS Java Pipeline #941

Workflow file for this run

name: OpenMAQS Java Pipeline
on:
schedule:
- cron: "13 23 * * *"
push:
branches:
- main
pull_request:
branches: [ main ]
workflow_dispatch:
inputs:
override:
description: 'Version Number'
required: true
default: '0.0.0'
jobs:
waitOld:
name: Wait For Older Runs To Complete
runs-on: ubuntu-latest
steps:
- name: Wait
id: wait
shell: pwsh
run: |
$runID = ${{ github.run_id }}
$endPoint = "https://api.github.com/repos/${{github.repository}}/actions/runs"
$timeout = New-TimeSpan -Minutes 60
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
do {
$result = Invoke-RestMethod -Uri $endPoint
$builds = $result.workflow_runs | Where-Object {$_.name -eq "Build" -and ($_.status -eq "in_progress" -or $_.status -eq "queued") -and $_.id -lt $runID}
# Check if there were any older build runs still going, if not we waited long enough
if (!$builds)
{
Write-Host "Are now top of the run queue"
return
}
Start-Sleep -s 60
Write-Host "Waited so far $($stopwatch.elapsed)"
} while ($stopwatch.elapsed -lt $timeout)
Write-Host "Waited more than an hour for earlier runs to complete, continuing action pipeline"
draftRelease:
name: Draft release
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
# Drafts your next Release notes as Pull Requests are merged into "master"
- uses: release-drafter/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
dependency-tree:
name: Maven Dependency Tree
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/[email protected]
with:
distribution: zulu
java-version: 17
cache: maven
- name: Restore Local Maven Cache
uses: actions/[email protected]
with:
path: ~/.m2
key: ${{runner.os}}-m2
- name: Submit Dependency Snapshot
uses: advanced-security/maven-dependency-submission-action@v3
getVersion:
name: Get package version
runs-on: ubuntu-latest
if: ${{ always() }}
outputs:
buildNumber: ${{ steps.ver.outputs.BUILD_NUMBER }}
tagName: ${{ steps.ver.outputs.TAG_NAME }}
steps:
- name: GetVersion
id: ver
shell: pwsh
run: |
if ("${{github.event.inputs.override}}")
{
Write-Host "Using manually entered override version"
$version = "${{ github.event.inputs.override}}"
}
else
{
$header = @{Authorization = 'Bearer ${{ secrets.GITHUB_TOKEN }}' }
$endPoint = "https://api.github.com/repos/${{github.repository}}/releases"
$info = Invoke-RestMethod -Uri $endPoint -Headers $header
$version = $info.name[0].Trim("v")
}
Write-Host "::set-output name=BUILD_NUMBER::$($version)"
# Write-Host "BUILD_NUMBER=$($version)" >> GITHUB_OUTPUT
install-modules:
name: Pre-compile packages
runs-on: ubuntu-latest
outputs:
buildNumber: ${{ steps.ver.outputs.BUILD_NUMBER }}
steps:
- uses: actions/checkout@v4
- name: Preload packages into cache
id: builder
uses: ./.github/actions/preinstall
with:
bt-param: '-fae -B -e -T 1C -Psonar'
version: ${{ github.sha }}
test-modules:
name: Test Modules
needs: [ waitOld, install-modules ]
runs-on: ubuntu-latest
env:
SAUCE_HUB_URL: ${{secrets.SAUCE_HUB_URL}}
SAUCE: ${{secrets.SAUCE}}
strategy:
fail-fast: false
matrix:
module-name: [ openmaqs-utilities, openmaqs-base, openmaqs-appium, openmaqs-selenium, openmaqs-webservices, openmaqs-cucumber, openmaqs-accessibility, openmaqs-database, openmaqs-playwright ]
steps:
- name: Check if tests can be run
if: matrix.module-name == 'openmaqs-appium' && github.actor == 'dependabot[bot]'
run: |
echo Cannot run Appium tests when build was triggered by dependabot
exit 1
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
if: matrix.module-name == 'openmaqs-playwright'
with:
node-version: '14.x'
- name: Install Playwright
if: matrix.module-name == 'openmaqs-playwright'
run: npx playwright install --with-deps
- name: Build and Start Unit Tests
id: builder
uses: ./.github/actions/buildtest
with:
module-name: ${{matrix.module-name}}
bt-param: '-fae -B -e -Dtesting=solo -T 1C'
version: ${{ github.sha }}
- name: Test Reporting
if: always()
id: test-report
uses: phoenix-actions/test-reporting@v12
with:
name: ${{matrix.module-name}} Test Results
path: '**/junitreports/TEST-**.xml'
reporter: 'java-junit'
list-tests: 'failed'
list-suites: 'failed'
fail-on-error: 'false'
- uses: actions/upload-artifact@v3
if: always()
name: "Upload test artifact"
with:
name: ${{matrix.module-name}}-results
path: |
${{matrix.module-name}}/target/**/*.xml
${{matrix.module-name}}/target/logs
${{matrix.module-name}}/target/**/*.exec
${{matrix.module-name}}/target/**/*.jar
sonarcloud:
name: SonarCloud Analysis
runs-on: ubuntu-latest
needs: [test-modules, getVersion]
env:
SONAR_ORG: "openmaqs"
SONAR_PROJECT: "OpenMAQS_openmaqs-java"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{secrets.SONAR_TOKEN}}
VERSION: ${{ needs.getVersion.outputs.buildNumber }}
steps:
- name: Checkout Source
uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/download-artifact@v3
with:
path: ${{github.workspace}}/artifacts/
- name: Set up JDK 17
uses: actions/[email protected]
with:
distribution: zulu
java-version: 17
cache: maven
- name: Create settings file
uses: InstaCode/maven-settings-xml-action@v9
with:
profiles: '[{ "id": "sonar", "properties": { "sonar.organization":"${{env.SONAR_ORG}}", "sonar.host.url":"https://sonarcloud.io", "sonar.login": "${{env.SONAR_TOKEN}}" }}]'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Restore Local Maven Cache
uses: actions/[email protected]
with:
path: ~/.m2
key: ${{ runner.os }}-maven-${{github.sha}}.${{github.run_number}}
restore-keys: |
${{ runner.os }}-maven-${{github.sha}}
- name: Run SonarCloud Analysis
shell: bash
run: mvn -B -e -fae -Drevision=${{env.VERSION}} -Psonar package sonar:sonar -Dsonar.projectKey=${{env.SONAR_PROJECT}} -Dsonar.coverage.jacoco.xmlReportPaths=$(find "$(pwd)" -path '*jacoco.xml' | sed 's/.*/&/' | tr '\n' ',')
working-directory: ${{github.workspace}}
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
checkstyle:
name: Checkstyle Run
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/[email protected]
with:
distribution: zulu
java-version: 17
cache: maven
- name: Restore Local Maven Cache
uses: actions/[email protected]
with:
path: ~/.m2
key: ${{runner.os}}-m2
- name: Run Checkstyle
run: mvn -B validate --file pom.xml -e -fae
labels:
name: Pull Request Labels
runs-on: ubuntu-latest
steps:
- name: Label Pull Request
uses: actions/labeler@v4
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
publish:
name: Publish Packages
runs-on: ubuntu-latest
needs: [sonarcloud, checkstyle, getVersion]
environment: OSSRH
if: (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.event_name != 'schedule'
steps:
- uses: actions/checkout@v4
- name: Set up JDK 11
uses: actions/[email protected]
with:
distribution: zulu
java-version: 11
cache: maven
- name: Restore Local Maven Cache
uses: actions/[email protected]
with:
path: ~/.m2
key: ${{runner.os}}-m2
- name: Create settings file
uses: whelk-io/maven-settings-xml-action@v21
with:
profiles: '[{"id": "gpg", "properties": { "gpg.keyname": "${{secrets.GPG_KEYNAME_ID}}", "gpg.passphrase": "${{secrets.GPG_PASSPHRASE}}" }}]'
servers: '[{"id": "ossrh", "username": "${{secrets.DEPLOY_PACKAGE_USERNAME}}", "password": "${{secrets.DEPLOY_PACKAGE_PASSWORD}}"}]'
active_profiles: >
[ "ossrh", "release", "gpg" ]
- name: Import GPG key
id: import_gpg
uses: crazy-max/[email protected]
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- name: Deploy Release v${{ needs.getVersion.outputs.buildNumber }} to OSSRH
run: mvn -B -e -Drevision=${{ needs.getVersion.outputs.buildNumber }} deploy
- name: Publish GitHub release v${{ needs.getVersion.outputs.buildNumber }}
uses: actions/github-script@v7
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const result = await github.action.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo
})
var id = "NA"
var data = result.data
for(var key in data){
if(data[key].tag_name == "v${{ needs.getVersion.outputs.buildNumber }}" && data[key].draft == true)
{
github.action.repos.updateRelease({
release_id: data[key].id,
"draft": false,
owner: context.repo.owner,
repo: context.repo.repo });
return;
}
}
console.error("Failed to find related draft release");