Skip to content

Build Executables

Build Executables #30

Workflow file for this run

name: Build Executables
on:
workflow_dispatch:
inputs:
release_version:
description: 'Release Version'
required: true
default: ''
type: string
permissions: write-all
jobs:
build-linux:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install Dependencies
run: pip install -r requirements.txt
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install PyInstaller
run: pip install pyinstaller
- name: Build executable for Linux
run: |
pyinstaller --onefile commitify.py
- name: Move Linux executable
run: |
mv dist/commitify ./commitify-linux
- name: Upload Linux artifact
uses: actions/upload-artifact@v4 # Use v4
with:
name: linux-executable
path: commitify-linux # Ensure this matches the moved file's name
build-windows:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install Dependencies
run: pip install -r requirements.txt
- name: Install PyInstaller
run: pip install pyinstaller
- name: Build executable for Windows
run: |
pyinstaller --onefile commitify.py
- name: Move Windows executable
run: |
move dist\commitify.exe commitify.exe # Just rename to commitify.exe
- name: Upload Windows artifact
uses: actions/upload-artifact@v4 # Use v4
with:
name: windows-executable
path: commitify.exe # Ensure this matches the moved file's name
build-macos:
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install PyInstaller
run: pip install pyinstaller
- name: Install Dependencies
run: pip install -r requirements.txt
- name: Build executable for macOS
run: |
pyinstaller --onefile commitify.py
- name: Move macOS executable
run: |
mv dist/commitify ./commitify-darwin
- name: Upload macOS artifact
uses: actions/upload-artifact@v4 # Use v4
with:
name: macos-executable
path: commitify-darwin # Ensure this matches the moved file's name
release:
needs: [build-linux, build-windows, build-macos]
runs-on: ubuntu-latest # This can be any OS since we are just uploading artifacts.
steps:
- name: Checkout code for release job
uses: actions/checkout@v3
with:
fetch-depth: 0 # Fetch all history to access tags
- name: Get Latest Tag
id: get_latest_tag
run: |
echo "LATEST_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
- name: Build Changelog
id: build_changelog
uses: mikepenz/release-changelog-builder-action@v5
with:
mode: "COMMIT" # Use commit-based mode
fromTag: ${{ env.LATEST_TAG }} # Use the latest tag found in the previous step
toTag: main # Compare to the main branch
configurationJson: |
{
"template": "# Changelog\n\n{{CHANGELOG}}",
"categories": [
{
"title": "## Features",
"labels": [
"feat",
":sparkles: feat:",
":chart_with_upwards_trend: feat:",
":rocket: deploy:",
":alien: feat:",
":children_crossing: feat:",
":building_construction: refactor:",
":wheelchair: feat:",
":seedling: feat:",
":heavy_plus_sign: feat:",
":heavy_minus_sign: fix:",
":dizzy: feat:",
":money_with_wings: chore:",
":necktie: feat:",
":stethoscope: feat:",
":egg: feat:"
]
},
{
"title": "## Fixes",
"labels": [
"fix",
":bug: fix:",
":adhesive_bandage: fix:",
":rotating_light: fix:",
":coffin: fix:",
":green_heart: ci:"
]
},
{ "title": "## Performance Improvements", "labels": [":zap: perf:" ] },
{ "title": "## Documentation", "labels": ["docs", ":memo: docs:" ] },
{ "title": "## Style Changes", "labels": ["style", ":art: style:" ] },
{ "title": "## Critical Fixes", "labels": [":ambulance: fix:", ":fire: fix:" ] },
{ "title": "## Breaking Changes", "labels": ["BREAKING CHANGE", ":boom: BREAKING CHANGE:" ] },
{ "title": "## Other Changes", "labels": [] } // Catch-all for any unclassified changes
],
"ignore_labels": [],
"empty_template": "- No changes",
// Custom formatting for commits
"commit_template": "- `{{SHA}}`: {{message}} ({{author}})"
}
token: ${{ secrets.GITHUB_TOKEN }}
# Download artifacts from previous jobs.
- name: Download Linux artifact
uses: actions/download-artifact@v4 # Use v4 to download artifacts.
with:
name: linux-executable
- name: Download Windows artifact
uses: actions/download-artifact@v4 # Use v4 to download artifacts.
with:
name: windows-executable
- name: Download macOS artifact
uses: actions/download-artifact@v4 # Use v4 to download artifacts.
with:
name: macos-executable
# List downloaded files for debugging purposes.
- name: List downloaded files before release upload
run: ls -al
- name: Create Pre-Release Assets using softprops/action-gh-release
uses: softprops/action-gh-release@v1
with:
tag_name: "${{ github.event.inputs.release_version }}" # Use input for tag_name.
name: "${{ github.event.inputs.release_version }}"
body: ${{ steps.build_changelog.outputs.changelog }} # Use the generated changelog as release notes
files: commitify-linux, commitify.exe, commitify-darwin, commitify.py
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Use the GitHub token for authentication