Update registry.json #30
This file contains 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: Update Addons Table | |
on: push | |
jobs: | |
update-readme: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
env: | |
GH_TOKEN: ${{ secrets.GH_TOKEN }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- name: Install dependencies | |
run: npm install semver | |
- name: Generate and run update script | |
run: | | |
cat << 'EOF' > update-readme.js | |
const fs = require('fs'); | |
const semver = require('semver'); | |
function parseVersions(versions) { | |
const hologramVersions = Object.values(versions).map(v => { | |
const parts = v.split('-'); | |
return parts[parts.length - 1]; | |
}); | |
const sorted = hologramVersions | |
.map(v => semver.coerce(v)) | |
.sort((a, b) => semver.compare(a, b)); | |
return { | |
min: sorted[0].version, | |
max: sorted[sorted.length - 1].version | |
}; | |
} | |
function generateTables(addons) { | |
let output = []; | |
const baseURL = addons.baseURL; | |
Object.entries(addons).forEach(([name, data]) => { | |
if (name === 'baseURL') return; | |
const versions = Object.keys(data.versions); | |
const sortedAddonVersions = versions | |
.map(v => ({ version: v, coerced: semver.coerce(v) })) | |
.sort((a, b) => semver.rcompare(a.coerced, b.coerced)); | |
const latestVersion = sortedAddonVersions[0].version; | |
const { min, max } = parseVersions(data.versions); | |
const iconUrl = `${baseURL}${name}/icon.png`; | |
output.push( | |
`<img src="${iconUrl}" width="70"><br>`, | |
`### ${name} ${latestVersion}`, | |
`${data.description}`, | |
'', | |
`<sup>Compatibility with HologramLib \`${min} -> ${max}\`</sup>`, | |
'', | |
`<a href="${baseURL}${name}/releases/download/${latestVersion}/${name}-${latestVersion}.jar">`, | |
` <img width="100px" src="download.svg" alt="Download"/>`, | |
`</a>`, | |
'', | |
'<hr>', | |
'' | |
); | |
}); | |
return output.join('\n'); | |
} | |
const registry = JSON.parse(fs.readFileSync('registry.json')); | |
const readmePath = 'README.md'; | |
const markerStart = '<!-- ADDONS_START -->'; | |
const markerEnd = '<!-- ADDONS_END -->'; | |
let readme = fs.readFileSync(readmePath, 'utf8'); | |
const newContent = generateTables(registry.addons); | |
const updatedReadme = readme.replace( | |
new RegExp(`${markerStart}[\\s\\S]*?${markerEnd}`), | |
`${markerStart}\n${newContent}\n${markerEnd}` | |
); | |
fs.writeFileSync(readmePath, updatedReadme); | |
EOF | |
node update-readme.js | |
- name: Commit changes | |
run: | | |
git config --global user.name "HologramLib" | |
git config --global user.email "hologram@maxim.cat" | |
git add README.md | |
git diff --quiet && git diff --staged --quiet || git commit -m "update: addons table" | |
git push https://${{ secrets.GH_TOKEN }}@github.com/HologramLib/Addons.git |