Skip to content

mo-dkrz building the pyinstaller binary and creating the release 🧉 #301

mo-dkrz building the pyinstaller binary and creating the release 🧉

mo-dkrz building the pyinstaller binary and creating the release 🧉 #301

Workflow file for this run

name: Build binary & Create release
run-name: ${{ github.actor }} building the pyinstaller binary and creating the release 🧉
permissions:
pull-requests: write
contents: write
packages: write
on:
push:
branches: ["**"]
tags:
- "v*.*.*"
jobs:
tests:
uses: ./.github/workflows/ci_job.yml
release:
name: Create Release
runs-on: ubuntu-latest
steps:
- name: Create Release
if: startsWith(github.ref, 'refs/tags/')
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.ASSET_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
- name: Output Release URL File
if: startsWith(github.ref, 'refs/tags/')
run: echo "${{ steps.create_release.outputs.upload_url }}" > release_url.txt
- name: Save Release URL File for publish
if: startsWith(github.ref, 'refs/tags/')
uses: actions/upload-artifact@v4
with:
name: release_url
path: release_url.txt
build-windows:
needs: [release]
runs-on: ${{matrix.os}}
strategy:
matrix:
include:
- os: windows-2019
target: windows-x64
url: https://github.com/Code-Hex/Neo-cowsay/releases/download/v2.0.4/cowsay_2.0.4_Windows_x86_64.zip
sh: pwsh
extra: win
steps:
- uses: actions/checkout@v4
- name: Create conda env
uses: mamba-org/setup-micromamba@v1
with:
init-shell: powershell bash cmd.exe
environment-name: build
post-cleanup: 'all'
create-args: >
python=3.11
appdirs
ansible-core
libclang
pymysql
mysql-common
mysql-client
pyyaml
rich
toml
tomlkit
requests
cryptography
mock
pyinstaller
- name: Activate micromamba env
run: |
micromamba shell hook -s powershell | Out-String | Invoke-Expression
micromamba activate
shell: pwsh
- name: Set UTF-8 Code Page
run: |
chcp 65001
shell: pwsh
- name: Set Locale Environment Variables
run: |
setx LANG en_US.UTF-8
setx LC_ALL en_US.UTF-8
shell: pwsh
- name: Verify Locale and Code Page
run: |
chcp
echo %LANG%
echo %LC_ALL%
shell: pwsh
- name: Adding the evaluation config file
run: micromamba run -n build python src/freva_deployment/__init__.py
shell: pwsh
- name: Install dependencies
run: |
micromamba run -n build python -m pip install --upgrade-strategy only-if-needed .[${{matrix.extra}}]
micromamba run -n build python -m pip install assets/unix_mock
shell: pwsh
- name: Download cowsay
run: micromamba run -n build python pyinstaller/download_cowsay.py ${{ matrix.url }}
shell: pwsh
- name: Build with cmd pyinstaller for deploy-freva.exe
env:
PYTHONIOENCODING: utf-8
LANG: en_US.UTF-8
LC_ALL: en_US.UTF-8
run: |
micromamba run -n build python pyinstaller/pre-win.py
micromamba run -n build pyinstaller --noconfirm deploy-freva-all.spec
shell: pwsh
- name: Test built bindary
run: ./dist/deploy-freva/deploy-freva.exe --help
shell: pwsh
- name: Load Release URL File from release job
if: startsWith(github.ref, 'refs/tags/')
uses: actions/download-artifact@v4
with:
name: release_url
path: release_url
- name: Get version
id: version
run: |
echo "tag=$(python src/freva_deployment/__init__.py -v)" >> $GITHUB_OUTPUT
shell: bash
- name: Create ZIP archive of the folder
run: >
Compress-Archive -Path .\dist\deploy-freva\*
-DestinationPath .\deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.zip
shell: pwsh
- name: Get Release File Name & Upload URL
if: startsWith(github.ref, 'refs/tags/')
id: release_url
shell: bash
run: |
echo "url=$(cat release_url/release_url.txt)" >> $GITHUB_OUTPUT
- name: Upload Release Asset
if: startsWith(github.ref, 'refs/tags/')
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.ASSET_TOKEN }}
with:
upload_url: ${{ steps.release_url.outputs.url }}
asset_path: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.zip
asset_name: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.zip
asset_content_type: application/zip
- name: Upload cmd Asset
uses: actions/upload-artifact@v4
with:
path: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.zip
name: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.zip
retention-days: 7
build-osx:
name: Build packages
needs: [release]
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: macos-12
target: osx-x64
arch: x86_64
url: https://github.com/Code-Hex/Neo-cowsay/releases/download/v2.0.4/cowsay_2.0.4_macOS_x86_64.tar.gz
- os: macos-14
target: osx-arm64
arch: arm64
url: https://github.com/Code-Hex/Neo-cowsay/releases/download/v2.0.4/cowsay_2.0.4_macOS_arm64.tar.gz
steps:
- uses: actions/checkout@v4
- name: Create conda env
uses: mamba-org/setup-micromamba@v1
with:
init-shell: bash
environment-name: build
post-cleanup: 'all'
create-args: >
python=3.11
appdirs
ansible-core
pymysql
mysql-common
mysql-client
pyyaml
rich
toml
tomlkit
requests
cryptography
mock
pyinstaller
- name: Activate micromamba env
run: |
micromamba shell init --shell bash --root-prefix=~/micromamba
shell: bash
- name: Adding the evaluation config file
run: micromamba run -n build python src/freva_deployment/__init__.py
shell: bash
- name: Install dependencies
run: |
micromamba run -n build python -m pip install .[unix]
shell: bash
- name: Download cowsay
run: micromamba run -n build python pyinstaller/download_cowsay.py ${{ matrix.url }}
shell: bash
- name: Build with cmd pyinstaller for ${{ matrix.target }}
env:
PYTHONIOENCODING: utf-8
LANG: en_US.UTF-8
LC_ALL: en_US.UTF-8
run: >
micromamba run -n build pyinstaller --noconfirm deploy-freva-all.spec
shell: bash
- name: Test built bindary
run: ./dist/deploy-freva/deploy-freva --help
- name: Get version
id: version
run: |
echo "tag=$(python src/freva_deployment/__init__.py -v)" >> $GITHUB_OUTPUT
shell: bash
- name: Create tar.gz archive of the folder
run: >
tar -czvf
deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.tar.gz
-C ./dist deploy-freva
- name: Load Release URL File from release job
if: startsWith(github.ref, 'refs/tags/')
uses: actions/download-artifact@v4
with:
name: release_url
path: release_url
- name: Get Release File Name & Upload URL
if: startsWith(github.ref, 'refs/tags/')
id: release_url
shell: bash
run: |
echo "url=$(cat release_url/release_url.txt)" >> $GITHUB_OUTPUT
- name: Upload Release Asset
if: startsWith(github.ref, 'refs/tags/')
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.ASSET_TOKEN }}
with:
upload_url: ${{ steps.release_url.outputs.url }}
asset_path: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.tar.gz
asset_name: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.tar.gz
asset_content_type: application/gzip
- name: Upload cmd Asset
uses: actions/upload-artifact@v4
with:
path: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.tar.gz
name: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.tar.gz
retention-days: 7
build-linux:
name: Build packages
runs-on: ubuntu-latest
continue-on-error: false
needs: [release]
strategy:
matrix:
include:
- arch: linux/amd64
target: linux-x64
- arch: linux/arm64
target: linux-arm64
- arch: linux/arm/v7
target: linux-armvl7
- arch: linux/arm/v6
target: linux-armvl6
- arch: linux/ppc64le
target: linux-ppc64
- arch: linux/s390x
target: linux-s390x
- arch: linux/i386
target: linux-i386
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Adding the evaluation config file
run: python src/freva_deployment/__init__.py
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
with:
platforms: all
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
install: true
- name: Create Buildx builder
run: docker buildx create --use --name mybuilder --driver docker-container
- name: Inspect Buildx builder
run: docker buildx inspect --bootstrap
- name: Build cowsay binary with golang
run: >
docker run --rm -v $PWD:/src -e GOBIN=/src/pyinstaller
-w /src --platform ${{ matrix.arch }} golang:1.22-alpine
go install github.com/Code-Hex/Neo-cowsay/cmd/v2/cowsay@latest
- name: Build Docker image
uses: docker/build-push-action@v4
with:
file: Dockerfile
platforms: ${{ matrix.arch }}
push: false
load: true
tags: pyinstaller:${{ matrix.target }}
- name: Run PyInstaller in Docker
run: >
docker run --rm -v $PWD:/src -w /src --platform ${{ matrix.arch }}
-e PYTHONIOENCODING=utf-8 -e LANG=C pyinstaller:${{ matrix.target }}
pyinstaller --noconfirm deploy-freva-all.spec
- name: Test built bindary
run: >
docker run --rm -v $PWD:/src -w /src --platform ${{ matrix.arch }}
pyinstaller:${{ matrix.target }} /src/dist/deploy-freva/deploy-freva --help
- name: Get version
id: version
run: |
echo "tag=$(python src/freva_deployment/__init__.py -v)" >> $GITHUB_OUTPUT
shell: bash
- name: Create tar.gz archive of the folder
run: >
tar -czvf
deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.tar.gz
-C ./dist deploy-freva
- name: Load Release URL File from release job
if: startsWith(github.ref, 'refs/tags/')
uses: actions/download-artifact@v4
with:
name: release_url
path: release_url
- name: Get Release File Name & Upload URL
if: startsWith(github.ref, 'refs/tags/')
shell: bash
id: release_url
run: |
echo "url=$(cat release_url/release_url.txt)" >> $GITHUB_OUTPUT
- name: Upload Release Asset
if: startsWith(github.ref, 'refs/tags/')
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.ASSET_TOKEN }}
with:
upload_url: ${{ steps.release_url.outputs.url }}
asset_path: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.tar.gz
asset_name: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.tar.gz
asset_content_type: application/gzip
- name: Upload cmd Asset
uses: actions/upload-artifact@v4
with:
path: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.tar.gz
name: deploy-freva-v${{steps.version.outputs.tag}}-${{matrix.target}}.tar.gz
retention-days: 7
pypi:
name: Create Pip package
permissions:
id-token: write
needs: [tests, build-linux, build-windows, build-osx]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
-
name: Checkout
uses: actions/checkout@v4
-
name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
-
name: Adding the evaluation config file
run: python src/freva_deployment/__init__.py
-
name: Install flit
run: python -m pip install flit
-
name: Building freva-deployment 📦 with flit
run: flit build
-
name: publish distribution 📦 to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_API_TOKEN }}
skip-existing: true
verbose: true