name: Release on: push: branches: - 'release/**' jobs: release: runs-on: docker steps: # Install software dependencies into the runner container - name: Install system dependencies run: | apt-get update apt-get install -y nodejs npm openjdk-17-jdk maven git export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac)))) echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV - name: Check Java and Node versions run: | java -version mvn -v mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout node -v npm -v # Checkout (clone) a fresh repo source of the project - name: Checkout repository uses: actions/checkout@v4 # ################################################################## # ## THIS IS A RELEASE ## # ## #1. Get full version string ## # ## #2. Remove sufix "-SNAPSHOT" from version string ## # ## And commit ## # ## #3. Tag the release ## # ## ## - name: Extract version from pom.xml id: version run: | VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) RELEASE_VERSION="${VERSION/-SNAPSHOT/}" echo "release_version=$RELEASE_VERSION" >> $GITHUB_OUTPUT - name: Set release version (remove -SNAPSHOT) run: | mvn versions:set -DnewVersion=${{ steps.version.outputs.release_version }} mvn versions:commit git config user.name "forgejo-actions" git config user.email "ci@forgejo.local" git commit -am "Release ${{ steps.version.outputs.release_version }}" git push - name: Tag release run: | git tag -a v${{ steps.version.outputs.release_version }} -m "Release ${{ steps.version.outputs.release_version }}" git push origin v${{ steps.version.outputs.release_version }} # ## ## # ################################################################## # Install @Angular dependencies - name: Install frontend dependencies run: | cd src/main/webapp npm ci # Build the frontend - name: Build frontend run: | cd src/main/webapp npm run build # Build the backend (JAR). NOTE: the -Dmaven.download.parallel=false will force MAVEN to have a single connection for downloads, without this I can get "Connection reset" - name: Build backend (Spring Boot) run: | echo "DEBUG Outputs ************************* " echo "Container hostname: $(hostname)" echo "Runner working dir: $PWD" echo "Runner user: $(whoami)" echo "Listing contents of ~/.m2/repository:" ls -lhR ~/.m2/repository | head -n 100 || echo "No .m2/repository found" echo "Disk usage:" du -sh ~/.m2/repository || echo "No .m2 directory found" echo " " echo "BUILD Outputs ************************* (without clean in : mvn clean package ...) " mvn package -Pprod -DskipTests -Dmaven.download.parallel=false -Dmaven.repo.local=/root/.m2/repository -s .forgejo/workflows/ci-settings.xml container: image: maven:3.9-eclipse-temurin-17 volumes: - docker-forgejo_maven-cache:/root/.m2 # Log output - name: List output files run: | ls -lh target/*.jar || true # save artifacts - name: Upload backend JAR uses: actions/upload-artifact@v3 with: name: app-backend path: target/resilient*.jar # auto-create a release - name: Create release and upload JAR to Forgejo run: | # Install Forgejo CLI curl -sSL https://codeberg.org/forgejo/forgejo-cli/releases/latest/download/forgejo-linux-amd64 -o /usr/local/bin/forgejo chmod +x /usr/local/bin/forgejo # Configure Forgejo CLI with token forgejo config --host https://git.oguerreiro.com --token "${{ secrets.FORGEJO_TOKEN }}" # Extract version VERSION="${{ steps.version.outputs.release_version }}" # Create the release forgejo release create "v$VERSION" \ --title "Release $VERSION" \ --notes "Automated release created by CI" \ --repo root/resilient # Upload the JAR artifact forgejo release upload "v$VERSION" target/resilient*.jar \ --repo root/resilient # ################################################################## # ## THIS IS A RELEASE - Change master version to next SNAPSHOT ## # ## #4. Checkout master ## # ## #5. Calculate the new version string ## # ## Update pom.xml ## # ## Calculate the new version string ## - name: Checkout main uses: actions/checkout@v3 with: ref: master - name: Bump to next SNAPSHOT version if: false # DISABLED for testing run: | # Extract the version from the ref, handling tags like v1.0.2 or branches like release/1.0.2 RAW_REF="${GITHUB_REF##*/}" # gets 'v1.0.2' or '1.0.2' VERSION="${RAW_REF#v}" # strips leading 'v' if present → gives '1.0.2' echo "Current version: $VERSION" MAJOR=$(echo "$VERSION" | cut -d. -f1) MINOR=$(echo "$VERSION" | cut -d. -f2) PATCH=$(echo "$VERSION" | cut -d. -f3) NEXT_PATCH=$((PATCH + 1)) NEXT_VERSION="$MAJOR.$MINOR.$NEXT_PATCH-SNAPSHOT" echo "Next version: $NEXT_VERSION" mvn versions:set -DnewVersion="$NEXT_VERSION" mvn versions:commit git config user.name "forgejo-actions" git config user.email "ci@forgejo.local" git commit -am "Start next development cycle $NEXT_VERSION" git push origin master # ## ## # ##################################################################