Skip to content

Release with packages #11

Release with packages

Release with packages #11

name: Release with packages
on:
workflow_dispatch: # allow manual execution
push:
tags:
- 'v*'
jobs:
create_release_deb: # used to identify the output in other jobs
name: Create Release with Debian and RPM package
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
version: ${{ steps.get_version.outputs.version }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt update && sudo apt install -y rpm rpmlint qttools5-dev-tools qtchooser $(cat installer/deb/laps4linux-client/DEBIAN/control | grep 'Depends' | cut -d: -f2 | sed -e 's/,/ /g' | sed -r 's/\([<>=.0-9]+\)//g') $(cat installer/deb/laps4linux-runner/DEBIAN/control | grep 'Depends' | cut -d: -f2 | sed -e 's/,/ /g' | sed -r 's/\([<>=.0-9]+\)//g')
- id: get_version
name: Get version name for Github release title
run: cd laps-client && echo "version=$(python3 -c 'import laps_client; print(laps_client.__version__)')" >> $GITHUB_OUTPUT
- name: Execute deb build
run: cd installer/deb/ && ./build.sh
- name: Execute rpm build
run: cd installer/rpm/ && ./build.sh
- id: create_release
name: Create Github release
uses: actions/create-release@v1
env:
# this token is provided automatically by Actions with permissions declared above
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
draft: true # create a release draft - only the master of disaster is allowed to publish it
prerelease: false
release_name: Version ${{ steps.get_version.outputs.version }}
tag_name: ${{ github.ref }}
- name: Upload deb client artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: installer/deb/laps4linux-client.deb
asset_name: laps4linux-client-${{ steps.get_version.outputs.version }}.deb
asset_content_type: application/vnd.debian.binary-package
- name: Upload deb runner artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: installer/deb/laps4linux-runner.deb
asset_name: laps4linux-runner-${{ steps.get_version.outputs.version }}.deb
asset_content_type: application/vnd.debian.binary-package
- name: Get rpm client artifact
run: |
echo "ARTIFACT_PATH=$(find installer/rpm -name "laps4linux-client-*.rpm")" >> $GITHUB_ENV
echo "ARTIFACT_NAME=$(basename $(find installer/rpm -name "laps4linux-client-*.rpm"))" >> $GITHUB_ENV
- name: Upload rpm client artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ env.ARTIFACT_PATH }}
asset_name: ${{ env.ARTIFACT_NAME }}
asset_content_type: application/vnd.debian.binary-package
- name: Get rpm runner artifact
run: |
echo "ARTIFACT_PATH=$(find installer/rpm -name "laps4linux-runner-*.rpm")" >> $GITHUB_ENV
echo "ARTIFACT_NAME=$(basename $(find installer/rpm -name "laps4linux-runner-*.rpm"))" >> $GITHUB_ENV
- name: Upload rpm runner artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ env.ARTIFACT_PATH }}
asset_name: ${{ env.ARTIFACT_NAME }}
asset_content_type: application/vnd.debian.binary-package
create_pkg:
name: Create macOS package
runs-on: macos-13
needs: create_release_deb
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.8'
- name: Importing signing certificates
run: |
# create and unlock temporary keychain
KEYCHAIN_NAME=$RUNNER_TEMP/build.keychain
KEYCHAIN_PASS=$(head -c 8 /dev/urandom | od -An -tu8 | awk '{$1=$1};1')
security create-keychain -p $KEYCHAIN_PASS $KEYCHAIN_NAME
security default-keychain -s $KEYCHAIN_NAME
security set-keychain-settings -lut 21600 $KEYCHAIN_NAME
security unlock-keychain -p $KEYCHAIN_PASS $KEYCHAIN_NAME
# add certificate to keychain
CERT_FILE=build.p12
echo "${{ secrets.DEVELOPER_ID_APPLICATION_CERT_BASE64 }}" | base64 --decode > $CERT_FILE
security import $CERT_FILE -k $KEYCHAIN_NAME -P "${{ secrets.DEVELOPER_ID_APPLICATION_CERT_PASSWORD }}" -T /usr/bin/codesign >/dev/null 2>&1
rm -fr $CERT_FILE
#security find-identity -v #-p codesigning
# enable codesigning from a non user interactive shell
security set-key-partition-list -S apple-tool:,apple: -s -k $KEYCHAIN_PASS $KEYCHAIN_NAME >/dev/null 2>&1
- name: Create venv, install Python packages, compile binaries
run: |
cd laps-client
python -m venv venv
venv/bin/pip3 install pyinstaller .
venv/bin/pyinstaller laps-client.macos.spec
cd ..
- name: Execute package build
run: cd installer/macos/ && ./build.sh
env:
DEVELOPER_ACCOUNT_USERNAME: ${{ secrets.DEVELOPER_ACCOUNT_USERNAME }}
DEVELOPER_ACCOUNT_PASSWORD: ${{ secrets.DEVELOPER_ACCOUNT_PASSWORD }}
DEVELOPER_ACCOUNT_TEAM: ${{ secrets.DEVELOPER_ACCOUNT_TEAM }}
- name: Purging signing keychain
run: |
security delete-keychain $RUNNER_TEMP/build.keychain
- name: Upload artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
upload_url: ${{ needs.create_release_deb.outputs.upload_url }}
asset_path: installer/macos/laps4linux-client.dmg
asset_name: laps4linux-client-${{ needs.create_release_deb.outputs.version }}.dmg
asset_content_type: application/octet-stream
create_exe:
name: Create Windows package
runs-on: windows-2022
needs: create_release_deb
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.8'
- name: Create venv, install Python packages, compile binaries
run: |
cd laps-client
python -m venv venv
venv/Scripts/pip.exe install pyinstaller==5.13.2 .
venv/Scripts/pyinstaller.exe laps-client.windows.spec
cd ..
- name: Execute package build
shell: cmd
run: cd installer\windows\ && "%programfiles(x86)%\Inno Setup 6\iscc.exe" "setup.iss"
- name: Upload artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
upload_url: ${{ needs.create_release_deb.outputs.upload_url }}
asset_path: installer/windows/laps4linux-client.exe
asset_name: laps4linux-client-${{ needs.create_release_deb.outputs.version }}.exe
asset_content_type: application/vnd.microsoft.portable-executable