diff options
| author | Robert Honz <exislow+github@gmail.com> | 2025-07-03 11:32:28 +0200 |
|---|---|---|
| committer | Robert Honz <exislow+github@gmail.com> | 2025-07-03 11:32:28 +0200 |
| commit | 6f499057aafdcfa452a17c8595fa2c8dc436b159 (patch) | |
| tree | 23033df37fa97806ff413b0b22f26837b3b0ebb5 /.github/workflows/release-or-test-build.yml | |
| parent | fa1ea1fc87344d34c1f86f21b2c6b7afafff45bd (diff) | |
| download | tidal-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.yml | 174 |
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}} |
