Skip to content

Implement new settings option to show played time in hours (30h 26m) or in days (1d 6h 26m) #34

Implement new settings option to show played time in hours (30h 26m) or in days (1d 6h 26m)

Implement new settings option to show played time in hours (30h 26m) or in days (1d 6h 26m) #34

name: Create PR File and Upload as Artifact
on:
pull_request:
types: [opened, synchronize, reopened, closed]
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_merge_request_artifact:
needs: check
runs-on: ubuntu-20.04
permissions:
contents: write
pull-requests: write
repository-projects: write
steps:
- name: Checkout code
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: 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: 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"
];
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`);
}
- name: Upload plugin build as artifact
uses: actions/upload-artifact@v4
id: artifact-upload-step
with:
name: SDH-PlayTime-MR${{ github.event.pull_request.number }}-${{ env.COMMIT_HASH }}
path: ./bundle
- name: Post comment with artifact URL
uses: actions/github-script@v7
with:
script: |
const prNumber = "${{ github.event.pull_request.number }}";
const commentBody = `Build artifact: [SDH-PlayTime-MR${{ github.event.pull_request.number }}-${{ env.COMMIT_HASH }}](${{ steps.artifact-upload-step.outputs.artifact-url }}).`;
const response = await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: commentBody
});