add Git tag to release asset file names #67
This file contains hidden or 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: OpenDTU-OnBattery Build | |
on: | |
push: | |
paths-ignore: | |
- docs/** | |
- '**/*.md' | |
branches: | |
- master | |
- development | |
tags-ignore: | |
- 'v**' | |
pull_request: | |
paths-ignore: | |
- docs/** | |
- '**/*.md' | |
jobs: | |
get_default_envs: | |
name: Gather Environments | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Cache pip | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/pip | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
restore-keys: | | |
${{ runner.os }}-pip- | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- name: Install PlatformIO | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade platformio | |
- name: Get default environments | |
id: envs | |
run: | | |
echo "environments=$(pio project config --json-output | jq -cr '.[1][1][0][1]|split(",")')" >> $GITHUB_OUTPUT | |
outputs: | |
environments: ${{ steps.envs.outputs.environments }} | |
build: | |
name: Build Environments | |
runs-on: ubuntu-24.04 | |
needs: get_default_envs | |
strategy: | |
matrix: | |
environment: ${{ fromJSON(needs.get_default_envs.outputs.environments) }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get tags | |
run: git fetch --force --tags origin | |
- name: Create and switch to a meaningful branch for pull-requests | |
if: github.event_name == 'pull_request' | |
run: | | |
OWNER=${{ github.repository_owner }} | |
NAME=${{ github.event.repository.name }} | |
ID=${{ github.event.pull_request.number }} | |
DATE=$(date +'%Y%m%d%H%M') | |
git switch -c ${OWNER}/${NAME}/pr${ID}-${DATE} | |
- name: Cache pip | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/pip | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
restore-keys: | | |
${{ runner.os }}-pip- | |
- name: Cache PlatformIO | |
uses: actions/cache@v4 | |
with: | |
path: ~/.platformio | |
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- name: Install PlatformIO | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade platformio setuptools | |
- name: Enable Corepack | |
run: | | |
cd webapp | |
corepack enable | |
- name: Setup Node.js and yarn | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "22" | |
cache: "yarn" | |
cache-dependency-path: "webapp/yarn.lock" | |
- name: Install WebApp dependencies | |
run: | | |
cd webapp | |
yarn install --frozen-lockfile | |
- name: Build WebApp | |
run: | | |
cd webapp | |
yarn build | |
- name: Build firmware | |
run: pio run -e ${{ matrix.environment }} | |
- name: Rename Firmware | |
run: mv .pio/build/${{ matrix.environment }}/firmware.bin .pio/build/${{ matrix.environment }}/opendtu-onbattery-${{ matrix.environment }}.bin | |
- name: Rename Factory Firmware | |
run: mv .pio/build/${{ matrix.environment }}/firmware.factory.bin .pio/build/${{ matrix.environment }}/opendtu-onbattery-${{ matrix.environment }}.factory.bin | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: opendtu-onbattery-${{ matrix.environment }} | |
path: | | |
.pio/build/${{ matrix.environment }}/opendtu-onbattery-${{ matrix.environment }}.bin | |
!.pio/build/generic_esp32_4mb_no_ota/opendtu-onbattery-generic_esp32_4mb_no_ota.bin | |
.pio/build/${{ matrix.environment }}/opendtu-onbattery-${{ matrix.environment }}.factory.bin | |
# This snippet is public-domain, taken from | |
# https://github.com/oprypin/nightly.link/blob/master/.github/workflows/pr-comment.yml | |
# and modified to store the comment as an artifact instead of posting it because | |
# the action does not have sufficient permissions to post a comment when triggered | |
# by a forked repository. | |
# source: https://github.com/live-codes/pr-comment-from-artifact/blob/main/action.yml | |
generate_pr_artifacts_comment: | |
name: Generate PR artifacts comment and store it as artifact | |
needs: build | |
if: github.event_name == 'pull_request' | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Generate PR artifacts comment | |
id: generate_pr_artifacts_comment | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const {owner, repo} = context.repo; | |
const artifacts = await github.paginate( | |
github.rest.actions.listWorkflowRunArtifacts, | |
{ | |
owner, | |
repo, | |
run_id: context.runId | |
} | |
); | |
if (!artifacts.length) { | |
return core.error(`No artifacts found`); | |
} | |
let body = `### Build Artifacts\n\nFirmware built from this pull request's code:\n`; | |
for (const art of artifacts) { | |
body += `\n* [${art.name}.zip](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`; | |
} | |
const build_run_url = `https://github.com/hoylabs/OpenDTU-OnBattery/actions/runs/${context.runId}`; | |
body += `\n\n### Notice\n` | |
+ `* These artifacts are ZIP files containing the factory update binary as well as the OTA update binary.\n` | |
+ ` Extract the binaries from the ZIP files first. Do not use the ZIP files themselves to perform an update.\n` | |
+ `* These links point to artifacts of the latest [**successful** build run](${build_run_url}).\n` | |
+ `* The linked artifacts were built from ${context.sha}.`; | |
core.setOutput("message", body); | |
- name: Save output and PR number | |
shell: bash | |
run: | | |
mkdir -p ./pr | |
echo "${{ steps.generate_pr_artifacts_comment.outputs.message }}" > ./pr/${{ github.event.number }}.md | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pr | |
path: pr/ | |
retention-days: 1 | |
overwrite: true | |
release: | |
name: Create Release | |
runs-on: ubuntu-24.04 | |
needs: [get_default_envs, build] | |
if: startsWith(github.ref, 'refs/tags/2') | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Get openDTU core tags | |
run: git fetch --force --tags https://github.com/tbnobody/OpenDTU.git | |
- name: Get openDTU core release | |
run: | | |
echo "OPEN_DTU_CORE_RELEASE=$(git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags | grep 'refs/tags/v' | tail -1 | sed 's#.*/##' | sed 's/ .*//')" >> $GITHUB_ENV | |
- name: Create openDTU-core-release-Badge | |
if: github.repository_owner == 'hoylabs' | |
uses: schneegans/dynamic-badges-action@e9a478b16159b4d31420099ba146cdc50f134483 # version 1.7.0 | |
with: | |
auth: ${{ secrets.GIST_SECRET }} | |
gistID: 856dda48c1cadac6ea495213340c612b | |
filename: openDTUcoreRelease.json | |
label: based on upstream OpenDTU | |
message: ${{ env.OPEN_DTU_CORE_RELEASE }} | |
color: lightblue | |
- name: Build Changelog | |
id: github_release | |
uses: mikepenz/[email protected] | |
with: | |
failOnError: true | |
commitMode: true | |
configuration: ".github/workflows/config/release-notes-config.json" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- uses: actions/download-artifact@v4 | |
with: | |
path: artifacts/ | |
- name: Move artifacts to the expected location | |
run: | | |
ls -lR artifacts/ | |
mkdir -p release-artifacts | |
for i in artifacts/*/; do | |
for file in ${i}opendtu-onbattery-*.bin; do | |
filename=$(basename "${file}") | |
tag_name=${GITHUB_REF#refs/tags/} | |
new_filename="${filename#opendtu-onbattery-}" | |
new_filename="opendtu-onbattery-${tag_name}-${new_filename}" | |
cp -v "${file}" "release-artifacts/${new_filename}" | |
done | |
done | |
ls -lR release-artifacts/ | |
- name: Create release | |
uses: softprops/action-gh-release@v2 | |
with: | |
body: ${{steps.github_release.outputs.changelog}} | |
draft: False | |
files: | | |
release-artifacts/*.bin | |
env: | |
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} |