From 74e51e6a829d48db1b4da4f1eac935647d1655cc Mon Sep 17 00:00:00 2001 From: Richard Si <63936253+ichard26@users.noreply.github.com> Date: Sun, 1 Nov 2020 16:17:23 -0500 Subject: [PATCH] Automatically build and upload binaries on release (#1743) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This commit adds a new GitHub Actions workflow that builds self-contained binaries / executables and uploads them as release assets to the triggering release. Publishing a release, drafting one doesn't count, will trigger this workflow. I personally used GitHub Actions only because it's the CI/CD platform(?) I am familiar with. Only Windows and Linux binaries are supported since I don't have any systems running Mac OS. For Linux, I had originally planned to use the manylinux2010 docker image the PyPA provides for highly compatible wheel building, but unfortunately it wasn't feasible due to GitHub Actions and PyInstaller incompatibilities. As a stopgap the oldest versions of Linux and Windows are used although Windows Server 2019 isn't that old nor is Ubuntu 16.04! I guess someone (maybe me) could work out something else if compatibility is big problem. A few things you should know about the workflow: - You don't need to set the `GITHUB_TOKEN` secret as it is automatically provided by GitHub. - matrix.pathsep is used because PyInstaller configuration's format is OS dependent for some reason ... Also it's worth mentioning that Black once had Travis CI and AppVeyor configuration that did the same thing as this commit. They were committed in mid 2018 and worked (somewhat) well. Eventually we stopped using AppVeyor and the refactor to packages broke the Travis CI config. This commit replaces the still existing and broken Travis CI config wholesale. Co-authored-by: Anders Fredrik Kiær <31612826+anders-kiaer@users.noreply.github.com> - Anders told me that I could get the release asset upload URL directly from the github.event.release payload. I originally planned to use bruceadams/get-release to get such URL. --- .github/workflows/upload_binary.yml | 51 +++++++++++++++++++++++++++++ .travis.yml | 14 -------- CHANGES.md | 5 +++ 3 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 .github/workflows/upload_binary.yml diff --git a/.github/workflows/upload_binary.yml b/.github/workflows/upload_binary.yml new file mode 100644 index 0000000..46d92ab --- /dev/null +++ b/.github/workflows/upload_binary.yml @@ -0,0 +1,51 @@ +name: Upload self-contained binaries + +on: + release: + types: [published] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + python-version: [3.7] + os: [ubuntu-16.04, windows-2019] + include: + - os: windows-2019 + pathsep: ";" + executable_suffix: ".exe" + executable_mime: "application/vnd.microsoft.portable-executable" + - os: ubuntu-16.04 + pathsep: ":" + executable_suffix: ".elf" + executable_mime: "application/x-executable" + + steps: + - uses: actions/checkout@v2 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip wheel setuptools + python -m pip install . + python -m pip install pyinstaller + + - name: Build binary + run: | + python -m PyInstaller -F --name black${{ matrix.executable_suffix }} --add-data 'src/blib2to3${{ matrix.pathsep }}blib2to3' src/black/__main__.py + + - name: Upload binary as release asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: dist/black${{ matrix.executable_suffix }} + asset_name: black${{ matrix.executable_suffix }} + asset_content_type: ${{ matrix.executable_mime }} diff --git a/.travis.yml b/.travis.yml index e8d2975..e782272 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,17 +29,3 @@ matrix: python: 3.8 - name: "3.9" python: 3.9 -before_deploy: - - pip install pyinstaller - - pyinstaller --clean -F --add-data src/blib2to3/:blib2to3 src/black/__init__.py -deploy: - provider: releases - api_key: - secure: chYvcmnRqRKtfBcAZRj62rEv0ziWuHMl6MnfQbd1MOVQ4njntI8+CCPk118dW6MWSfwTqyMFy+t9gAgQYhjkLEHMS2aK9Z2wCWki1MkBrkMw5tYoLFvPu0KQ9rIVihxsr93a/am6Oh/Hp+1uuc4zWPUf1ubX+QlCzsxjCzVso1kTJjjdN04UxvkcFR+sY2d9Qyy9WcdifChnLwdmIJKIoVOE7Imm820nzImJHkJh8iSnjBjL98gvPPeC/nWTltsbErvf2mCv4NIjzjQZvHa87c7rSJGbliNrAxCSyyvBX+JNeS8U2fGLE83do0HieyjdPbTuc27e2nsrrihgPh+hXbiJerljclfp5hsJ5qGz5sS9MU1fR7sSLiQQ2v0TYB5RRwd34TgGiLwFAZZmgZOfMUCtefCKvP8qvELMSNd99+msfPEHiuhADF0bKPTbCUa6BgUHNr6woOLmHerjPHd6NI/a8Skz/uQB4xr3spLSmfUmX0fEqyYUDphkGPNH8IsvC1/F2isecW9kOzEWmB5oCmpMTGm4TIf3C01Nx+9PVwB2Z+30hhbfIEBxD4loRFmh/hU5TIQEpneF8yoIfe9EnMaoZbq86xhADZXvLIZvpXUdm1NQZDG6na2S1fwyOUKQsW6BWLcfoZZwZlrXrViD1jBsHBV++s+lxShTeTCszlo= - file: - - dist/black - skip_cleanup: true - on: - condition: $TRAVIS_PYTHON_VERSION == '3.6' - repo: psf/black - tags: true diff --git a/CHANGES.md b/CHANGES.md index dfc5422..240abe3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -21,6 +21,11 @@ - Added support for PEP 614 relaxed decorator syntax on python 3.9 (#1711) +#### _Packaging_ + +- Self-contained native _Black_ binaries are now provided for releases via GitHub + Releases (#1743) + ### 20.8b1 #### _Packaging_ -- 2.39.5