name: Publish Installers on: push: branches: [master, beta, nightly] tags: [v*] jobs: build-installer: name: Build ${{ matrix.os_upper }} Installer runs-on: ${{ matrix.os }}-latest strategy: fail-fast: false matrix: include: - os: 'windows' os_upper: 'Windows' ext: 'exe' - os: 'macos' os_upper: 'MacOS' ext: 'pkg' steps: - name: Checkout Code uses: actions/checkout@v2 - name: Set Release Version id: get_version shell: bash run: | if [[ $GITHUB_REF == refs/tags/* ]]; then echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV VERSION_NSIS=${GITHUB_REF#refs/tags/v}.1 echo ::set-output name=VERSION_NSIS::${VERSION_NSIS/%-beta.1/.0} echo ::set-output name=VERSION::${GITHUB_REF#refs/tags/v} echo ::set-output name=RELEASE_VERSION::${GITHUB_REF#refs/tags/} else echo "VERSION=0.0.0" >> $GITHUB_ENV echo ::set-output name=VERSION_NSIS::0.0.0.0 echo ::set-output name=VERSION::0.0.0 echo ::set-output name=RELEASE_VERSION::${GITHUB_SHA::7} fi echo $GITHUB_SHA > version.txt - name: Set Up Python uses: actions/setup-python@v2 with: python-version: 3.8 - name: Cache Dependencies id: cache_dependencies uses: actions/cache@v2 with: path: ~\AppData\Local\pip\Cache key: ${{ runner.os }}-pip-${{ hashFiles(format('package/requirements-{0}.txt', matrix.os)) }} restore-keys: ${{ runner.os }}-pip- - name: Install Dependencies run: | python -m pip install --upgrade pip pip install -r package/requirements-${{ matrix.os }}.txt - name: Build Package run: | pyinstaller -y ./package/Tautulli-${{ matrix.os }}.spec - name: Create Windows Installer if: matrix.os == 'windows' uses: joncloud/makensis-action@v1.2 with: script-file: ./package/Tautulli.nsi arguments: > /DVERSION=${{ steps.get_version.outputs.VERSION_NSIS }} /DINSTALLER_NAME=..\Tautulli-windows-${{ steps.get_version.outputs.RELEASE_VERSION }}-x64.exe include-more-plugins: true include-custom-plugins-path: package/nsis-plugins - name: Create MacOS Installer if: matrix.os == 'macos' run: | sudo pkgbuild \ --install-location /Applications \ --version ${{ steps.get_version.outputs.VERSION }} \ --component ./dist/Tautulli.app \ --scripts ./package/macos-scripts \ Tautulli-macos-${{ steps.get_version.outputs.RELEASE_VERSION }}-x64.pkg - name: Upload Installer uses: actions/upload-artifact@v2 with: name: Tautulli-${{ matrix.os }}-installer path: Tautulli-${{ matrix.os }}-${{ steps.get_version.outputs.RELEASE_VERSION }}-x64.${{ matrix.ext }} - name: Post Status to Discord uses: sarisia/actions-status-discord@v1 if: always() with: webhook: ${{ secrets.DISCORD_WEBHOOK }} status: ${{ job.status }} title: Build ${{ matrix.os_upper }} Installer nofail: true release: name: Release Installers needs: build-installer if: startsWith(github.ref, 'refs/tags/') && always() runs-on: ubuntu-latest steps: - name: Get Build Job Status uses: technote-space/workflow-conclusion-action@v1 - name: Checkout Code uses: actions/checkout@v2 - name: Set Release Version id: get_version run: | echo ::set-output name=RELEASE_VERSION::${GITHUB_REF#refs/tags/} - name: Download Installers if: env.WORKFLOW_CONCLUSION == 'success' uses: actions/download-artifact@v2 - name: Get Changelog id: get_changelog run: | changelog=$( sed -n '/^## /{p; :loop n; p; /^## /q; b loop}' CHANGELOG.md \ | sed '$d' | sed '$d' | sed '$d' | sed ':a;N;$!ba;s/\n/%0A/g' ) echo ::set-output name=CHANGELOG::$changelog - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ steps.get_version.outputs.RELEASE_VERSION }} release_name: Tautulli ${{ steps.get_version.outputs.RELEASE_VERSION }} body: | ## Changelog ##${{ steps.get_changelog.outputs.CHANGELOG }} draft: false prerelease: ${{ endsWith(steps.get_version.outputs.RELEASE_VERSION, '-beta') }} - name: Upload Windows Installer if: env.WORKFLOW_CONCLUSION == 'success' uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./Tautulli-windows-${{ steps.get_version.outputs.RELEASE_VERSION }}-x64.exe asset_name: Tautulli-windows-${{ steps.get_version.outputs.RELEASE_VERSION }}-x64.exe asset_content_type: application/vnd.microsoft.portable-executable - name: Upload MacOS Installer if: env.WORKFLOW_CONCLUSION == 'success' uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./Tautulli-macos-${{ steps.get_version.outputs.RELEASE_VERSION }}-x64.pkg asset_name: Tautulli-macos-${{ steps.get_version.outputs.RELEASE_VERSION }}-x64.pkg asset_content_type: application/vnd.apple.installer+xml