This repo has no tags and no GitHub releases, and manifest.json has read "1.0.0" since the integration was vendored -- unchanged across 20 commits, including today's breaking reshape of the config flow. HACS falls back to serving the default branch when there are no releases, so every download is indistinguishable from the last and there is no way to tell what is running. - scripts/release.py bumps manifest.json, commits and creates an annotated tag in one step. It refuses a dirty tree, a branch other than main, a main that differs from origin/main, a malformed version and an existing tag. It stops short of pushing, since pushing the tag is what publishes. - .github/workflows/release.yaml triggers on v* tags and refuses to publish when the tag and manifest.json disagree. That mismatch is the failure worth guarding: HACS offers the tag while Home Assistant reports the manifest, so you install "v0.2.0" and the integration page says 0.1.0. It then creates the release with gh (no third-party action). - tests/test_version.py keeps the manifest version parseable by AwesomeVersion (what HACS validates with) and in the shape the release script accepts, so a release never fails on the version string itself. Scheme: 0.x while the config entry shape is still in motion -- it changed twice today -- and 1.0.0 when it settles. Documented in the README. Local: 169 passed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NxJYWgGJtCw13qUHZtG8ki
41 lines
1.4 KiB
YAML
41 lines
1.4 KiB
YAML
name: release
|
|
|
|
on:
|
|
push:
|
|
tags: ["v*"]
|
|
|
|
jobs:
|
|
release:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
# HACS and Home Assistant both read the version from manifest.json, not
|
|
# from the tag. If the two disagree, HACS offers "v0.2.0" and installs
|
|
# something that reports itself as 0.1.0 -- which is exactly the state
|
|
# this repo was in before it had any releases at all. Fail the release
|
|
# rather than publish that.
|
|
- name: Check manifest.json version matches the tag
|
|
run: |
|
|
tag_version="${GITHUB_REF_NAME#v}"
|
|
manifest_version="$(python3 -c "import json; print(json.load(open('custom_components/openai_compatible/manifest.json'))['version'])")"
|
|
echo "tag: $GITHUB_REF_NAME -> $tag_version"
|
|
echo "manifest: $manifest_version"
|
|
if [ "$tag_version" != "$manifest_version" ]; then
|
|
echo "::error::tag ${GITHUB_REF_NAME} implies version ${tag_version}, but manifest.json says ${manifest_version}. Bump the manifest and re-tag."
|
|
exit 1
|
|
fi
|
|
|
|
- name: Create the GitHub release
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
run: |
|
|
gh release create "$GITHUB_REF_NAME" \
|
|
--title "$GITHUB_REF_NAME" \
|
|
--generate-notes \
|
|
--verify-tag
|