name: Build Debian Package on: release: types: [published] workflow_dispatch: inputs: dput: description: 'Upload to PPA' required: true default: false type: boolean version: description: 'Version' required: false env: JAVA_VERSION: 19 OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/19/openjfx-19_linux-x64_bin-jmods.zip' OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/19/openjfx-19_linux-aarch64_bin-jmods.zip' jobs: get-version: uses: ./.github/workflows/get-version.yml with: version: ${{ github.event.inputs.version }} build: name: Build Debian Package runs-on: ubuntu-20.04 needs: [get-version] steps: - uses: actions/checkout@v3 - name: Install build tools run: | sudo add-apt-repository ppa:coffeelibs/openjdk sudo apt-get update sudo apt-get install debhelper devscripts dput coffeelibs-jdk-19 libgtk2.0-0 - name: Setup Java uses: actions/setup-java@v3 with: distribution: 'zulu' java-version: ${{ env.JAVA_VERSION }} cache: 'maven' - id: versions name: Create PPA version string run: echo "ppaVerStr=${SEM_VER_STR/-/\~}-${REVCOUNT}" >> $GITHUB_OUTPUT env: SEM_VER_STR: ${{ needs.get-version.outputs.semVerStr }} REVCOUNT: ${{ needs.get-version.outputs.revNum }} - name: Run maven run: mvn -B clean package -Pdependency-check,linux -DskipTests - name: Download OpenJFX jmods id: download-jmods run: | curl -L ${{ env.OPENJFX_JMODS_AMD64 }} -o openjfx-amd64.zip mkdir -p jmods/amd64 unzip -j openjfx-amd64.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d jmods/amd64 curl -L ${{ env.OPENJFX_JMODS_AARCH64 }} -o openjfx-aarch64.zip mkdir -p jmods/aarch64 unzip -j openjfx-aarch64.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d jmods/aarch64 - name: Ensure major jfx version in pom and in jmods is the same shell: pwsh run: | mkdir jfxBaseJmodAmd64 jmod extract --dir jfxBaseJmodAmd64 jmods/amd64/javafx.base.jmod $jfxJmodVersionAmd64 = ((Get-Content -Path "jfxBaseJmodAmd64/lib/javafx.properties" | Where-Object {$_ -like 'javafx.version=*' }) -replace '.*=','') -split "\." mkdir jfxBaseJmodAarch64 jmod extract --dir jfxBaseJmodAarch64 jmods/aarch64/javafx.base.jmod $jfxJmodVersionAarch64 = ((Get-Content -Path "jfxBaseJmodAarch64/lib/javafx.properties" | Where-Object {$_ -like 'javafx.version=*' }) -replace '.*=','') -split "\." if ($jfxJmodVersionAmd64[0] -ne $jfxJmodVersionAarch64[0] ) { Write-Error "JavaFX Jmods for aarch64 and amd64 are different major versions" exit 1 } $jfxPomVersion = (&mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout) -split "\." if ($jfxPomVersion[0] -ne $jfxJmodVersionAmd64[0]) { Write-Error "Major part of JavaFX version in pom($($jfxPomVersion[0])) does not match the version of Jmods($($jfxJmodVersionAmd64[0])) " exit 1 } - name: Create orig.tar.gz with common/ libs/ mods/ jmods/ run: | mkdir pkgdir cp -r target/libs pkgdir cp -r target/mods pkgdir cp -r jmods pkgdir cp -r dist/linux/common/ pkgdir cp target/cryptomator-*.jar pkgdir/mods tar -cJf cryptomator_${{ steps.versions.outputs.ppaVerStr }}.orig.tar.xz -C pkgdir . - name: Patch and rename pkgdir run: | cp -r dist/linux/debian/ pkgdir export RFC2822_TIMESTAMP=`date --rfc-2822` envsubst '${SEMVER_STR} ${VERSION_NUM} ${REVISION_NUM}' < dist/linux/debian/rules > pkgdir/debian/rules envsubst '${PPA_VERSION} ${RFC2822_TIMESTAMP}' < dist/linux/debian/changelog > pkgdir/debian/changelog find . -name "*.jar" >> pkgdir/debian/source/include-binaries mv pkgdir cryptomator_${{ steps.versions.outputs.ppaVerStr }} env: SEMVER_STR: ${{ needs.get-version.outputs.semVerStr }} VERSION_NUM: ${{ needs.get-version.outputs.semVerNum }} REVISION_NUM: ${{ needs.get-version.outputs.revNum }} PPA_VERSION: ${{ steps.versions.outputs.ppaVerStr }}-0ppa1 - name: Prepare GPG-Agent for signing with key 615D449FE6E6A235 run: | echo "${GPG_PRIVATE_KEY}" | gpg --batch --quiet --import echo "${GPG_PASSPHRASE}" | gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --dry-run --sign README.md env: GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }} - name: debuild run: | debuild -S -sa -d debuild -b -sa -d env: DEBSIGN_PROGRAM: gpg --batch --pinentry-mode loopback DEBSIGN_KEYID: 615D449FE6E6A235 working-directory: cryptomator_${{ steps.versions.outputs.ppaVerStr }} - name: Create detached GPG signatures run: | gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator_*_amd64.deb - name: Upload artifacts uses: actions/upload-artifact@v3 with: name: linux-deb-package path: | cryptomator_*.dsc cryptomator_*.orig.tar.xz cryptomator_*.debian.tar.xz cryptomator_*_source.buildinfo cryptomator_*_source.changes cryptomator_*_amd64.deb cryptomator_*.asc - name: Publish on PPA if: startsWith(github.ref, 'refs/tags/') || inputs.dput run: dput ppa:sebastian-stenzel/cryptomator-beta cryptomator_*_source.changes - name: Publish Debian package on GitHub Releases if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v1 with: fail_on_unmatched_files: true token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }} files: | cryptomator_*_amd64.deb cryptomator_*.asc