Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions .github/scripts/compute-semver.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/usr/bin/env bash

set -euo pipefail

echo "Determining next SemVer..."

if [ -z "${GITHUB_TOKEN:-}" ]; then
echo "GITHUB_TOKEN not set"
exit 1
fi

OWNER="${GITHUB_REPOSITORY%%/*}"
REPO="${GITHUB_REPOSITORY##*/}"
SHA="${GITHUB_SHA}"

git fetch --tags
LATEST_TAG=$(git tag --list 'v*.*.*' --sort=-v:refname | head -n1 || true)

if [ -z "$LATEST_TAG" ]; then
LATEST_TAG="v0.0.0"
fi

echo "Latest tag: $LATEST_TAG"

VERSION="${LATEST_TAG#v}"
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"

PRS_JSON=$(curl -s \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/$OWNER/$REPO/commits/$SHA/pulls")

echo "$PRS_JSON" | jq .

PR_COUNT=$(echo "$PRS_JSON" | jq length)

if [ "$PR_COUNT" -eq 0 ]; then
echo "No PR associated with this commit."
exit 1
fi

LABELS=$(echo "$PRS_JSON" | jq -r '.[0].labels[].name' | tr '[:upper:]' '[:lower:]')

BUMP="patch"

COUNT=0
for LABEL in major minor patch; do
if echo "$LABELS" | grep -qx "$LABEL"; then
BUMP="$LABEL"
COUNT=$((COUNT+1))
fi
done

if [ "$COUNT" -gt 1 ]; then
echo "Multiple SemVer labels applied. Use only one of: major, minor, patch."
exit 1
fi

echo "Version bump type: $BUMP"

case "$BUMP" in
major)
MAJOR=$((MAJOR+1))
MINOR=0
PATCH=0
;;
minor)
MINOR=$((MINOR+1))
PATCH=0
;;
patch)
PATCH=$((PATCH+1))
;;
esac

NEW_TAG="v${MAJOR}.${MINOR}.${PATCH}"

echo "New tag: $NEW_TAG"

echo "tag=$NEW_TAG" >> "$GITHUB_OUTPUT"
47 changes: 47 additions & 0 deletions .github/scripts/get-pr-details.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/usr/bin/env bash

set -euo pipefail

echo "Retrieving PR information..."

if [ -z "${GITHUB_TOKEN:-}" ]; then
echo "GITHUB_TOKEN not set"
exit 1
fi

OWNER="${GITHUB_REPOSITORY%%/*}"
REPO="${GITHUB_REPOSITORY##*/}"
SHA="${GITHUB_SHA}"

PRS_JSON=$(curl -s \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/$OWNER/$REPO/commits/$SHA/pulls")

PR_COUNT=$(echo "$PRS_JSON" | jq length)

if [ "$PR_COUNT" -eq 0 ]; then
echo "No PR associated with this commit."
echo "title=" >> "$GITHUB_OUTPUT"
echo "body=" >> "$GITHUB_OUTPUT"
exit 0
fi

TITLE=$(echo "$PRS_JSON" | jq -r '.[0].title // ""')
BODY=$(echo "$PRS_JSON" | jq -r '.[0].body // ""')

{
echo "title<<EOF"
echo "$TITLE"
echo "EOF"
} >> "$GITHUB_OUTPUT"

{
echo "body<<EOF"
echo "$BODY"
echo "EOF"
} >> "$GITHUB_OUTPUT"

echo "PR details captured."
echo "- Title = $TITLE."
echo "- Description = $BODY."
134 changes: 0 additions & 134 deletions .github/workflows/build-ci.yaml

This file was deleted.

40 changes: 40 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: CI - Build and Run Test

on:
pull_request:
types: [opened, synchronize, reopened]

permissions:
contents: read

jobs:
build_and_test:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Cache pip and PlatformIO
uses: actions/cache@v4
with:
path: |
~/.cache/pip
~/.platformio/.cache
key: ${{ runner.os }}-pio-${{ hashFiles('**/platformio.ini') }}

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install PlatformIO
run: pip install --upgrade platformio

- name: Build LumenLab
run: pio run

- name: Run tests
run: pio test --environment native
70 changes: 70 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: CD - Deploy, Label, and Create Release

on:
push:
branches:
- main

permissions:
contents: write

concurrency:
group: release-main
cancel-in-progress: false

jobs:
release:
runs-on: ubuntu-latest

steps:
- name: Checkout (full history)
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Cache pip and PlatformIO
uses: actions/cache@v4
with:
path: |
~/.cache/pip
~/.platformio/.cache
key: ${{ runner.os }}-pio-${{ hashFiles('**/platformio.ini') }}

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install PlatformIO
run: pip install --upgrade platformio

- name: Build release
run: pio run -e release

- name: Run tests
run: pio test --environment native

- name: Determine next SemVer from PR labels
id: semver
run: bash .github/scripts/compute-semver.sh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Get release description notes from PR
id: pr_body
run: bash .github/scripts/get-pr-body.sh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.semver.outputs.tag }}
name: Release ${{ steps.semver.outputs.tag }}
body: ${{ steps.pr_body.outputs.result }}
files: |
.pio/build/release/firmware.bin
.pio/build/release/bootloader.bin
.pio/build/release/partitions.bin
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Loading