From 5052bd84781d0ffa1ca0d97819480417445cc532 Mon Sep 17 00:00:00 2001 From: ynhhoJ <22500212+ynhhoJ@users.noreply.github.com> Date: Thu, 2 Jan 2025 11:41:57 +0200 Subject: [PATCH] ci(workflow): Implement build Merge Request artifact --- .github/workflows/build-merge-request.yml | 119 ++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 .github/workflows/build-merge-request.yml diff --git a/.github/workflows/build-merge-request.yml b/.github/workflows/build-merge-request.yml new file mode 100644 index 0000000..5e6f280 --- /dev/null +++ b/.github/workflows/build-merge-request.yml @@ -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 }}-${{ process.env.COMMIT_HASH }} + path: ./bundle +