name: ytld-sub Release on: push: # publish only when pushed to master branches: - master pull_request: env: ACTIONS_STEP_DEBUG: true ACTIONS_RUNNER_DEBUG: true jobs: version: name: version runs-on: ubuntu-latest outputs: pypi_version: ${{ steps.set_outputs.outputs.pypi_version }} local_version: ${{ steps.set_outputs.outputs.local_version }} init_contents: ${{ steps.set_outputs.outputs.init_contents }} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 ref: master - name: Set date and commit hash variables run: | echo "DATE=$(date +'%Y.%m.%d')" >> $GITHUB_ENV echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV - name: Count number of commits on master on day, minus 1 to account for post-push run: | echo "DATE_COMMIT_COUNT=$(($(git rev-list --count master --since='${{ env.DATE }} 00:00:00')-1))" >> $GITHUB_ENV - name: Set pypi and local version values run: | echo "LOCAL_VERSION=${{ env.DATE }}+${{ env.COMMIT_HASH }}" >> $GITHUB_ENV if [ ${{ env.DATE_COMMIT_COUNT }} -le "0" ] then echo "PYPI_VERSION=${{ env.DATE }}" >> $GITHUB_ENV else echo "PYPI_VERSION=${{ env.DATE }}.post${{ env.DATE_COMMIT_COUNT }}" >> $GITHUB_ENV fi - name: Test versions run: | echo "${{ env.PYPI_VERSION }}" echo "${{ env.LOCAL_VERSION }}" - id: set_outputs run: | echo "pypi_version=${{ env.PYPI_VERSION }}" >> "$GITHUB_OUTPUT" echo "local_version=${{ env.LOCAL_VERSION }}" >> "$GITHUB_OUTPUT" echo 'init_contents=__pypi_version__ = "${{ env.PYPI_VERSION }}";__local_version__ = "${{ env.LOCAL_VERSION }}"' >> "$GITHUB_OUTPUT" ################################################################################################## build-linux: name: build-linux needs: - version strategy: matrix: arch: [ "aarch64", "x86_64" ] include: - arch: "aarch64" runner: "ubuntu-24.04-arm" container: "quay.io/pypa/manylinux_2_28_aarch64" - arch: "x86_64" runner: "ubuntu-latest" container: "quay.io/pypa/manylinux_2_28_x86_64" runs-on: ${{ matrix.runner }} container: image: ${{ matrix.container }} steps: - uses: actions/checkout@v3 - name: Write version to init file run: | echo '${{ needs.version.outputs.init_contents }}' > src/ytdl_sub/__init__.py - name: Install base packages run: | cat /etc/os-release dnf update -y dnf install -y epel-release tar wget make gcc openssl-devel bzip2-devel libffi-devel zlib-devel - name: Install Python run: | wget https://www.python.org/ftp/python/3.12.9/Python-3.12.9.tar.xz tar -xf Python-3.12.9.tar.xz cd Python-3.12.9 && ./configure --with-ensurepip=install --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib" make -j 8 make altinstall python3.12 --version python3.12 -m ensurepip --upgrade - name: Build Package run: | python3.12 -m pip install -e . python3.12 -m pip install pyinstaller # Build executable pyinstaller ytdl-sub.spec mkdir -p /opt/builds chmod ugo+rwx dist/ytdl-sub dist/ytdl-sub -h mv dist/ytdl-sub /opt/builds/ytdl-sub_${{ matrix.arch }} - name: Upload build uses: actions/upload-artifact@v4 with: name: ytdl-sub_${{ matrix.arch }} path: /opt/builds/ytdl-sub_${{ matrix.arch }} ################################################################################################## build-windows: name: build-windows needs: - version runs-on: windows-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.12" - name: Write version to init file run: | echo '${{ needs.version.outputs.init_contents }}'> src/ytdl_sub/__init__.py - name: Build Package run: | python -m pip install -e . python -m pip install pyinstaller pyinstaller ytdl-sub.spec .\dist\ytdl-sub.exe -h - name: Upload build uses: actions/upload-artifact@v4 with: name: ytdl-sub_exe path: .\dist\ytdl-sub.exe ################################################################################################## github-release: name: github-release needs: - version - build-linux - build-windows runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Write version to init file run: | echo '${{ needs.version.outputs.init_contents }}' > src/ytdl_sub/__init__.py - name: Restore exe build uses: actions/download-artifact@v4 with: name: ytdl-sub_exe path: /opt/builds - name: Restore aarch64 build uses: actions/download-artifact@v4 with: name: ytdl-sub_aarch64 path: /opt/builds - name: Restore x86_64 build uses: actions/download-artifact@v4 with: name: ytdl-sub_x86_64 path: /opt/builds - name: Rename x86_64 build run: | mv /opt/builds/ytdl-sub_x86_64 /opt/builds/ytdl-sub - name: Inspect build directory, rename x86_64 build run: | ls -lh /opt/builds - name: Create Release if: ${{ github.ref == 'refs/heads/master' && !contains(github.event.head_commit.message, '[DEV]') && !contains(github.event.head_commit.message, '[DOCS]') }} id: create_release uses: softprops/action-gh-release@v1 with: name: ytdl-sub ${{ needs.version.outputs.pypi_version }} tag_name: ${{ needs.version.outputs.pypi_version }} body: ${{ github.event.head_commit.message }} draft: false prerelease: false files: | /opt/builds/ytdl-sub /opt/builds/ytdl-sub_aarch64 /opt/builds/ytdl-sub.exe pypi-publish: name: pypi-publish needs: - version runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.12' - name: Write version to init file run: | echo '${{ needs.version.outputs.init_contents }}' > src/ytdl_sub/__init__.py - name: Build wheel run: | # Build wheel pip install -e . pip install build python3 -m build - name: Publish distribution 📦 to PyPI if: ${{ github.ref == 'refs/heads/master' && !contains(github.event.head_commit.message, '[DEV]') && !contains(github.event.head_commit.message, '[DOCS]') }} uses: pypa/gh-action-pypi-publish@release/v1 with: password: ${{ secrets.PYPI_API_TOKEN }}