Skip to content

run with graalvm

run with graalvm #67

Workflow file for this run

# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Build Release with Maven
on:
push:
tags:
- 'v*'
jobs:
build-vue-js-job:
runs-on: ubuntu-latest
steps:
- name: checkout git submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Checkout openepcis-web
uses: actions/checkout@v4
with:
repository: "openepcis/openepcis-web.git"
github-server-url: "https://code.company-group.com"
path: modules/openepcis-web
ref: "main"
token: ${{ secrets.OPENEPCIS_WEB_TOKEN }}
- name: vus.js ui build
uses: actions/setup-node@v4
with:
node-version: 20
- name: "Create VUE.JS Artifact"
run: |
cd modules/openepcis-web
export API_URL="../api"
export COPYRIGHT_TEXT="Copyright benelog GmbH & Co. KG | 2023-2024"
export NUXT_APP_BASE_URL="/ui/"
export ACTIVATE_FEATURES=input-template
cd openepcis-components
npm install
cd ../openepcis-test-data-generator
npm install
cd ../openepcis-tools
npm install
cd ../openepcis-test-data-designer
npm install
npm run generate
cd ../..
- name: 'Upload VUE.JS Artifact'
if: contains(github.ref, 'v')
uses: actions/upload-artifact@v4
with:
name: 'testdata-generator-ui-dist'
path: 'modules/openepcis-web/openepcis-test-data-designer/.output/public'
build-jar-job:
runs-on: ubuntu-latest
needs: [ build-vue-js-job ]
steps:
- name: checkout git submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
id: builder
uses: docker/setup-buildx-action@v3
- name: Set up GraalVM 21
uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm-community'
cache: maven
server-id: openepcis-ossrh
server-username: OPENEPCIS_OSSRH_USERNAME
server-password: OPENEPCIS_OSSRH_PASSWORD
- name: Install gpg secret key
run: |
cat <(echo -e "${{ secrets.OSSRH_GPG_SECRET_KEY }}") | gpg --batch --import
gpg --batch --list-secret-keys --keyid-format LONG
- name: 'Download VUE.JS Artifact'
if: contains(github.ref, 'v')
uses: actions/download-artifact@v4
with:
name: 'testdata-generator-ui-dist'
path: 'modules/openepcis-web/openepcis-test-data-designer/.output/public'
- name: "integrate vus.js ui into quarkus rest api"
run: |
rm -Rf testdata-generator-quarkus-rest-app/src/main/resources/static-web/ui
mv modules/openepcis-web/openepcis-test-data-designer/.output/public testdata-generator-quarkus-rest-app/src/main/resources/static-web/ui
shell: "bash"
- name: deploy testdata generator modules
env:
OPENEPCIS_OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OPENEPCIS_OSSRH_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
run: |
mvn \
-s .mvn/settings.xml \
--no-transfer-progress \
--batch-mode \
-Dgpg.passphrase=${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} \
-Pci-build -Popenepcis-ossrh \
-B clean verify deploy
- name: vus.js ui build
uses: actions/setup-node@v4
with:
node-version: 20
- name: 'Get Version Number'
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
run: |
echo "::set-env name=VERSION::$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)"
- name: 'Publish Application JAR'
uses: actions/upload-artifact@v4
with:
name: 'testdata-generator-quarkus-rest-app-${{env.VERSION}}-runner.jar'
path: 'testdata-generator-quarkus-rest-app/target/testdata-generator-quarkus-rest-app-runner.jar'
- name: 'Create Release'
if: contains(github.ref, 'v')
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
with:
tag_name: ${{github.ref}}
release_name: Release ${{github.ref}}
body: |
Initial release
draft: false
prerelease: false
- name: 'Upload Release Quarkus REST Application Asset'
if: contains(github.ref, 'v')
id: upload--app-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
with:
upload_url: ${{steps.create_release.outputs.upload_url}}
asset_path: 'testdata-generator-quarkus-rest-app/target/testdata-generator-quarkus-rest-app-runner.jar'
asset_name: 'testdata-generator-quarkus-rest-app-${{env.GIT_TAG_NAME}}.jar'
asset_content_type: application/java-archive
- name: 'Write Upload URL To File'
if: contains(github.ref, 'v')
run: |
echo "${{steps.create_release.outputs.upload_url}}" > upload_url.txt
- name: 'Publish Upload URL'
if: contains(github.ref, 'v')
uses: actions/upload-artifact@v4
with:
name: 'upload_url.txt'
path: 'upload_url.txt'
build-quarkus-container-images:
name: "Build Container Images"
needs: [ build-vue-js-job ]
runs-on: 'ubuntu-latest'
steps:
- name: checkout from git
uses: actions/checkout@v4
- name: 'Get Version from tag'
uses: olegtarasov/get-tag@v2.1.3
id: tagName
with:
tagRegex: "v(.*)"
tagRegexGroup: 1
- name: 'Login to GitHub Container Registry'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{github.actor}}
password: ${{secrets.GITHUB_TOKEN}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
id: builder
uses: docker/setup-buildx-action@v3
- name: Set up GraalVM 21
uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm-community'
cache: maven
- name: 'Download VUE.JS Artifact'
if: contains(github.ref, 'v')
uses: actions/download-artifact@v4
with:
name: 'testdata-generator-ui-dist'
path: 'modules/openepcis-web/openepcis-test-data-designer/.output/public'
- name: "integrate vus.js ui into quarkus rest api"
run: |
rm -Rf testdata-generator-quarkus-rest-app/src/main/resources/static-web/ui
mv modules/openepcis-web/openepcis-test-data-designer/.output/public testdata-generator-quarkus-rest-app/src/main/resources/static-web/ui
shell: "bash"
- name: "Prepare Build"
run: >
mvn --no-transfer-progress --batch-mode clean package -Pci-build -DskipTests
- name: "Build linux/amd64 Image"
run: |
mvn --no-transfer-progress --batch-mode -Pci-build \
clean package -f ./testdata-generator-quarkus-rest-app/pom.xml \
-Dquarkus.container-image.name=testdata-generator \
-Dquarkus.container-image.build=true \
-Dquarkus.container-image.registry=ghcr.io \
-Dquarkus.container-image.group=openepcis \
-Dquarkus.jib.base-jvm-image=eclipse-temurin:21-jre-alpine \
-Dquarkus.container-image.additional-tags=latest-amd64,${GIT_TAG_NAME}-amd64 \
-Dquarkus.jib.platforms=linux/amd64
- name: "Build linux/arm64 Image"
run: |
mvn --no-transfer-progress --batch-mode -Pci-build \
clean package -f ./testdata-generator-quarkus-rest-app/pom.xml \
-Dquarkus.container-image.name=testdata-generator \
-Dquarkus.container-image.build=true \
-Dquarkus.container-image.registry=ghcr.io \
-Dquarkus.container-image.group=openepcis \
-Dquarkus.jib.base-jvm-image=eclipse-temurin:21-jre-alpine \
-Dquarkus.container-image.additional-tags=latest-arm64,${GIT_TAG_NAME}-arm64 \
-Dquarkus.jib.platforms=linux/arm64/v8
- name: "push multi arch image"
run: |
docker push ghcr.io/openepcis/testdata-generator:${GIT_TAG_NAME}-amd64;
docker push ghcr.io/openepcis/testdata-generator:${GIT_TAG_NAME}-arm64;
docker push ghcr.io/openepcis/testdata-generator:latest-amd64;
docker push ghcr.io/openepcis/testdata-generator:latest-arm64;
export DOCKER_CLI_EXPERIMENTAL=enabled;
docker manifest create ghcr.io/openepcis/testdata-generator:${GIT_TAG_NAME} \
--amend ghcr.io/openepcis/testdata-generator:${GIT_TAG_NAME}-amd64 \
--amend ghcr.io/openepcis/testdata-generator:${GIT_TAG_NAME}-arm64;
docker manifest push ghcr.io/openepcis/testdata-generator:${GIT_TAG_NAME};
docker manifest create ghcr.io/openepcis/testdata-generator:latest \
--amend ghcr.io/openepcis/testdata-generator:latest-amd64 \
--amend ghcr.io/openepcis/testdata-generator:latest-arm64;
docker manifest push ghcr.io/openepcis/testdata-generator:latest;
build-quarkus-native-container-images:
if: false
name: "Build Native Container Image"
needs: [ build-vue-js-job ]
strategy:
matrix:
os: ['ubuntu-latest', 'ubuntu-22.04-arm64']
include:
- os: 'ubuntu-latest'
label: 'linux-amd64'
platform: "linux/amd64"
tags: "latest-amd64"
jib-platforms: "linux/amd64"
- os: 'ubuntu-22.04-arm64'
label: 'linux-arm64'
platform: "linux/arm64"
tags: "latest-arm64"
jib-platforms: "linux/arm64/v8"
runs-on: ${{matrix.os}}
steps:
- name: checkout from git
uses: actions/checkout@v4
- name: 'Get Version from tag'
uses: olegtarasov/get-tag@v2.1.3
id: tagName
with:
tagRegex: "v(.*)"
tagRegexGroup: 1
- name: 'Login to GitHub Container Registry'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{github.actor}}
password: ${{secrets.GITHUB_TOKEN}}
- name: Set up GraalVM 21
uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm-community'
cache: maven
- name: 'Download VUE.JS Artifact'
if: contains(github.ref, 'v')
uses: actions/download-artifact@v4
with:
name: 'testdata-generator-ui-dist'
path: 'testdata-generator-ui/dist'
- name: "integrate vus.js ui into quarkus rest api"
run: |
rm -Rf testdata-generator-quarkus-rest-app/src/main/resources/static-web/ui
mv testdata-generator-ui/dist testdata-generator-quarkus-rest-app/src/main/resources/static-web/ui
shell: "bash"
- name: "Prepare Build"
run: >
mvn --no-transfer-progress --batch-mode clean package -Pci-build -DskipTests
- name: "Build ${{matrix.platform}} native Image"
run: |
mvn --no-transfer-progress --batch-mode package -Dnative -Pci-build -DskipTests -f ./testdata-generator-quarkus-rest-app/pom.xml \
-Dquarkus.native.container-build=true \
-Dquarkus.container-image.build=true \
-Dquarkus.container-image.name=testdata-generator-native \
-Dquarkus.container-image.registry=ghcr.io \
-Dquarkus.container-image.group=openepcis \
-Dquarkus.container-image.additional-tags=${{matrix.tags}},${GIT_TAG_NAME}-${{matrix.label}} \
-Dquarkus.native.container-runtime-options="--platform=${{matrix.platform}}" \
-Dquarkus.jib.platforms=${{matrix.jib-platforms}}
- name: "push arch image"
run: |
docker push ghcr.io/openepcis/testdata-generator-native:${GIT_TAG_NAME}-${{matrix.label}};
docker push ghcr.io/openepcis/testdata-generator-native:${{matrix.tags}};
push-quarkus-native-container-images:
if: false
name: "Push Native Container Images"
needs: [build-quarkus-native-container-images]
runs-on: 'ubuntu-latest'
steps:
- name: 'Login to GitHub Container Registry'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{github.actor}}
password: ${{secrets.GITHUB_TOKEN}}
- name: 'Get Version from tag'
uses: olegtarasov/get-tag@v2.1.3
id: tagName
with:
tagRegex: "v(.*)"
tagRegexGroup: 1
- name: "push multi-arch image"
run: |
export DOCKER_CLI_EXPERIMENTAL=enabled;
docker manifest create ghcr.io/openepcis/testdata-generator-native:${GIT_TAG_NAME} \
--amend ghcr.io/openepcis/testdata-generator-native:${GIT_TAG_NAME}-linux-amd64 \
--amend ghcr.io/openepcis/testdata-generator-native:${GIT_TAG_NAME}-linux-arm64;
docker manifest push ghcr.io/openepcis/testdata-generator-native:${GIT_TAG_NAME};
docker manifest create ghcr.io/openepcis/testdata-generator-native:latest \
--amend ghcr.io/openepcis/testdata-generator-native:latest-amd64 \
--amend ghcr.io/openepcis/testdata-generator-native:latest-arm64;
docker manifest push ghcr.io/openepcis/testdata-generator-native:latest;
build-quarkus-native-executable:
if: false
name: "Build Quarkus Service Native Executable"
needs: [build-jar-job, build-vue-js-job]
strategy:
matrix:
os: ['ubuntu-latest', 'ubuntu-22.04-arm64', 'macos-latest', 'windows-latest']
include:
- os: 'ubuntu-latest'
label: 'linux-amd64'
exe: ""
- os: 'ubuntu-22.04-arm64'
label: 'linux-arm64'
exe: ""
- os: 'macos-latest'
label: 'mac'
exe: ""
- os: 'windows-latest'
label: 'windows'
exe: ".exe"
runs-on: ${{matrix.os}}
steps:
- name: setup up global git config
run: |
git config --global core.protectNTFS false
git config --global hooks.enforcecompatiblefilenames false
- name: checkout from git
uses: actions/checkout@v4
- name: 'Get Version from tag'
uses: olegtarasov/get-tag@v2.1.3
id: tagName
with:
tagRegex: "v(.*)"
tagRegexGroup: 1
- name: 'Download Release URL'
if: contains(github.ref, 'v')
uses: actions/download-artifact@v4
with:
name: 'upload_url.txt'
- name: 'Set Upload URL Env Var'
if: contains(github.ref, 'v')
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
run: |
echo "::set-env name=UPLOAD_URL::$(cat upload_url.txt)"
- name: Set up GraalVM
uses: graalvm/setup-graalvm@v1
with:
java-version: '17'
distribution: 'graalvm-community'
native-image-job-reports: 'true'
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Download VUE.JS Artifact'
if: contains(github.ref, 'v')
uses: actions/download-artifact@v4
with:
name: 'testdata-generator-ui-dist'
path: 'testdata-generator-ui/dist'
- name: "integrate vus.js ui into quarkus rest api"
run: |
rm -Rf testdata-generator-quarkus-rest-app/src/main/resources/static-web/ui
mv testdata-generator-ui/dist testdata-generator-quarkus-rest-app/src/main/resources/static-web/ui
shell: "bash"
- name: "Prepare Build"
run: |
mvn --no-transfer-progress --batch-mode -Pci-build clean package -DskipTests
- name: "Build Native Quarkus Executable"
run: |
mvn --no-transfer-progress --batch-mode clean package -Pnative -Pci-build -DskipTests -f ./testdata-generator-quarkus-rest-app/pom.xml
- name: 'Release Native Quarkus Executable'
if: success() && contains(github.ref, 'v')
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
with:
upload_url: ${{env.UPLOAD_URL}}
asset_name: 'testdata-generator-quarkus-rest-app-runner-${{env.GIT_TAG_NAME}}-${{matrix.label}}${{matrix.exe}}'
asset_path: 'testdata-generator-quarkus-rest-app/target/testdata-generator-quarkus-rest-app-runner${{matrix.exe}}'
asset_content_type: application/octet-stream