mirror of
https://github.com/flash555588/ai-model-workbench.git
synced 2026-07-22 06:56:38 +00:00
125 lines
3.6 KiB
YAML
125 lines
3.6 KiB
YAML
name: Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- "*.*.*"
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: "Release tag to publish, for example 0.5.5"
|
|
required: false
|
|
|
|
permissions:
|
|
contents: write
|
|
id-token: write
|
|
attestations: write
|
|
|
|
jobs:
|
|
release:
|
|
name: Build and publish Obsidian assets
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v5
|
|
with:
|
|
node-version: 22
|
|
cache: npm
|
|
|
|
- name: Install dependencies
|
|
run: npm install
|
|
|
|
- name: Typecheck
|
|
run: npm run typecheck
|
|
|
|
- name: Lint
|
|
run: npm run lint
|
|
|
|
- name: Verify knowledge index
|
|
run: npm run verify:knowledge-index
|
|
|
|
- name: Verify diagnostics
|
|
run: npm run verify:diagnostics
|
|
|
|
- name: Build
|
|
run: npm run build
|
|
|
|
- name: Verify release assets
|
|
run: npm run verify:release
|
|
|
|
- name: Prepare release notes
|
|
run: |
|
|
mkdir -p .tmp
|
|
VERSION="$(node -p "require('./manifest.json').version")"
|
|
NOTES="docs/release-notes/${VERSION}.md"
|
|
if [[ -f "${NOTES}" ]]; then
|
|
cat "${NOTES}" > .tmp/release-notes.md
|
|
printf "\n\n---\n\n" >> .tmp/release-notes.md
|
|
else
|
|
printf "# AI Model Workbench ${VERSION}\n\n" > .tmp/release-notes.md
|
|
fi
|
|
node scripts/verify-release-assets.mjs --format markdown >> .tmp/release-notes.md
|
|
|
|
- name: Attest release assets
|
|
uses: actions/attest@v4
|
|
with:
|
|
subject-path: |
|
|
main.js
|
|
manifest.json
|
|
styles.css
|
|
|
|
- name: Resolve release metadata
|
|
id: release_meta
|
|
shell: bash
|
|
run: |
|
|
VERSION="$(node -p "require('./manifest.json').version")"
|
|
TAG="${GITHUB_REF_NAME}"
|
|
if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then
|
|
TAG="${{ inputs.tag }}"
|
|
if [[ -z "${TAG}" ]]; then
|
|
TAG="${VERSION}"
|
|
fi
|
|
fi
|
|
TAG_VERSION="${TAG}"
|
|
if [[ "${TAG_VERSION}" != "${VERSION}" ]]; then
|
|
echo "Tag ${TAG} does not match manifest version ${VERSION}" >&2
|
|
exit 1
|
|
fi
|
|
{
|
|
echo "version=${VERSION}"
|
|
echo "tag=${TAG}"
|
|
} >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Create release if needed
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
TAG: ${{ steps.release_meta.outputs.tag }}
|
|
VERSION: ${{ steps.release_meta.outputs.version }}
|
|
run: |
|
|
gh release view "$TAG" >/dev/null 2>&1 || \
|
|
gh release create "$TAG" \
|
|
--title "AI Model Workbench ${VERSION}" \
|
|
--notes-file .tmp/release-notes.md
|
|
gh release edit "$TAG" \
|
|
--title "AI Model Workbench ${VERSION}" \
|
|
--notes-file .tmp/release-notes.md
|
|
|
|
- name: Remove unsupported release assets
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
TAG: ${{ steps.release_meta.outputs.tag }}
|
|
run: |
|
|
for asset_id in $(gh api "repos/${GITHUB_REPOSITORY}/releases/tags/${TAG}" --jq '.assets[] | select((.name == "main.js" or .name == "manifest.json" or .name == "styles.css") | not) | .id'); do
|
|
gh api --method DELETE "repos/${GITHUB_REPOSITORY}/releases/assets/${asset_id}"
|
|
done
|
|
|
|
- name: Upload supported release assets
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
TAG: ${{ steps.release_meta.outputs.tag }}
|
|
run: |
|
|
gh release upload "$TAG" main.js manifest.json styles.css --clobber
|