Files
sources/.gitea/workflows/sync-versions.yml
T
aka paul 5c34fb248b test
2026-03-09 14:48:59 +01:00

108 lines
3.7 KiB
YAML

name: Sync Versions to index.json
on:
push:
branches:
- main
paths:
- '*/*.json'
- '!index.json'
workflow_dispatch:
jobs:
sync-versions:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Sync versions from individual JSON files
run: |
node << 'EOF'
const fs = require('fs');
const path = require('path');
const { readdirSync } = require('fs');
// Read index.json
const indexPath = './index.json';
const indexData = JSON.parse(fs.readFileSync(indexPath, 'utf8'));
// Get all directories in current folder
const entries = readdirSync('.', { withFileTypes: true });
const directoriesWithJsonFiles = entries
.filter(entry => entry.isDirectory() && !entry.name.startsWith('.'))
.map(entry => entry.name)
.filter(dirName => {
const jsonPath = path.join(dirName, `${dirName}.json`);
return fs.existsSync(jsonPath);
});
console.log(`Found ${directoriesWithJsonFiles.length} directories with matching JSON files\n`);
directoriesWithJsonFiles.forEach(dir => {
const filePath = path.join(dir, `${dir}.json`);
try {
const sourceData = JSON.parse(fs.readFileSync(filePath, 'utf8'));
const indexKey = `${dir}/${dir}.json`;
// Check if this entry exists in index.json
if (indexData[indexKey]) {
// Update version in index.json
if (sourceData.version) {
const oldVersion = indexData[indexKey].version;
indexData[indexKey].version = sourceData.version;
if (oldVersion !== sourceData.version) {
console.log(`✓ ${indexKey}: ${oldVersion} → ${sourceData.version}`);
} else {
console.log(`= ${indexKey}: ${sourceData.version} (no change)`);
}
}
} else {
console.log(`⚠ ${indexKey}: Not found in index.json`);
}
} catch (error) {
console.error(`✗ ${filePath}: ${error.message}`);
}
});
// Write updated index.json with pretty formatting
fs.writeFileSync(indexPath, JSON.stringify(indexData, null, 2) + '\n');
console.log('\n✓ index.json updated successfully');
EOF
- name: Check for changes
id: verify
run: |
if git diff --quiet; then
echo "changed=false" >> $GITHUB_OUTPUT
else
echo "changed=true" >> $GITHUB_OUTPUT
git diff
fi
- name: Configure Git
if: steps.verify.outputs.changed == 'true'
run: |
git config user.name "Gitea Actions Bot"
git config user.email "actions@gitea.local"
- name: Commit and push changes
if: steps.verify.outputs.changed == 'true'
run: |
git add index.json
git commit -m "chore: sync version strings from individual JSON files" -m "Automatically updated version fields in index.json to match their respective source files" -m "Generated by sync-versions workflow"
git push origin main
env:
GIT_AUTHOR_NAME: Gitea Actions Bot
GIT_AUTHOR_EMAIL: actions@gitea.local
GIT_COMMITTER_NAME: Gitea Actions Bot
GIT_COMMITTER_EMAIL: actions@gitea.local