Skip to content

Build and Publish Geoweaver App #92

Build and Publish Geoweaver App

Build and Publish Geoweaver App #92

name: Build and Publish Geoweaver App
on:
release:
types:
- published
tags:
- '*'
workflow_dispatch:
jobs:
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 11 for x64
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
architecture: x64
- name: Run Tests
run: |
mvn test jacoco:report
working-directory: ${{ github.workspace }}
- name: Check Test Results
run: |
if [ $? -eq 0 ]; then
echo "Tests passed successfully."
else
echo "Tests failed."
exit 1 # Exit with an error code to stop the workflow
fi
build-jar:
runs-on: ubuntu-latest
needs: tests
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'adopt'
- name: Build with Maven
run: mvn clean install -DskipTests
- name: Install XML parsing tools
run: sudo apt-get update && sudo apt-get install -y libxml2-utils
- name: Extract version from pom.xml
run: |
VERSION=$(xmllint --xpath "/*[local-name()='project']/*[local-name()='version']/text()" $GITHUB_WORKSPACE/pom.xml)
echo "VERSION=$VERSION" >> $GITHUB_ENV
- name: Append version to DEBIAN/control
run: |
echo "Version: ${{ env.VERSION }}" >> $GITHUB_WORKSPACE/linux-deployment/DEBIAN/control
- name: Set execute permissions for postinst script
run: chmod 755 $GITHUB_WORKSPACE/linux-deployment/DEBIAN/postinst
- name: Copy geoweaver.jar to linux-deployment directory
run: cp $GITHUB_WORKSPACE/target/geoweaver.jar $GITHUB_WORKSPACE/linux-deployment/usr/local/bin/
- name: Make geoweaver.sh executable
run: chmod +x $GITHUB_WORKSPACE/linux-deployment/usr/local/bin/geoweaver.sh
- name: Build deb package
run: |
cd $GITHUB_WORKSPACE/linux-deployment
dpkg-deb --build . geoweaver.deb
- name: Upload Geoweaver Artifacts
uses: actions/upload-artifact@v3
with:
name: geoweaver-artifacts
path: |
target/*.jar
pom.xml
linux-deployment/*.deb
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: geoweaver
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: geoweaver/geoweaver:${{ env.VERSION }}, geoweaver/geoweaver:latest
- name: Logout from Docker
if: always()
run: docker logout
build-windows:
needs: build-jar
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Download Geoweaver Artifacts
uses: actions/download-artifact@v3
with:
name: geoweaver-artifacts
path: artifact
- name: Prepare Deployment Directory
run: |
cp artifact/target/geoweaver.jar windows-deployment/geoweaver.jar
- name: Install NSIS
run: choco install nsis
- name: Install PyInstaller
run: pip install pyinstaller
- name: Build Executable with PyInstaller
run: pyinstaller windows-deployment/pyinstaller.spec
- name: Build NSIS Installer
run: '& "C:\Program Files (x86)\NSIS\makensis.exe" windows-deployment/installer.nsi'
- name: Upload Windows Installer to Release
uses: actions/upload-artifact@v3
with:
name: geoweaver-windows-installer
path: D:\a\Geoweaver\Geoweaver\windows-deployment\GeoweaverInstaller.exe
build-macos:
needs: build-jar
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Download Geoweaver Artifacts
uses: actions/download-artifact@v3
with:
name: geoweaver-artifacts
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'adopt'
- name: Build .app file
run: |
chmod +x ${GITHUB_WORKSPACE}/macos-deployment/make-app.sh
${GITHUB_WORKSPACE}/macos-deployment/make-app.sh
- name: Create .dmg file with Applications shortcut
run: |
APP_NAME="Geoweaver"
DMG_TEMP_DIR="${GITHUB_WORKSPACE}/dmg_temp"
mkdir -p "${DMG_TEMP_DIR}"
cp -r "${GITHUB_WORKSPACE}/geoweaver.app" "${DMG_TEMP_DIR}"
ln -s /Applications "${DMG_TEMP_DIR}/Applications"
df -h
hdiutil create -volname "$APP_NAME" -srcfolder "${DMG_TEMP_DIR}" -ov -format UDZO -fs HFS+ "${GITHUB_WORKSPACE}/${APP_NAME}.dmg"
- name: Upload .dmg file as an artifact
uses: actions/upload-artifact@v3
with:
name: geoweaver-dmg
path: /Users/runner/work/Geoweaver/Geoweaver/Geoweaver.dmg
release:
needs: [build-jar, build-macos, build-windows]
runs-on: ubuntu-latest
steps:
- name: Install XML parsing tools
run: sudo apt-get update && sudo apt install libxml2-utils
- name: Install jq
run: sudo apt-get install jq
- name: Download Geoweaver Artifacts
uses: actions/download-artifact@v3
with:
name: geoweaver-artifacts
- name: Download .dmg file
uses: actions/download-artifact@v3
with:
name: geoweaver-dmg
- name: Download Windows Installer Artifact
uses: actions/download-artifact@v3
with:
name: geoweaver-windows-installer
- name: Get ID and upload URL of the latest release
run: |
RESPONSE=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" "https://api.github.com/repos/${{ github.repository }}/releases/latest")
UPLOAD_URL=$(echo "$RESPONSE" | jq -r .upload_url)
RELEASE_ID=$(echo "$RESPONSE" | jq -r .id)
echo "UPLOAD_URL=$UPLOAD_URL" >> $GITHUB_ENV
echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV
- name: Set release title to version
run: |
curl -X PATCH \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ github.repository }}/releases/${{ env.RELEASE_ID }} \
-d '{"name": "${{ env.VERSION }}"}'
- name: Upload JAR Asset
uses: actions/upload-release-asset@v2
with:
upload_url: ${{ env.UPLOAD_URL }}
asset_path: /home/runner/work/Geoweaver/Geoweaver/target/geoweaver.jar
asset_name: geoweaver.jar
asset_content_type: application/java-archive
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload DEB Asset
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ env.UPLOAD_URL }}
asset_path: /home/runner/work/Geoweaver/Geoweaver/linux-deployment/geoweaver.deb
asset_name: geoweaver.deb
asset_content_type: application/vnd.debian.binary-package
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload .dmg file to Release
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ env.UPLOAD_URL }}
asset_path: Geoweaver.dmg
asset_name: Geoweaver.dmg
asset_content_type: application/x-diskcopy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Windows Installer to Release
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ env.UPLOAD_URL }}
asset_path: GeoweaverInstaller.exe
asset_name: GeoweaverInstaller.exe
asset_content_type: application/vnd.microsoft.portable-executable
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}