Skip to content

Builder

Builder #26

Workflow file for this run

name: Build release
on:
workflow_dispatch:
inputs:
NO_WINDOWS:
description: "No Windows"
type: boolean
required: true
default: false
TEST_ONLY:
description: "Test only"
type: boolean
required: true
default: false
env:
MAIN_PY: "main.py"
REQFILE: "requirements.txt"
THE_NAME: "shled"
jobs:
job-build:
name: Build and upload executable binary
strategy:
matrix:
os: [ubuntu-20.04,windows-2019 ]
runs-on: ${{ matrix.os }}
steps:
- name: Check if on Windows
if: ${{ contains(matrix.os,'windows') == true && inputs.NO_WINDOWS == true }}
run: exit 1
- name: Download repo
uses: actions/checkout@v4
with:
path: repo
- name: Setup Python
uses: actions/setup-python@v3
with:
python-version: "3.9.6"
- name: Setup Python (project dependencies)
working-directory: repo
run: |
pip install -r "${{ env.REQFILE }}"
- name: Setup Python (install Nuitka)
run: |
pip install nuitka
- name: Build for Linux
if: ${{ contains(matrix.os,'windows') == false }}
working-directory: repo
run: |
# python -m nuitka --onefile --onefile-no-compression --assume-yes-for-downloads "main.py" --output-dir="the-output" --output-filename="${{ env.THE_NAME }}.bin"
python -m nuitka --standalone --assume-yes-for-downloads "main.py" --output-dir="the-output" --output-filename="${{ env.THE_NAME }}.bin"
- name: Build for Linux (after)
if: ${{ contains(matrix.os,'windows') == false && inputs.TEST_ONLY == false }}
working-directory: repo
run: |
echo "[ LINKING ]"
ldd "the-output/main.dist/${{ env.THE_NAME }}.bin"
echo "[ CONTENTS ]"
find the-output
- name: Build for Windows
if: ${{ contains(matrix.os,'windows') == true }}
working-directory: repo
run: |
# python -m nuitka --onefile --onefile-no-compression --assume-yes-for-downloads "main.py" --output-dir="the-output" --output-filename="${{ env.THE_NAME }}.exe"
python -m nuitka --standalone --assume-yes-for-downloads "main.py" --output-dir="the-output" --output-filename="${{ env.THE_NAME }}.exe"
- name: Build for Windows (after)
if: ${{ contains(matrix.os,'windows') == true && inputs.TEST_ONLY == false }}
working-directory: repo
run: |
dir /s /b the-output
- uses: actions/upload-artifact@v3
if: ${{ inputs.TEST_ONLY == false }}
with:
if-no-files-found: error
name: "${{ matrix.os }}"
path: |
./repo/the-output/${{ env.THE_NAME }}.bin
./repo/the-output/${{ env.THE_NAME }}.exe
job-release:
name: Create release
needs: [job-build]
runs-on: ubuntu-latest
steps:
- name: Get exact date
id: step_date
run: |
echo "VAR_DATE=$(date +%Y-%m-%d-%H-%M-%S)" >> $GITHUB_OUTPUT
- name: (dbg) Printing date
run: echo "${{ steps.step_date.outputs.VAR_DATE }}"
- name: Create release
if: ${{ inputs.TEST_ONLY == false }}
id: step_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
with:
tag_name: "${{ steps.step_date.outputs.VAR_DATE }}"
release_name: "${{ steps.step_date.outputs.VAR_DATE }}"
draft: false
prerelease: false
- name: Write data to NOTES
run: |
echo "" > NOTES.txt
echo "THE_URL=${{ steps.step_release.outputs.upload_url }}" >> NOTES.txt
echo "THE_DATE=${{ steps.step_date.outputs.VAR_DATE }}" >> NOTES.txt
echo "{"
cat NOTES.txt
echo "}"
- name: Upload NOTES
uses: actions/upload-artifact@v3
with:
name: "NOTES"
path: "NOTES.txt"
if-no-files-found: error
job-attach:
name: Attach artifact as an asset
needs: [job-release]
strategy:
max-parallel: 2
matrix:
binary: [ubuntu-20.04 , windows-2019 ]
runs-on: ubuntu-latest
steps:
- name: Download repo (again)
if: ${{ inputs.TEST_ONLY == false }}
uses: actions/checkout@v4
with:
path: repo
- name: Download Notes
uses: actions/download-artifact@v3
with:
name: "NOTES"
- name: Recover from Notes
id: step_notes
run: |
cat NOTES.txt
cat NOTES.txt >> $GITHUB_OUTPUT
- name: (dbg) Test Notes
run: |
echo "CURRENT DATE = ${{ steps.step_notes.outputs.THE_DATE }}"
echo "UPLOAD URL = ${{ steps.step_notes.outputs.THE_URL }}"
- name: Download artifact
if: ${{ inputs.TEST_ONLY == false }}
uses: actions/download-artifact@v3
with:
name: ${{ matrix.binary }}
path: "${{ env.THE_NAME }}"
- name: Create the package
if: ${{ inputs.TEST_ONLY == false }}
run: |
cp -v repo/config.yaml "${{ env.THE_NAME }}/config.yaml"
mkdir -v "${{ env.THE_NAME }}/sources"
cp -v repo/htmx.min.js "${{ env.THE_NAME }}/sources/htmx.min.js"
cp -v repo/custom.css "${{ env.THE_NAME }}/sources/custom.css"
echo "${{ steps.step_notes.outputs.THE_DATE }}" > "${{ env.THE_NAME }}/README.md"
cat repo/README.md >> "${{ env.THE_NAME }}/README.md"
zip -0 -r "${{ env.THE_NAME }}-${{ matrix.binary }}.zip" "${{ env.THE_NAME }}"
find .
- name: Attach the artifact
if: ${{ inputs.TEST_ONLY == false }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
with:
upload_url: "${{ steps.step_notes.outputs.THE_URL }}"
asset_path: "${{ env.THE_NAME }}-${{ matrix.binary }}.zip"
asset_name: "${{ env.THE_NAME }}-${{ matrix.binary }}.zip"
asset_content_type: application/octet-stream