summaryrefslogtreecommitdiff
path: root/.github/workflows/release-or-test-build.yml
diff options
context:
space:
mode:
authorRobert Honz <exislow+github@gmail.com>2025-07-03 11:32:28 +0200
committerRobert Honz <exislow+github@gmail.com>2025-07-03 11:32:28 +0200
commit6f499057aafdcfa452a17c8595fa2c8dc436b159 (patch)
tree23033df37fa97806ff413b0b22f26837b3b0ebb5 /.github/workflows/release-or-test-build.yml
parentfa1ea1fc87344d34c1f86f21b2c6b7afafff45bd (diff)
downloadtidal-dl-ng-6f499057aafdcfa452a17c8595fa2c8dc436b159.tar.gz
chore(workflow): 🚀 Add release and test build GitHub Actions workflow
- Introduced a new workflow for managing releases and test builds. - Configured jobs for publishing, deploying documentation, and building GUI assets for multiple platforms. - Set up environment variables and matrix strategy for cross-platform builds.
Diffstat (limited to '.github/workflows/release-or-test-build.yml')
-rw-r--r--.github/workflows/release-or-test-build.yml174
1 files changed, 174 insertions, 0 deletions
diff --git a/.github/workflows/release-or-test-build.yml b/.github/workflows/release-or-test-build.yml
new file mode 100644
index 0000000..bed377d
--- /dev/null
+++ b/.github/workflows/release-or-test-build.yml
@@ -0,0 +1,174 @@
+name: release-or-test-build
+
+permissions:
+ contents: write
+
+defaults:
+ run:
+ shell: bash
+
+on:
+ # release:
+ # types: [published]
+ # branches: [master]
+ push:
+ tags:
+ - "v*.*.*"
+ branches:
+ - "test-build"
+
+env:
+ ASSET_EXTENSION: ".zip"
+ OUT_NAME_FILE: "TIDAL-Downloader-NG"
+ ARCH_MACOS_X64: "macos-x64"
+ ARCH_MACOS_ARM64: "macos-arm64"
+ ARCH_LINUX_X64: "linux-x64"
+ ARCH_LINUX_ARM64: "linux-arm64"
+ ARCH_WINDOWS_X64: "windows-x64"
+ ARCH_WINDOWS_ARM64: "windows-arm"
+
+jobs:
+ publish:
+ if: startsWith(github.ref, 'refs/tags/')
+ runs-on: ubuntu-24.04
+ steps:
+ - name: Check out
+ uses: actions/checkout@v4
+ - name: Set up the environment
+ uses: ./.github/actions/setup-poetry-env
+ - name: Export tag
+ id: vars
+ run: echo tag=${GITHUB_REF#refs/*/} >> $GITHUB_OUTPUT
+ - name: Build and publish (PyPi)
+ run: |
+ source .venv/bin/activate
+ poetry version $RELEASE_VERSION
+ make build-and-publish
+ env:
+ PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
+ RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
+ POETRY_REQUESTS_TIMEOUT: 120
+ - name: GitHub Release -- Create
+ id: release_create
+ uses: softprops/action-gh-release@v2
+ with:
+ draft: false
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ deploy-docs:
+ if: startsWith(github.ref, 'refs/tags/')
+ needs: publish
+ runs-on: ubuntu-24.04
+ steps:
+ - name: Check out
+ uses: actions/checkout@v4
+ - name: Set up the environment
+ uses: ./.github/actions/setup-poetry-env
+ - name: Deploy documentation
+ run: poetry run mkdocs gh-deploy --force
+ compute:
+ # Workaround to be able to use variables in matrix.
+ # See: https://stackoverflow.com/questions/74072206/github-actions-use-variables-in-matrix-definition
+ runs-on: ubuntu-24.04
+ outputs:
+ ASSET_EXTENSION: ${{ env.ASSET_EXTENSION }}
+ OUT_NAME_FILE: ${{ env.OUT_NAME_FILE }}
+ ARCH_MACOS_X64: ${{ env.ARCH_MACOS_X64 }}
+ ARCH_MACOS_ARM64: ${{ env.ARCH_MACOS_ARM64 }}
+ ARCH_LINUX_X64: ${{ env.ARCH_LINUX_X64 }}
+ ARCH_LINUX_ARM64: ${{ env.ARCH_LINUX_ARM64 }}
+ ARCH_WINDOWS_X64: ${{ env.ARCH_WINDOWS_X64 }}
+ ARCH_WINDOWS_ARM64: ${{ env.ARCH_WINDOWS_ARM64 }}
+ steps:
+ - name: Compute outputs
+ run: |
+ echo "ASSET_EXTENSION=${{ env.ASSET_EXTENSION }}" >> $GITHUB_OUTPUT
+ echo "OUT_NAME_FILE=${{ env.OUT_NAME_FILE }}" >> $GITHUB_OUTPUT
+ echo "ARCH_MACOS_X64=${{ env.ARCH_MACOS_X64 }}" >> $GITHUB_OUTPUT
+ echo "ARCH_MACOS_ARM64=${{ env.ARCH_MACOS_ARM64 }}" >> $GITHUB_OUTPUT
+ echo "ARCH_LINUX_X64=${{ env.ARCH_LINUX_X64 }}" >> $GITHUB_OUTPUT
+ echo "ARCH_LINUX_ARM64=${{ env.ARCH_LINUX_ARM64 }}" >> $GITHUB_OUTPUT
+ echo "ARCH_WINDOWS_X64=${{ env.ARCH_WINDOWS_X64 }}" >> $GITHUB_OUTPUT
+ echo "ARCH_WINDOWS_ARM64=${{ env.ARCH_WINDOWS_ARM64 }}" >> $GITHUB_OUTPUT
+ build-gui-and-upload-assets:
+ needs: ["compute"]
+ if: always() && needs.compute.result == 'success' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/test-build')
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - os: "macos-13"
+ TARGET: "macos-13"
+ OS_ARCH: ${{needs.compute.outputs.ARCH_MACOS_X64}}
+ CMD_BUILD: >
+ brew install create-dmg &&
+ source $VENV &&
+ poetry run make gui-macos-dmg-intel APP_NAME=${{needs.compute.outputs.OUT_NAME_FILE}} &&
+ cd dist &&
+ zip -r ${{needs.compute.outputs.OUT_NAME_FILE}}_${{needs.compute.outputs.ARCH_MACOS_X64}}${{needs.compute.outputs.ASSET_EXTENSION}} ${{needs.compute.outputs.OUT_NAME_FILE}}.dmg -x "*.DS_Store" &&
+ cd ..
+ - os: "macos-14"
+ TARGET: "macos-14 M1"
+ OS_ARCH: ${{needs.compute.outputs.ARCH_MACOS_ARM64}}
+ CMD_BUILD: >
+ brew install create-dmg &&
+ source $VENV &&
+ poetry run make gui-macos-dmg APP_NAME=${{needs.compute.outputs.OUT_NAME_FILE}} &&
+ cd dist &&
+ zip -r ${{needs.compute.outputs.OUT_NAME_FILE}}_${{needs.compute.outputs.ARCH_MACOS_ARM64}}${{needs.compute.outputs.ASSET_EXTENSION}} ${{needs.compute.outputs.OUT_NAME_FILE}}.dmg -x "*.DS_Store" &&
+ cd ..
+ - os: "ubuntu-22.04"
+ TARGET: "ubuntu-22.04"
+ OS_ARCH: ${{needs.compute.outputs.ARCH_LINUX_X64}}
+ CMD_BUILD: >
+ source $VENV &&
+ poetry run make gui-linux APP_NAME=${{needs.compute.outputs.OUT_NAME_FILE}} &&
+ cd dist &&
+ zip -r ${{needs.compute.outputs.OUT_NAME_FILE}}_${{needs.compute.outputs.ARCH_LINUX_X64}}${{needs.compute.outputs.ASSET_EXTENSION}} ${{needs.compute.outputs.OUT_NAME_FILE}} &&
+ cd ..
+ - os: "ubuntu-22.04-arm"
+ TARGET: "ubuntu-22.04-arm"
+ OS_ARCH: ${{needs.compute.outputs.ARCH_LINUX_ARM64}}
+ CMD_BUILD: >
+ source $VENV &&
+ poetry run make gui-linux APP_NAME=${{needs.compute.outputs.OUT_NAME_FILE}} &&
+ cd dist &&
+ zip -r ${{needs.compute.outputs.OUT_NAME_FILE}}_${{needs.compute.outputs.ARCH_LINUX_ARM64}}${{needs.compute.outputs.ASSET_EXTENSION}} ${{needs.compute.outputs.OUT_NAME_FILE}} &&
+ cd ..
+ - os: "windows-2022"
+ TARGET: "windows-2022"
+ OS_ARCH: ${{needs.compute.outputs.ARCH_WINDOWS_X64}}
+ CMD_BUILD: >
+ choco install zip make -y &&
+ source $VENV &&
+ poetry run make gui-windows APP_NAME=${{needs.compute.outputs.OUT_NAME_FILE}} &&
+ cd dist &&
+ zip -r ${{needs.compute.outputs.OUT_NAME_FILE}}_${{needs.compute.outputs.ARCH_WINDOWS_X64}}${{needs.compute.outputs.ASSET_EXTENSION}} ${{needs.compute.outputs.OUT_NAME_FILE}} &&
+ cd ..
+ - os: "windows-11-arm"
+ TARGET: "windows-11-arm"
+ OS_ARCH: ${{needs.compute.outputs.ARCH_WINDOWS_ARM64}}
+ CMD_BUILD: >
+ choco install zip make -y &&
+ source $VENV &&
+ poetry run make gui-windows APP_NAME=${{needs.compute.outputs.OUT_NAME_FILE}} &&
+ cd dist &&
+ zip -r ${{needs.compute.outputs.OUT_NAME_FILE}}_${{needs.compute.outputs.ARCH_WINDOWS_ARM64}}${{needs.compute.outputs.ASSET_EXTENSION}} ${{needs.compute.outputs.OUT_NAME_FILE}} &&
+ cd ..
+ runs-on: ${{ matrix.os }}
+ steps:
+ - name: Check out
+ uses: actions/checkout@v4
+ - name: Set up the environment
+ uses: ./.github/actions/setup-poetry-env
+ - name: Build with pyinstaller for ${{matrix.TARGET}}
+ run: ${{matrix.CMD_BUILD}}
+ - name: Upload Release Asset
+ if: startsWith(github.ref, 'refs/tags/')
+ id: upload-release-asset
+ uses: softprops/action-gh-release@v2
+ env:
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
+ with:
+ files: |
+ ./dist/${{needs.compute.outputs.OUT_NAME_FILE}}_${{matrix.OS_ARCH}}${{needs.compute.outputs.ASSET_EXTENSION}}