improvements #10
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
on: | ||
workflow_call: | ||
inputs: | ||
package_name: | ||
description: 'Name of package, e.g. "alphadia", "peptdeep", ..' | ||
required: true | ||
type: string | ||
commit_to_release: | ||
description: 'Enter commit hash to release (example: ef4037cb571f99cb4919b520fde7174972aae473)' | ||
type: string | ||
required: true | ||
tag_to_release: | ||
description: 'Enter tag to release (example: v1.5.5). Note that the version needs to be bumped already.' | ||
type: string | ||
required: true | ||
# optional switches | ||
build_nodejs_ui: | ||
description: 'Whether or not a nodejs UI needs to be built' | ||
default: false | ||
type: boolean | ||
test_backend: | ||
description: 'Whether or not the backend should be tested' | ||
default: false | ||
type: boolean | ||
python_version: | ||
description: "Python version to be used" | ||
default: "3.9" # TODO change to 3.11 | ||
type: string | ||
name: Create Draft Release | ||
jobs: | ||
Get_New_Version: | ||
runs-on: ubuntu-latest | ||
outputs: | ||
new_version: ${{ steps.check_release_tag.outputs.new_version }} | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
with: | ||
ref: ${{ inputs.commit_to_release }} | ||
- name: Check release tag | ||
id: check_release_tag | ||
shell: bash -le {0} | ||
run: | | ||
CURRENT_VERSION=$(grep "__version__" ${{ inputs.package_name }}/__init__.py | cut -f3 -d ' ' | sed 's/"//g') | ||
if [ "v${CURRENT_VERSION}" != "${{ inputs.tag_to_release }}" ]; then | ||
echo Code version "v${CURRENT_VERSION}" does not match the tag to release ${{ inputs.tag_to_release }} | ||
fi | ||
echo "new_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT | ||
# exit 1 #TODO add again | ||
- uses: mukunku/[email protected] | ||
id: check-tag | ||
with: | ||
tag: ${{ inputs.tag_to_release }} | ||
- name: Check if tag already exists | ||
run: | | ||
echo "Tag already exists!" | ||
exit 1 | ||
if: steps.check-tag.outputs.exists == 'true' | ||
Create_Draft_Release: | ||
runs-on: ubuntu-latest | ||
needs: Get_New_Version | ||
outputs: | ||
upload_url: ${{ steps.draft_release.outputs.upload_url }} | ||
steps: | ||
- name: Draft Release | ||
id: draft_release | ||
# TODO this action is deprecated, replace with https://github.com/ncipollo/release-action | ||
# cf. https://github.com/actions/create-release/issues/119#issuecomment-783010321 | ||
uses: actions/create-release@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
tag_name: ${{ inputs.tag_to_release }} | ||
release_name: ${{ inputs.tag_to_release }} | ||
draft: true | ||
prerelease: false | ||
Create_MacOS_Installer: | ||
needs: [Create_Draft_Release, Get_New_Version] | ||
env: | ||
ARCH: x64 # this can be overwritten during the course of the job | ||
EAGER_IMPORT: true | ||
ARTIFACT_NAME: na # will be set downstream | ||
GH_TOKEN: ${{ github.token }} | ||
strategy: | ||
matrix: | ||
runner: | ||
- macos-latest-xlarge # this is ARM | ||
- macos-13 # this is not ARM | ||
runs-on: ${{matrix.runner}} | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
with: | ||
ref: ${{ inputs.commit_to_release }} | ||
- name: Check if OS supported | ||
if: ${{ always() && hashFiles('release/macos/*') == '' }} | ||
run: | | ||
gh run cancel ${{ github.run_id }} | ||
gh run watch ${{ github.run_id }} | ||
- name: Install conda | ||
uses: conda-incubator/setup-miniconda@v3 | ||
with: | ||
miniconda-version: "latest" | ||
auto-update-conda: true | ||
activate-environment: alphax_release | ||
python-version: "${{ inputs.python_version }}" | ||
- name: Conda info | ||
shell: bash -el {0} | ||
run: | | ||
conda info | ||
- name: Install pyinstaller 6.10.0 | ||
shell: bash -el {0} | ||
run: | | ||
pip install pyinstaller==6.10.0 | ||
pip freeze | ||
- name: Build backend | ||
shell: bash -el {0} | ||
run: | | ||
release/macos/build_backend_macos.sh | ||
pip freeze | ||
ls * | ||
ls dist/* | ||
- name: Test backend | ||
if: ${{ inputs.test_backend }} | ||
shell: bash -el {0} | ||
run: | | ||
EXECUTABLE=dist/${{ inputs.package_name }}/${{ inputs.package_name }} | ||
echo testing ${EXECUTABLE} .. | ||
eval ${EXECUTABLE} --version | ||
# Build GUI | ||
- name: Setup Node.js | ||
if: ${{ inputs.build_nodejs_ui }} | ||
uses: actions/setup-node@v4 | ||
- name: Build Node.js GUI | ||
if: ${{ inputs.build_nodejs_ui }} | ||
run: | | ||
release/macos/build_gui_macos.sh | ||
ls * | ||
# combine backend and GUI | ||
- name: Build installer | ||
shell: bash -el {0} | ||
run: | | ||
release/macos/build_pkg_macos.sh | ||
ls * | ||
ls dist/* | ||
ARTIFACT_NAME=${{ inputs.package_name }}-${{ needs.Get_New_Version.outputs.new_version }}-darwin-${{ env.ARCH }}.pkg | ||
- name: Test installer | ||
id: test_installer | ||
shell: bash -l {0} | ||
run: | | ||
sudo installer -pkg dist/${{env.ARTIFACT_NAME}} -target / | ||
exit 0 | ||
- name: Upload installer | ||
uses: actions/upload-release-asset@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ needs.Create_Draft_Release.outputs.upload_url }} | ||
asset_path: dist/${{env.ARTIFACT_NAME}} | ||
asset_name: ${{env.ARTIFACT_NAME}} | ||
asset_content_type: application/zip | ||
# Fallback upload to be able to manually debug the artifact | ||
- name: Upload installer as job asset | ||
if: ${{ failure() && steps.test_installer.conclusion == 'failure' }} | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ${{env.ARTIFACT_NAME}} | ||
path: dist/${{env.ARTIFACT_NAME}} | ||
if-no-files-found: error | ||
Create_Linux_Installer: | ||
needs: [ Create_Draft_Release, Get_New_Version ] | ||
env: | ||
ARCH: x64 # this can be overwritten during the course of the job | ||
GH_TOKEN: ${{ github.token }} | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
with: | ||
ref: ${{ inputs.commit_to_release }} | ||
- name: Check if OS supported | ||
if: ${{ always() && hashFiles('release/linux/*') == '' }} | ||
run: | | ||
gh run cancel ${{ github.run_id }} | ||
gh run watch ${{ github.run_id }} | ||
- name: Install conda | ||
uses: conda-incubator/setup-miniconda@v3 | ||
with: | ||
miniconda-version: "latest" | ||
auto-update-conda: true | ||
activate-environment: alphax_release | ||
python-version: "${{ inputs.python_version }}" | ||
- name: Conda info | ||
shell: bash -el {0} | ||
run: | | ||
conda info | ||
- name: Install pyinstaller 6.10.0 | ||
shell: bash -el {0} | ||
run: | | ||
pip install pyinstaller==6.10.0 | ||
pip freeze | ||
- name: Build backend | ||
shell: bash -l {0} | ||
run: | | ||
release/linux/build_backend_linux.sh | ||
pip freeze | ||
ls * | ||
ls dist/* | ||
- name: Test backend | ||
if: ${{ inputs.test_backend }} | ||
shell: bash -el {0} | ||
run: | | ||
EXECUTABLE=dist/${{ inputs.package_name }}/${{ inputs.package_name }} | ||
echo testing ${EXECUTABLE} .. | ||
eval ${EXECUTABLE} --version | ||
# TODO: building node.js GUI not supported yet for linux | ||
- name: Build Installer | ||
shell: bash -l {0} | ||
run: | | ||
release/linux/build_installer_linux.sh | ||
ls * | ||
ls dist/* | ||
- name: Test installer | ||
shell: bash -l {0} | ||
run: | | ||
sudo dpkg -i dist/${{ inputs.package_name }}-${{ needs.Get_New_Version.outputs.new_version }}-linux-${{ env.ARCH }}.deb | ||
- name: Upload installer | ||
id: upload-release-asset | ||
uses: actions/upload-release-asset@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ needs.Create_Draft_Release.outputs.upload_url }} | ||
asset_path: dist/${{ inputs.package_name }}-${{ needs.Get_New_Version.outputs.new_version }}-linux-${{ env.ARCH }}.deb | ||
asset_name: ${{ inputs.package_name }}-${{ needs.Get_New_Version.outputs.new_version }}-linux-${{ env.ARCH }}.deb | ||
asset_content_type: application/zip | ||
Create_Not_Supported_Installer: # TODO remove again | ||
needs: [Create_Draft_Release, Get_New_Version] | ||
env: | ||
ARCH: x64 # this can be overwritten during the course of the job | ||
GH_TOKEN: ${{ github.token }} | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
with: | ||
ref: ${{ inputs.commit_to_release }} | ||
- name: Check if OS supported | ||
if: ${{ always() && hashFiles('release/sdfdssf/*') == '' }} | ||
run: | | ||
gh run cancel ${{ github.run_id }} | ||
gh run watch ${{ github.run_id }} | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
with: | ||
ref: ${{ inputs.commit_to_release }} | ||
Create_Windows_Installer: | ||
needs: [Create_Draft_Release, Get_New_Version] | ||
env: | ||
ARCH: x64 # this can be overwritten during the course of the job | ||
GH_TOKEN: ${{ github.token }} | ||
runs-on: windows-latest | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
with: | ||
ref: ${{ inputs.commit_to_release }} | ||
- name: Check if OS supported | ||
if: ${{ always() && hashFiles('release/windows/*') == '' }} | ||
run: | | ||
gh run cancel ${{ github.run_id }} | ||
gh run watch ${{ github.run_id }} | ||
- name: Install conda | ||
uses: conda-incubator/setup-miniconda@v3 | ||
with: | ||
miniconda-version: "latest" | ||
auto-update-conda: true | ||
activate-environment: alphax_release | ||
python-version: "${{ inputs.python_version }}" | ||
- name: Conda info | ||
shell: bash -el {0} | ||
run: | | ||
conda info | ||
- name: Install pyinstaller 6.10.0 | ||
shell: bash -el {0} | ||
run: | | ||
pip install pyinstaller==6.10.0 | ||
pip freeze | ||
- name: Build backend | ||
shell: powershell | ||
run: | | ||
release/windows/build_backend.ps1 | ||
pip freeze | ||
ls * | ||
ls dist/* | ||
- name: Test Backend | ||
if: ${{ inputs.test_backend }} | ||
shell: powershell | ||
run: | | ||
dist\${{ inputs.package_name }}\${{ inputs.package_name }}.exe --version | ||
# Build GUI | ||
- name: Setup Node.js | ||
if: ${{ inputs.build_nodejs_ui }} | ||
uses: actions/setup-node@v4 | ||
- name: Build Node.js GUI | ||
if: ${{ inputs.build_nodejs_ui }} | ||
shell: powershell | ||
run: | | ||
release/windows/build_gui.ps1 | ||
# combine backend and GUI | ||
- name: Check if Innosetup is installed | ||
if: ${{ inputs.build_nodejs_ui }} | ||
shell: powershell | ||
run: | | ||
if (-not (Test-Path "C:\Program Files (x86)\Inno Setup 6\ISCC.exe")) { | ||
Write-Host "Inno Setup is not installed" | ||
exit 1 | ||
} | ||
- name: Build Installer | ||
shell: powershell | ||
run: | | ||
release/windows/build_installer.ps1 | ||
ls * | ||
ls dist/* | ||
- name: Test installer | ||
shell: bash -l {0} | ||
run: | | ||
release/windows/dist/${{ inputs.package_name }}-${{ needs.Get_New_Version.outputs.new_version }}-win-${{ env.ARCH }}.exe //verysilent //SUPPRESSMSGBOXES //log=log.txt //noicons //tasks= //portable=1 | ||
cat log.txt | ||
- name: Upload installer | ||
uses: actions/upload-release-asset@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ needs.Create_Draft_Release.outputs.upload_url }} | ||
asset_path: release/windows/dist/${{ inputs.package_name }}-${{ needs.Get_New_Version.outputs.new_version }}-win-${{ env.ARCH }}.exe | ||
asset_name: ${{ inputs.package_name }}-${{ needs.Get_New_Version.outputs.new_version }}-win-${{ env.ARCH }}.exe | ||
asset_content_type: application/zip |