Build and Publish Geoweaver App #92
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |