feat: add comprehensive PyPI integration and documentation #3
This file contains hidden or 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
| name: Semantic Release | |
| on: | |
| push: | |
| branches: [ main ] | |
| workflow_dispatch: | |
| jobs: | |
| release: | |
| name: Semantic Release | |
| runs-on: ubuntu-latest | |
| if: "!contains(github.event.head_commit.message, '[skip ci]')" | |
| outputs: | |
| new_release_published: ${{ steps.semantic.outputs.new_release_published }} | |
| new_release_version: ${{ steps.semantic.outputs.new_release_version }} | |
| new_release_git_tag: ${{ steps.semantic.outputs.new_release_git_tag }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| - name: Setup Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install semantic-release | |
| run: | | |
| npm install -g semantic-release @semantic-release/changelog @semantic-release/git @semantic-release/github @semantic-release/exec | |
| - name: Create semantic-release config | |
| run: | | |
| cat > .releaserc.json << 'EOF' | |
| { | |
| "branches": ["main"], | |
| "plugins": [ | |
| "@semantic-release/commit-analyzer", | |
| "@semantic-release/release-notes-generator", | |
| [ | |
| "@semantic-release/changelog", | |
| { | |
| "changelogFile": "CHANGELOG.md" | |
| } | |
| ], | |
| [ | |
| "@semantic-release/exec", | |
| { | |
| "prepareCmd": "echo '${nextRelease.version}' > VERSION && sed -i 's/^version = .*/version = \"${nextRelease.version}\"/' pyproject.toml && echo '__version__ = \"${nextRelease.version}\"' > __version__.py && echo '__version_info__ = (${nextRelease.version.split('.').join(', ')})' >> __version__.py" | |
| } | |
| ], | |
| [ | |
| "@semantic-release/git", | |
| { | |
| "assets": ["CHANGELOG.md", "VERSION", "pyproject.toml", "__version__.py"], | |
| "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" | |
| } | |
| ], | |
| "@semantic-release/github" | |
| ] | |
| } | |
| EOF | |
| - name: Run semantic-release | |
| id: semantic | |
| run: semantic-release | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| build-and-upload: | |
| name: Build and Upload Assets | |
| needs: release | |
| runs-on: ubuntu-latest | |
| if: needs.release.outputs.new_release_published == 'true' | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ needs.release.outputs.new_release_git_tag }} | |
| - name: Setup Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install build dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install twine wheel setuptools | |
| - name: Build Python packages | |
| run: | | |
| python setup.py sdist bdist_wheel | |
| - name: Create source archive | |
| run: | | |
| VERSION=${{ needs.release.outputs.new_release_version }} | |
| git archive --format=tar.gz --prefix=bash-script-maker-$VERSION/ HEAD > bash-script-maker-$VERSION-source.tar.gz | |
| - name: Upload to release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: ${{ needs.release.outputs.new_release_git_tag }} | |
| files: | | |
| dist/*.whl | |
| dist/*.tar.gz | |
| bash-script-maker-${{ needs.release.outputs.new_release_version }}-source.tar.gz | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| build-flatpak: | |
| name: Build Flatpak | |
| needs: release | |
| runs-on: ubuntu-latest | |
| if: needs.release.outputs.new_release_published == 'true' | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ needs.release.outputs.new_release_git_tag }} | |
| - name: Set up Flatpak builder | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y flatpak flatpak-builder | |
| flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo | |
| - name: Clear Flatpak cache | |
| run: | | |
| rm -rf ~/.cache/flatpak-builder || true | |
| - name: Create build directory and files | |
| run: | | |
| mkdir -p build/flatpak | |
| cp bash_script_maker_flatpak.py build/flatpak/ | |
| cp flatpak/org.securebits.bashscriptmaker.appdata.xml build/flatpak/ | |
| # Create the correct manifest | |
| cat > build/flatpak/org.securebits.bashscriptmaker.yml << 'EOF' | |
| app-id: org.securebits.bashscriptmaker | |
| runtime: org.freedesktop.Platform | |
| runtime-version: '23.08' | |
| sdk: org.freedesktop.Sdk | |
| command: bash-script-maker | |
| finish-args: | |
| - --share=ipc | |
| - --socket=wayland | |
| - --socket=x11 | |
| - --socket=pulseaudio | |
| - --device=dri | |
| - --filesystem=home | |
| - --filesystem=host | |
| - --talk-name=org.freedesktop.Notifications | |
| modules: | |
| - name: bash-script-maker | |
| buildsystem: simple | |
| build-commands: | |
| - mkdir -p /app/bin | |
| - cp bash_script_maker_flatpak.py /app/bin/bash-script-maker | |
| - chmod +x /app/bin/bash-script-maker | |
| sources: | |
| - type: dir | |
| path: . | |
| EOF | |
| - name: Build Flatpak | |
| run: | | |
| cd build/flatpak | |
| flatpak-builder --user --install-deps-from=flathub --force-clean --repo=repo build-dir org.securebits.bashscriptmaker.yml | |
| - name: Create Flatpak Bundle | |
| run: | | |
| cd build/flatpak | |
| flatpak build-bundle repo BashScriptMaker-${{ needs.release.outputs.new_release_version }}.flatpak org.securebits.bashscriptmaker | |
| - name: Upload Flatpak to release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: ${{ needs.release.outputs.new_release_git_tag }} | |
| files: build/flatpak/BashScriptMaker-${{ needs.release.outputs.new_release_version }}.flatpak | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| publish-pypi: | |
| name: Publish to PyPI | |
| needs: [release, build-and-upload] | |
| runs-on: ubuntu-latest | |
| if: needs.release.outputs.new_release_published == 'true' && !contains(needs.release.outputs.new_release_version, '-') | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ needs.release.outputs.new_release_git_tag }} | |
| - name: Setup Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install build dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install twine wheel setuptools | |
| - name: Build packages | |
| run: python setup.py sdist bdist_wheel | |
| - name: Publish to PyPI | |
| uses: pypa/gh-action-pypi-publish@release/v1 | |
| with: | |
| password: ${{ secrets.PYPI_API_TOKEN }} | |
| skip-existing: true |