Skip to content

feat: add comprehensive PyPI integration and documentation #3

feat: add comprehensive PyPI integration and documentation

feat: add comprehensive PyPI integration and documentation #3

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