Skip to content

Commit

Permalink
ci(workflow): Implement build Merge Request artifact
Browse files Browse the repository at this point in the history
  • Loading branch information
ynhhoJ committed Jan 2, 2025
1 parent e6be21d commit 3f5ee11
Showing 1 changed file with 119 additions and 0 deletions.
119 changes: 119 additions & 0 deletions .github/workflows/build-merge-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
name: Create PR File and Upload as Artifact

on:
pull_request:
types: [opened, synchronize, reopened, closed]

jobs:
create_pr_file:
runs-on: ubuntu-20.04

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`);
}
// * 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});
- name: Show files list
run: ls

- name: Upload plugin build as artifact
uses: actions/upload-artifact@v4
with:
name: SDH-PlayTime-${{ github.event.pull_request.number }}-${{ COMMIT_HASH }}
path: ./bundle

0 comments on commit 3f5ee11

Please sign in to comment.