name: Publish executables on: release: types: [published] permissions: contents: write # actions/upload-release-asset needs this. jobs: build: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [windows-2019, ubuntu-20.04, macos-latest] include: - os: windows-2019 pathsep: ";" asset_name: black_windows.exe executable_mime: "application/vnd.microsoft.portable-executable" - os: ubuntu-20.04 pathsep: ":" asset_name: black_linux executable_mime: "application/x-executable" - os: macos-latest pathsep: ":" asset_name: black_macos executable_mime: "application/x-mach-binary" steps: - uses: actions/checkout@v3 - name: Set up latest Python uses: actions/setup-python@v4 with: python-version: "*" - name: Install Black and PyInstaller run: | python -m pip install --upgrade pip wheel python -m pip install .[colorama] python -m pip install pyinstaller - name: Build executable with PyInstaller run: > python -m PyInstaller -F --name ${{ matrix.asset_name }} --add-data 'src/blib2to3${{ matrix.pathsep }}blib2to3' src/black/__main__.py - name: Quickly test executable run: | ./dist/${{ matrix.asset_name }} --version ./dist/${{ matrix.asset_name }} src --verbose - 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/${{ matrix.asset_name }} asset_name: ${{ matrix.asset_name }} asset_content_type: ${{ matrix.executable_mime }}