Skip to content

Commit

Permalink
Automatically build and upload binaries on release (#1743)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
ichard26 committed Nov 1, 2020
1 parent 6c3f818 commit 74e51e6
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 14 deletions.
51 changes: 51 additions & 0 deletions .github/workflows/upload_binary.yml
Original file line number Diff line number Diff line change
@@ -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 }}
14 changes: 0 additions & 14 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
5 changes: 5 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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_
Expand Down

0 comments on commit 74e51e6

Please sign in to comment.