chore(README): Add badges with downloads & updates count from Testing… #23
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: Nightly Release | |
on: | |
push: | |
branches: | |
- "master" | |
jobs: | |
check: | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- name: Setup pnpm | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 9 | |
- name: Install Dependencies | |
run: pnpm install | |
- name: TypeScript Check | |
run: pnpm tsc --noEmit | |
- name: Check formatting | |
run: pnpm biome format | |
- name: Check linting | |
run: pnpm biome lint | |
- name: Setup bun | |
uses: oven-sh/setup-bun@v2 | |
- name: Testing | |
run: bun test | |
create-release: | |
needs: check | |
permissions: | |
contents: write | |
runs-on: ubuntu-20.04 | |
env: | |
GH_TOKEN: ${{ secrets.TOKEN }} | |
outputs: | |
release_id: ${{ steps.create-release.outputs.result }} | |
tag: ${{ steps.create-release.outputs.tag }} | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- name: Get Package Version | |
run: echo "PACKAGE_VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_ENV | |
- name: Get Commit Hash | |
run: echo "COMMIT_HASH=$(git rev-parse --short "$GITHUB_SHA")" >> $GITHUB_ENV | |
- name: Delete Existing 'nightly' Tag (if exists) | |
run: | | |
git fetch --tags | |
gh release delete "nightly" --cleanup-tag -y | |
- name: Create Release | |
id: create-release | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const { data } = await github.rest.repos.createRelease({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
tag_name: "nightly", | |
name: `SDH-PlayTime development (prerelease) build`, | |
body: `SDH-PlayTime ${process.env.PACKAGE_VERSION}-#${process.env.COMMIT_HASH}`, | |
draft: true, | |
prerelease: true | |
}); | |
core.setOutput("tag", "nightly"); | |
core.setOutput("release_id", data.id); | |
return data.id | |
build-plugin: | |
needs: create-release | |
permissions: | |
contents: write | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: "master" | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- name: Setup Pnpm | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 9 | |
- name: Install Frontend Dependencies | |
run: pnpm install | |
- name: Build plugin | |
uses: actions/github-script@v7 | |
env: | |
release_id: ${{ needs.create-release.outputs.release_id }} | |
release_tag: ${{ needs.create-release.outputs.tag }} | |
with: | |
script: | | |
const fs = require("fs"); | |
const child_process = require("child_process"); | |
const path = require("path"); | |
const includeInBuild = [ | |
"plugin.json", | |
"package.json", | |
"main.py", | |
"README.md", | |
"LICENSE" | |
]; | |
async function uploadReleaseAsset(name, contents) { | |
await github.rest.repos.uploadReleaseAsset({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
release_id: process.env.release_id, | |
name: name, | |
data: contents | |
}); | |
} | |
function copyDirRecursive(parentPath, contents, dest) { | |
for (const file of contents) { | |
const fileName = file.name; | |
const srcPath = path.join(cwdPath, parentPath, fileName); | |
const destPath = path.join(cwdPath, dest, fileName); | |
if (fs.lstatSync(srcPath).isDirectory()) { | |
const dirContents = fs.readdirSync(srcPath, { withFileTypes: true }); | |
const dirDestPath = path.join(dest, fileName); | |
fs.mkdirSync(dirDestPath, { recursive: true }); | |
copyDirRecursive(path.join(parentPath, fileName), dirContents, dirDestPath); | |
} else { | |
fs.copyFileSync(srcPath, destPath); | |
} | |
} | |
} | |
const cwdPath = path.resolve(process.cwd()); | |
// * build the plugin with `pnpm build` | |
child_process.execSync("pnpm build"); | |
// * once finished, make folder with all files in includeInBuild | |
const bundleWrapperPath = path.join(cwdPath, "bundle"); | |
const bundlePath = path.join(bundleWrapperPath, "SDH-PlayTime"); | |
fs.mkdirSync(bundlePath, { recursive: true }); | |
fs.mkdirSync(path.join(bundlePath, "dist")); | |
for (const fileToInclude of includeInBuild) { | |
const srcPath = path.join(cwdPath, fileToInclude); | |
const destPath = path.join(bundlePath, fileToInclude); | |
fs.copyFileSync(srcPath, destPath); | |
} | |
// * check contents of defaults | |
const defaultsPath = path.join(cwdPath, "defaults"); | |
if (fs.existsSync(defaultsPath)) { | |
const defaultContents = fs.readdirSync(defaultsPath, { withFileTypes: true }); | |
copyDirRecursive("defaults", defaultContents, `bundle${path.sep}SDH-PlayTime`); | |
} | |
// * check contents of dist | |
const distPath = path.join(cwdPath, "dist"); | |
if (fs.existsSync(distPath)) { | |
const distContents = fs.readdirSync(distPath, { withFileTypes: true }); | |
copyDirRecursive("dist", distContents, `bundle${path.sep}SDH-PlayTime${path.sep}/dist`); | |
} | |
// * zip | |
child_process.execSync("pnpm i zip-a-folder"); | |
const { zip, COMPRESSION_LEVEL } = require('zip-a-folder'); | |
const outputZipPath = path.join(cwdPath, "bundle.zip"); | |
await zip(bundleWrapperPath, outputZipPath, {compression: COMPRESSION_LEVEL.high}); | |
// * upload to release | |
await uploadReleaseAsset(`SDH-PlayTime.zip`, fs.readFileSync(outputZipPath)); | |
publish-release: | |
needs: [create-release, build-plugin] | |
permissions: | |
contents: write | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: "master" | |
- name: Publish Release | |
id: publish-release | |
uses: actions/github-script@v7 | |
env: | |
release_id: ${{ needs.create-release.outputs.release_id }} | |
with: | |
script: | | |
github.rest.repos.updateRelease({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
release_id: process.env.release_id, | |
draft: false, | |
prerelease: true | |
}) | |