From 3c979e1f0500529c40f4718319a140c3e73ffb1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Fri, 8 Mar 2024 23:13:53 +0100 Subject: [PATCH] [workflows] release standalone executables in gdl-org/builds needs some form of release notes, probably just git commits since last stable release --- .github/workflows/executables.yml | 60 ++++++++++++++++++++++++++----- .github/workflows/pages.yml | 2 +- scripts/pyinstaller.py | 40 +++++++++++++++------ 3 files changed, 82 insertions(+), 20 deletions(-) diff --git a/.github/workflows/executables.yml b/.github/workflows/executables.yml index 9d49e875..b3433d44 100644 --- a/.github/workflows/executables.yml +++ b/.github/workflows/executables.yml @@ -1,10 +1,15 @@ -name: executables +name: Executables on: workflow_dispatch: push: branches: - master + tags-ignore: + - "*" + +env: + DATE_FORMAT: "%Y.%m.%d" jobs: build: @@ -31,19 +36,58 @@ jobs: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} ${{ matrix.architecture }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} architecture: ${{ matrix.architecture }} + - name: Date + run: echo "DATE=$(date '+${{ env.DATE_FORMAT }}')" >> "$GITHUB_ENV" + + - name: Update Version + # use Python since its behavior is consistent across operating systems + shell: python + run: | + import re + path = "./application/version.py" + with open(path) as fp: + content = fp.read() + content = re.sub( + r'\b(__version__ = "[^"]+)', + r"\1:${{ env.DATE }}", + content) + with open(path, "w") as fp: + fp.write(content) + - name: Build executable run: | pip install requests requests[socks] yt-dlp pyyaml ${{ matrix.python-packages }} pyinstaller - python scripts/pyinstaller.py + python ./scripts/pyinstaller.py --os '${{ matrix.os }}' --arch '${{ matrix.architecture }}' - - name: Upload executable - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: - name: gallery-dl-${{ matrix.os }}-${{ matrix.architecture }}-${{ matrix.python-version }} - path: | - dist + name: executable-${{ matrix.os }}-${{ matrix.architecture }}-${{ matrix.python-version }} + path: dist/* + retention-days: 1 + compression-level: 0 + + release: + + needs: build + runs-on: ubuntu-latest + + steps: + - uses: actions/download-artifact@v4 + + - name: Date + run: echo "DATE=$(date '+${{ env.DATE_FORMAT }}')" >> "$GITHUB_ENV" + + - uses: ncipollo/release-action@v1 + with: + owner: gdl-org + repo: builds + tag: ${{ env.DATE }} + artifacts: "executable-*/*" + allowUpdates: true + makeLatest: true + token: ${{ secrets.REPO_TOKEN }} diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index e4ac57b6..9ddb05ea 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -28,7 +28,7 @@ jobs: curl -L -X POST -H "Accept: application/vnd.github+json" - -H "Authorization: Bearer ${{ secrets.DISPATCH_TOKEN }}" + -H "Authorization: Bearer ${{ secrets.REPO_TOKEN }}" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/gdl-org/docs/actions/workflows/pages.yml/dispatches -d '{"ref":"master"}' diff --git a/scripts/pyinstaller.py b/scripts/pyinstaller.py index f30501b4..5a81a1b5 100755 --- a/scripts/pyinstaller.py +++ b/scripts/pyinstaller.py @@ -4,16 +4,34 @@ """Build a standalone executable using PyInstaller""" import PyInstaller.__main__ +import argparse import util -import os +import sys -PyInstaller.__main__.run([ - "--onefile", - "--console", - "--name", "gallery-dl." + ("exe" if os.name == "nt" else "bin"), - "--additional-hooks-dir", util.path("scripts"), - "--distpath", util.path("dist"), - "--workpath", util.path("build"), - "--specpath", util.path("build"), - util.path("gallery_dl", "__main__.py"), -]) + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("-o", "--os") + parser.add_argument("-a", "--arch") + args = parser.parse_args() + + name = "gallery-dl" + if args.os: + name = "{}_{}".format(name, args.os.partition("-")[0].lower()) + if args.arch == "x86": + name += "_x86" + + PyInstaller.__main__.run([ + "--onefile", + "--console", + "--name", name, + "--additional-hooks-dir", util.path("scripts"), + "--distpath", util.path("dist"), + "--workpath", util.path("build"), + "--specpath", util.path("build"), + util.path("gallery_dl", "__main__.py"), + ]) + + +if __name__ == "__main__": + sys.exit(main())