name: ytld-sub Release on: push: # publish only when pushed to master branches: - master pull_request: 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 # Needed for correct commit count. TODO: define once using GH actions - name: Set version envs 1/3 run: | echo "DATE=$(date +'%Y.%m.%d')" >> $GITHUB_ENV echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV - name: Set version envs 2/3 run: | echo "DATE_COMMIT_COUNT=$(git rev-list --count master --since='${{ env.DATE }} 00:00:00')" >> $GITHUB_ENV - name: Set version envs 3/3 run: | echo "LOCAL_VERSION=${{ env.DATE }}+${{ env.COMMIT_HASH }}" >> $GITHUB_ENV if [ ${{ env.DATE_COMMIT_COUNT }} = "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 runs-on: ubuntu-latest container: quay.io/pypa/manylinux_2_28_x86_64 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 Python run: | cat /etc/os-release dnf update -y dnf install -y epel-release dnf install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make wget https://www.python.org/ftp/python/3.10.10/Python-3.10.10.tar.xz tar -xf Python-3.10.10.tar.xz cd Python-3.10.10 && ./configure --with-ensurepip=install --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib" make -j 8 make altinstall python3.10 --version - name: Build Package run: | python3.10 -m pip install --upgrade pip python3.10 -m pip install -e .[build] # Build executable pyinstaller ytdl-sub.spec mkdir -p /opt/builds mv dist/ytdl-sub /opt/builds/ytdl-sub_linux - name: Save build to cache uses: actions/cache@v3 with: path: /opt/builds/ytdl-sub_linux key: ${{ github.sha }}-linux build-arm: name: build-arm needs: - version runs-on: ubuntu-latest strategy: matrix: arch: [ "aarch64", "armv7", "armv6" ] steps: - uses: actions/checkout@v3 - name: Write version to init file run: | echo '${{ needs.version.outputs.init_contents }}' > src/ytdl_sub/__init__.py - uses: uraimo/run-on-arch-action@v2 name: Run commands id: runcmd with: arch: ${{ matrix.arch }} distro: alpine_latest # Mount the artifacts directory as /artifacts in the container dockerRunArgs: | --volume "/opt/builds:/builds" # Set an output parameter `uname` for use in subsequent steps run: | apk add python3 python3-dev py3-pip musl-dev libc-dev libffi-dev gcc g++ pwgen zlib-dev rust cargo pip3 install --upgrade pip pip3 install pyinstaller pyinstaller --log-level=DEBUG ytdl-sub.spec mv dist/ytdl-sub /builds/ytdl-sub_${{ matrix.arch }} - name: Save build to cache uses: actions/cache@v3 with: path: /opt/builds/ytdl-sub_${{ matrix.arch }} key: ${{ github.sha }}-${{ matrix.arch }} ################################################################################################## github-release: name: github-release needs: - version - build-linux - build-arm 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 linux build uses: actions/cache@v3 with: path: /opt/builds/ytdl-sub_linux key: ${{github.sha}}-linux - name: Restore aarch64 build uses: actions/cache@v3 with: path: /opt/builds/ytdl-sub_aarch64 key: ${{github.sha}}-aarch64 - name: Restore armv7 build uses: actions/cache@v3 with: path: /opt/builds/ytdl-sub_armv7 key: ${{github.sha}}-armv7 - name: Restore armv6 build uses: actions/cache@v3 with: path: /opt/builds/ytdl-sub_armv6 key: ${{github.sha}}-armv6 - name: Create Release if: ${{ github.ref == 'refs/heads/master' }} 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: | See https://github.com/jmbannon/ytdl-sub#installation for installation steps draft: false prerelease: false files: | /opt/builds/ytdl-sub_linux /opt/builds/ytdl-sub_aarch64 /opt/builds/ytdl-sub_armv7 /opt/builds/ytdl-sub_armv6 pypi-publish: name: pypi-publish needs: - version runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.10' - 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' }} uses: pypa/gh-action-pypi-publish@release/v1 with: password: ${{ secrets.PYPI_API_TOKEN }}