diff --git a/.gitea/workflows/build-java.yaml b/.gitea/workflows/build-java.yaml new file mode 100644 index 0000000..2be998f --- /dev/null +++ b/.gitea/workflows/build-java.yaml @@ -0,0 +1,47 @@ +# +# +# Build workflow for all modules of captica.expert +# +# Project: workflows +# Author: Marc Böhm +# License: MIT License (see LICENSE.md) +# +# Copyright (c) captica GmbH est. 2021 +# +name: Java build workflow for captica.expert modules +on: + workflow_call: +jobs: + build: + name: Build java distribution + runs-on: docker-ubuntu-nonroot + steps: + - name: Checkout source code + uses: actions/checkout@v4 + with: + token: ${{ secrets.GIT_ACCESS_TOKEN }} + submodules: 'true' + - name: Setup java runtime + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: '21' + - name: Run gradle build process + run: | + ./gradlew build + - name: Upload build artifacts + uses: actions/upload-artifact@v3 + with: + name: artifacts-build + path: | + build/libs/ + build/*.sh + retention-days: 10 + - name: Upload test artifacts + uses: actions/upload-artifact@v3 + with: + name: artifacts-test + path: | + build/test-results + build/reports + retention-days: 10 \ No newline at end of file diff --git a/.gitea/workflows/publish-docker-springboot.yaml b/.gitea/workflows/publish-docker-springboot.yaml new file mode 100644 index 0000000..8c3e791 --- /dev/null +++ b/.gitea/workflows/publish-docker-springboot.yaml @@ -0,0 +1,48 @@ +# +# +# Publish docker workflow for all modules of captica.expert +# +# Project: workflows +# Author: Marc Böhm +# License: MIT License (see LICENSE.md) +# +# Copyright (c) captica GmbH est. 2021 +# +name: Publish docker workflow for captica.expert modules +on: + workflow_call: +jobs: + publish_docker: + name: Build and publish docker image + runs-on: docker-ubuntu + steps: + - name: Checkout source code + uses: actions/checkout@v4 + - name: Download build artifacts (dist files) + uses: actions/download-artifact@v3 + with: + name: artifacts-build + path: build/ + - name: Setup docker buildx environment + uses: docker/setup-buildx-action@v3 + - name: Login to docker registry + uses: docker/login-action@v3 + with: + registry: ${{ vars.CONTAINER_REGISTRY_URL }} + username: ${{ vars.CONTAINER_REGISTRY_USERNAME }} + password: ${{ secrets.CONTAINER_REGISTRY_TOKEN }} + - name: Setup environment variables from "build/env-setup.sh" + run: | + source build/env-setup.sh + - name: Build and push docker image + uses: docker/build-push-action@v5 + with: + context: . + file: ./Dockerfile + push: true + tags: "${{ vars.CONTAINER_REGISTRY_URL }}/${{gitea.repository}}:latest" + build-args: | + FILE_BINARY=${{ env.CAPTICA_APPLICATION_FILE_BINARY }} + NAME_APPLICATION=${{ env.CAPTICA_APPLICATION_NAME }} + PORT_EXPOSURE=${{ env.CAPTICA_APPLICATION_PORT }} + JAVA_VERSION=${{ env.CAPTICA_APPLICATION_JAVA_VERSION }} \ No newline at end of file diff --git a/gradle/build-version.gradle b/gradle/build-version.gradle new file mode 100644 index 0000000..34db1bd --- /dev/null +++ b/gradle/build-version.gradle @@ -0,0 +1,74 @@ +/* + * Enables version handling on build process + * + * Project: gradle + * Author: Marc Böhm + * License: MIT License (see LICENSE.md) + * + * Copyright (c) captica GmbH est. 2021 + */ + +// Load external plugins +buildscript { + repositories { + gradlePluginPortal() + mavenCentral() + } + + dependencies { + classpath 'me.qoomon:gradle-git-versioning-plugin:6.4.3' + } +} + +// Apply plugins +apply plugin: me.qoomon.gradle.gitversioning.GitVersioningPlugin + +// Setup versions handling +gitVersioning.apply { + refs { + branch('(feature|bugfix)/(?.+)') { + version = '${ref.feature}-SNAPSHOT' + } + branch('release/v(?.*)') { + version = '${ref.version}-RC' + } + branch('.+') { + version = '${ref}-SNAPSHOT' + } + tag('v(?.*)') { + version = '${ref.version}' + } + } + // optional fallback configuration in case of no matching ref configuration + rev { + version = '${commit}' + } +} + +// Simple task to write the env shell script to register version env vars +task writeVersionFile() { + doLast { + new File(buildDir, 'env-setup.sh').text = """ +#!/bin/sh + +# Default env vars +export CAPTICA_APPLICATION_VERSION=${version} +export CAPTICA_APPLICATION_NAME=${project.name} +export CAPTICA_APPLICATION_FILE_BINARY=${bootJar.archiveFileName.get()} +export CAPTICA_APPLICATION_PORT=${applicationPort} +export CAPTICA_APPLICATION_JAVA_VERSION=${java.sourceCompatibility} + +# Gitea/Github specific env variables +echo "CAPTICA_APPLICATION_VERSION=\$CAPTICA_APPLICATION_VERSION" >> \$GITHUB_ENV +echo "CAPTICA_APPLICATION_FILE_BINARY=\$CAPTICA_APPLICATION_FILE_BINARY" >> \$GITHUB_ENV +echo "CAPTICA_APPLICATION_NAME=\$CAPTICA_APPLICATION_NAME" >> \$GITHUB_ENV +echo "CAPTICA_APPLICATION_PORT=\$CAPTICA_APPLICATION_PORT" >> \$GITHUB_ENV +echo "CAPTICA_APPLICATION_JAVA_VERSION=\$CAPTICA_APPLICATION_JAVA_VERSION" >> \$GITHUB_ENV +""" + } +} + +// Link up version file task to bootJar +tasks.named('bootJar').configure { + dependsOn writeVersionFile +} \ No newline at end of file