Skip to content

Helios Build

Helios Build #423

Workflow file for this run

name: Helios Build and Release
on:
push:
branches: ["master"]
pull_request:
branches: ["master"]
workflow_dispatch: # manual trigger
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout current repository
uses: actions/checkout@v4
- name: Update Package Lists
run: sudo apt-get update
- name: Install Dependencies
run: sudo apt-get install valgrind g++ make --fix-missing
- name: Build HeliosCLI
run: make -j
working-directory: HeliosCLI
- name: Archive HeliosCLI artifacts
run: zip -r "helioscli.zip" .
working-directory: HeliosCLI
- name: Upload HeliosCLI Artifact
uses: actions/upload-artifact@v4
with:
name: helioscli-artifacts
path: HeliosCLI/helioscli.zip
tests:
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout current repository
uses: actions/checkout@v4
- name: Download HeliosCLI Artifact
uses: actions/download-artifact@v4
with:
name: helioscli-artifacts
path: ./HeliosCLI
- name: Set execute permissions for test script
run: chmod +x ./runtests.sh
working-directory: tests
- name: Run general tests
run: ./runtests.sh
working-directory: tests
embedded:
needs: tests
runs-on: ubuntu-latest
steps:
- name: Checkout current repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install Dependencies
run: make install
working-directory: HeliosEmbedded
- name: Build Binary
run: make build
working-directory: HeliosEmbedded
- name: Archive HeliosEmbedded artifacts
run: zip -r "embedded-firmware.zip" .
working-directory: HeliosEmbedded
- name: Upload HeliosEmbedded Artifact
uses: actions/upload-artifact@v4
with:
name: embedded-firmware
path: HeliosEmbedded/embedded-firmware.zip
release:
runs-on: ubuntu-latest
needs: embedded
if: github.event_name == 'workflow_dispatch'
permissions:
contents: write
steps:
- name: Checkout current repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for calculating version
- name: Get the latest tag
id: get_tag
run: |
latest_tag=$(git describe --tags `git rev-list --tags --max-count=1` 2>/dev/null || echo "none")
echo "tag=$latest_tag" >> $GITHUB_ENV
- name: Check for existing tags
id: check_tag
run: |
if [ "${{ env.tag }}" == "none" ]; then
echo "No tags found. Skipping release."
echo "skip_release=true" >> $GITHUB_ENV
else
echo "skip_release=false" >> $GITHUB_ENV
fi
- name: Calculate new version
if: env.skip_release == 'false'
id: calc_version
run: |
latest_tag=${{ env.tag }}
commits_since_tag=$(git rev-list $latest_tag..HEAD --count)
IFS='.' read -ra ADDR <<< "$latest_tag"
new_version="${ADDR[0]}.${ADDR[1]}.$((commits_since_tag))"
echo "new_version=$new_version" >> $GITHUB_ENV
echo "new_tag=$new_version" >> $GITHUB_ENV
- name: Create a new tag
if: env.skip_release == 'false'
run: |
git config --global user.email "[email protected]"
git config --global user.name "GitHub Actions"
git tag ${{ env.new_tag }}
git push origin ${{ env.new_tag }}
- name: Download HeliosCLI Artifact
uses: actions/download-artifact@v4
with:
name: helioscli-artifacts
path: ./artifact/helioscli
- name: Download HeliosEmbedded Artifact
uses: actions/download-artifact@v4
with:
name: embedded-firmware
path: ./artifact/embedded
- name: Create directories for unzipping
run: mkdir -p ./artifact/unzipped/helioscli ./artifact/unzipped/embedded
- name: Unzip HeliosCLI Artifact
run: unzip ./artifact/helioscli/helioscli.zip -d ./artifact/unzipped/helioscli
- name: Unzip HeliosEmbedded Artifact
run: unzip ./artifact/embedded/embedded-firmware.zip -d ./artifact/unzipped/embedded
- name: Create GitHub Release
if: env.skip_release == 'false'
id: create_release
uses: ncipollo/release-action@v1
with:
tag: ${{ env.new_tag }}
name: Helios Vortex ${{ env.new_version }}
body: |
Release of Helios Vortex version ${{ env.new_version }}
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Release Assets (helios.bin)
if: env.skip_release == 'false'
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./artifact/unzipped/embedded/helios.bin
asset_name: helios.bin
asset_content_type: application/octet-stream
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Release Assets (helios.elf)
if: env.skip_release == 'false'
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./artifact/unzipped/embedded/helios.elf
asset_name: helios.elf
asset_content_type: application/octet-stream
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Release Assets (helios.map)
if: env.skip_release == 'false'
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./artifact/unzipped/embedded/helios.map
asset_name: helios.map
asset_content_type: application/octet-stream
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Release Assets (helios.hex)
if: env.skip_release == 'false'
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./artifact/unzipped/embedded/helios.hex
asset_name: helios.hex
asset_content_type: application/octet-stream
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload HeliosCLI Artifacts
if: env.skip_release == 'false'
run: |
for file in ./artifact/unzipped/helioscli/*; do
gh release upload ${{ steps.create_release.outputs.upload_url }} "$file" --clobber
done
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}