From 619f45c0269fc039fa603f662651edcbdf69efd5 Mon Sep 17 00:00:00 2001 From: wed150 Date: Fri, 19 Jun 2026 23:15:34 +0800 Subject: [PATCH] Add .github/workflows/build.yml --- .github/workflows/build.yml | 92 +++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..6a10187 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,92 @@ +on: + pull_request: + push: + workflow_dispatch: + +jobs: + build: + runs-on: windows-latest + defaults: + run: + shell: powershell + + env: + PROJECT_NAME: Construct + BP_SOURCE: "packs/BP" + RP_SOURCE: "packs/RP" + + steps: + - uses: https://github.bibk.top/actions/checkout@v4 + - name: Regenerate Manifest UUIDs (Node.js) + shell: powershell # 兼容 PowerShell 5.1 + env: + RP_SOURCE: ${{ env.RP_SOURCE }} + BP_SOURCE: ${{ env.BP_SOURCE }} + run: | + $jsCode = @" + const fs = require('fs'); + const crypto = require('crypto'); + const path = require('path'); + const genUUID = () => crypto.randomUUID(); + const rpHeader = genUUID(); + const bpHeader = genUUID(); + console.log('Generated RP Header UUID: ' + rpHeader); + console.log('Generated BP Header UUID: ' + bpHeader); + function processManifest(filePath, isRP) { + if (!fs.existsSync(filePath)) { + console.log('Warning: File not found: ' + filePath); + return; + } + let manifest = JSON.parse(fs.readFileSync(filePath, 'utf8')); + manifest.header.uuid = isRP ? rpHeader : bpHeader; + if (manifest.modules) { + manifest.modules.forEach(mod => { + if (mod.uuid) mod.uuid = genUUID(); + }); + } + if (manifest.dependencies) { + manifest.dependencies.forEach(dep => { + if (dep.uuid) { + dep.uuid = isRP ? bpHeader : rpHeader; + } + }); + } + fs.writeFileSync(filePath, JSON.stringify(manifest, null, 4), 'utf8'); + console.log('✅ Successfully updated: ' + filePath); + } + const rpDir = process.env.RP_SOURCE || 'packs/RP'; + const bpDir = process.env.BP_SOURCE || 'packs/BP'; + processManifest(path.join(rpDir, 'manifest.json'), true); + processManifest(path.join(bpDir, 'manifest.json'), false); + "@ + $utf8NoBom = New-Object System.Text.UTF8Encoding $false + [System.IO.File]::WriteAllText("$PWD\update_uuids.js", $jsCode, $utf8NoBom) + node update_uuids.js + Remove-Item update_uuids.js -Force + + - name: Package mcaddon + run: | + $VERSION = $env:GITHUB_REF.Split('/')[-1] + $OUTPUT = "$($env:PROJECT_NAME)-$VERSION.mcaddon" + + $BP_DIR = "$($env:PROJECT_NAME)[BP]" + $RP_DIR = "$($env:PROJECT_NAME)[RP]" + $BUILD_PATH = Join-Path -Path $PWD -ChildPath "build" + + New-Item -ItemType Directory -Path $BUILD_PATH -Force | Out-Null + Copy-Item -Path $env:BP_SOURCE -Destination (Join-Path -Path $BUILD_PATH -ChildPath $BP_DIR) -Recurse + Copy-Item -Path $env:RP_SOURCE -Destination (Join-Path -Path $BUILD_PATH -ChildPath $RP_DIR) -Recurse + + Copy-Item -Path "LICENSE" -Destination (Join-Path -Path $BUILD_PATH -ChildPath $BP_DIR) + Copy-Item -Path "LICENSE" -Destination (Join-Path -Path $BUILD_PATH -ChildPath $RP_DIR) + + Add-Type -AssemblyName System.IO.Compression.FileSystem + $ZIP_PATH = Join-Path -Path $PWD -ChildPath $OUTPUT + if (Test-Path $ZIP_PATH) { Remove-Item $ZIP_PATH } + [System.IO.Compression.ZipFile]::CreateFromDirectory($BUILD_PATH, $ZIP_PATH) + + - name: Upload Artifact + uses: https://github.bibk.top/actions/upload-artifact@v3 + with: + files: | + ${{ env.PROJECT_NAME }}-${{ github.event.release.tag_name }}.mcaddon \ No newline at end of file