From 6f499057aafdcfa452a17c8595fa2c8dc436b159 Mon Sep 17 00:00:00 2001 From: Robert Honz Date: Thu, 3 Jul 2025 11:32:28 +0200 Subject: chore(workflow): 🚀 Add release and test build GitHub Actions workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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. --- .github/workflows/on-release-master.yml | 168 --------------------------- .github/workflows/release-or-test-build.yml | 174 ++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+), 168 deletions(-) delete mode 100644 .github/workflows/on-release-master.yml create mode 100644 .github/workflows/release-or-test-build.yml (limited to '.github') diff --git a/.github/workflows/on-release-master.yml b/.github/workflows/on-release-master.yml deleted file mode 100644 index 44cc708..0000000 --- a/.github/workflows/on-release-master.yml +++ /dev/null @@ -1,168 +0,0 @@ -name: release-master - -permissions: - contents: write - -defaults: - run: - shell: bash - -on: - # release: - # types: [published] - # branches: [master] - push: - tags: - - "v*.*.*" - -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: - 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: - 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: ["publish", "compute"] - 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 - 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}} 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}} -- cgit v1.3.1