Add CI
All checks were successful
Build on Push and create Release on Tag / build (push) Successful in 3m55s

This commit is contained in:
MassiveBox 2025-05-08 22:47:09 +02:00
parent 5322944ad9
commit a079298433
Signed by: massivebox
GPG key ID: 9B74D3A59181947D
2 changed files with 52 additions and 9 deletions

View file

@ -1,7 +1,9 @@
name: Create Release on Tag Push
name: Build on Push and create Release on Tag
on:
push:
branches:
- main
tags:
- "v*"
@ -20,7 +22,7 @@ jobs:
node-version: 20
registry-url: "https://registry.npmjs.org"
# Install pnpm
# Install pnpm
- name: Install pnpm
uses: pnpm/action-setup@v4
id: pnpm-install
@ -28,6 +30,12 @@ jobs:
version: 8
run_install: false
# Validate Tag Matches JSON Versions
- name: Validate Tag Matches JSON Versions
if: github.ref_type == 'tag'
run: |
node scripts/validate_tag.cjs ${{ github.ref }}
# Get pnpm store directory
- name: Get pnpm store directory
id: pnpm-cache
@ -52,11 +60,22 @@ jobs:
- name: Build for production
run: pnpm build
- name: Release
uses: ncipollo/release-action@v1
# Move file
- name: Move file
run: mkdir built; mv package.zip built/package.zip
# Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
allowUpdates: true
artifactErrorsFailBuild: true
artifacts: "package.zip"
token: ${{ secrets.GITHUB_TOKEN }}
prerelease: false
path: built/package.zip
overwrite: true
# Create Forgejo Release
- name: Create Forgejo Release
if: github.ref_type == 'tag'
uses: actions/forgejo-release@v1
with:
direction: upload
release-dir: built
token: ${{ secrets.FORGE_TOKEN }}

24
scripts/validate_tag.cjs Normal file
View file

@ -0,0 +1,24 @@
const fs = require('fs');
const path = require('path');
const [tagName] = process.argv.slice(2); // Get tag from CLI arguments
if (!tagName) {
console.error('Error: No tag name provided.');
process.exit(1);
}
const TAG_VERSION = tagName.replace('refs/tags/v', '');
try {
const packageJson = JSON.parse(fs.readFileSync(path.resolve('package.json'), 'utf8'));
const pluginJson = JSON.parse(fs.readFileSync(path.resolve('plugin.json'), 'utf8'));
if (TAG_VERSION !== packageJson.version || TAG_VERSION !== pluginJson.version) {
console.error(`Error: Tag version (${TAG_VERSION}) does not match package.json (${packageJson.version}) or plugin.json (${pluginJson.version})`);
process.exit(1);
}
console.log('Tag version matches both JSON files.');
} catch (err) {
console.error('Failed to read or parse JSON files:', err.message);
process.exit(1);
}