#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 }}