Add Linux build for self-contained executable #197
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#file: noinspection LongLine | |
name: "Test and publish release" | |
on: | |
workflow_dispatch: | |
inputs: | |
release_version: | |
description: 'Release version number' | |
required: true | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- '*' | |
env: | |
PY_COLORS: "1" | |
jobs: | |
test-and-publish-release: | |
runs-on: windows-2019 | |
steps: | |
- name: Checkout tja2fumen (main branch) | |
uses: actions/checkout@v3 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.8.x' | |
- name: Install tja2fumen and its dev dependencies | |
run: | | |
pip install -e .[dev] | |
- name: Run tests (Python API) | |
run: | | |
pytest testing --entry-point python-api | |
# The GitHub Actions bot email was taken from: https://github.community/t/github-actions-bot-email-address/17204/6 | |
- name: Set bot user data for commits | |
# Only set git user data if workflow is run manually. (This allows the other steps in the workflow to test PRs.) | |
if: github.event_name == 'workflow_dispatch' | |
run: | | |
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
git config --global user.name "GitHub Actions Bot" | |
- name: Update pyproject.toml version (for release) | |
# Only update the version number if workflow is run manually. (This allows the other steps in the workflow to test PRs.) | |
if: github.event_name == 'workflow_dispatch' | |
run: | | |
toml set --toml-path pyproject.toml project.version "${{ github.event.inputs.release_version }}" | |
git add pyproject.toml | |
git commit -m "Update pyproject.toml version for ${{ github.event.inputs.release_version }}" | |
- name: Build wheel/sdist | |
run: python -m build | |
- name: Uninstall editable tja2fumen and install built wheel | |
shell: bash | |
run: | | |
pip uninstall tja2fumen -y | |
pip install dist/*.whl | |
- name: Run tests (installed wheel) | |
run: pytest testing --entry-point python-cli | |
- name: Add UPX to the PATH | |
uses: crazy-max/ghaction-upx@v2 | |
with: | |
install-only: true | |
- name: Build pyinstaller executable | |
run: | | |
pyinstaller src\tja2fumen\__init__.py ` | |
--name tja2fumen-${{ github.event.inputs.release_version }} ` | |
--add-data="src\tja2fumen\hp_values.csv;tja2fumen\" ` | |
--onefile ` | |
--exclude-module bz2 ` | |
--exclude-module hashlib ` | |
--exclude-module lzma ` | |
--exclude-module socket ` | |
--exclude-module ssl ` | |
--exclude-module unicodedata ` | |
--exclude-module select | |
- name: Run tests (installed wheel) | |
run: pytest testing --entry-point exe | |
- name: Push release changes | |
# Only push the new tags if workflow is run manually. (This allows the other steps in the workflow to test PRs.) | |
if: github.event_name == 'workflow_dispatch' | |
run: | | |
git tag ${{ github.event.inputs.release_version }} | |
git push --tags | |
- uses: ncipollo/release-action@v1 | |
# Only create release if workflow is run manually. (This allows the other steps in the workflow to test PRs.) | |
if: github.event_name == 'workflow_dispatch' | |
name: Create release | |
id: create_release | |
with: | |
tag: ${{ github.event.inputs.release_version }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
artifacts: "dist/tja2fumen-${{ github.event.inputs.release_version }}.exe,\ | |
dist/tja2fumen-${{ github.event.inputs.release_version }}.tar.gz,\ | |
dist/tja2fumen-${{ github.event.inputs.release_version }}-py3-none-any.whl" | |
draft: true | |
- name: Publish distribution to PyPI | |
# Only publish distribution if workflow is run manually. (This allows the other steps in the workflow to test PRs.) | |
if: github.event_name == 'workflow_dispatch' | |
run: twine upload dist/*.whl dist/*.tar.gz --username __token__ --password ${{ secrets.PYPI_API_TOKEN }} | |
build-for-linux: | |
needs: test-and-publish-release | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout tja2fumen (main branch) | |
uses: actions/checkout@v3 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.8.x' | |
- name: Install tja2fumen and its dev dependencies | |
run: | | |
pip install -e .[dev] | |
- name: Add UPX to the PATH | |
uses: crazy-max/ghaction-upx@v2 | |
with: | |
install-only: true | |
- name: Build pyinstaller executable | |
run: | | |
pyinstaller src\tja2fumen\__init__.py ` | |
--name tja2fumen-${{ github.event.inputs.release_version }} ` | |
--add-data="src\tja2fumen\hp_values.csv;tja2fumen\" ` | |
--onefile ` | |
--exclude-module bz2 ` | |
--exclude-module hashlib ` | |
--exclude-module lzma ` | |
--exclude-module socket ` | |
--exclude-module ssl ` | |
--exclude-module unicodedata ` | |
--exclude-module select | |
- uses: ncipollo/release-action@v1 | |
# Only create release if workflow is run manually. (This allows the other steps in the workflow to test PRs.) | |
if: github.event_name == 'workflow_dispatch' | |
name: Create release | |
id: create_release | |
with: | |
tag: ${{ github.event.inputs.release_version }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
artifacts: "dist/tja2fumen-${{ github.event.inputs.release_version }}" | |
allowUpdates: true | |
draft: true |