Helios Build #425
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} | |