diff --git a/action.yml b/action.yml index 8015169..ba91c82 100644 --- a/action.yml +++ b/action.yml @@ -23,6 +23,13 @@ inputs: outputs: parsed-data: description: parsed pkgbase data + build: + description: whether a build is required or not + move: + description: whether a move is required or not + delete: + description: whether a deletion is required or not + runs: using: 'node16' main: 'dist/src/index.js' diff --git a/distribution/src/router.js b/distribution/src/router.js index 329b79b..39490bf 100644 --- a/distribution/src/router.js +++ b/distribution/src/router.js @@ -49,5 +49,8 @@ async function doParse() { const current = getCurrent(); const diff = await parse(previous, current); core.setOutput('parsed-data', JSON.stringify(diff)); + core.setOutput('build', diff.build); + core.setOutput('move', diff.move.length > 0); + core.setOutput('delete', diff.delete.length > 0); } //# sourceMappingURL=router.js.map \ No newline at end of file diff --git a/distribution/src/router.js.map b/distribution/src/router.js.map index 89bace8..cce3d5b 100644 --- a/distribution/src/router.js.map +++ b/distribution/src/router.js.map @@ -1 +1 @@ -{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"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","sourcesContent":["import * as core from '@actions/core'\nimport { context } from '@actions/github'\nimport ky from 'ky';\nimport { parse, type Result, type PackageInfo } from './pkgbase.js';\n\nexport type Mode = 'parse' | 'move' | 'delete';\n\ninterface PackageFile {\n id: number,\n size: number,\n name: string,\n md5: string,\n sha1: string,\n sha256: string,\n sha512: string\n};\n\nexport async function main() {\n const mode = core.getInput('mode', { required: true }).toLocaleLowerCase() as Mode;\n\n if (mode === 'parse') {\n await doParse();\n return;\n }\n const parsedData: Result = JSON.parse(core.getInput('parsed-data', { required: true }));\n const username = core.getInput('username', { required: true });\n const token = core.getInput('token', { required: true });\n const headers = {\n Authorization: `Basic ${btoa(`${username}:${token}`)}`\n }\n if (mode === 'move') {\n for (const pkg of parsedData.move) {\n const filename = getFilename(pkg);\n const files = await ky.get(`${context.serverUrl}/api/v1/packages/${context.repo.owner}/arch/${pkg.package}/${pkg.version}/files`, { headers }).json();\n const match = files.filter(f => f.name === filename);\n if (match.length !== 1) {\n throw new Error(`Expected one matching package, found ${match.length}`);\n }\n const packageUrl = `${context.serverUrl}/${context.repo.owner}/-/packages/arch/${pkg.package}/${pkg.version}/files/${match[0].id}`;\n const { body } = await ky.get(packageUrl);\n await ky.put(`${context.serverUrl}/api/packages/${context.repo.owner}/arch/${parsedData.actions.addRepo}`, {\n body,\n headers\n });\n }\n parsedData.delete.push(...parsedData.move);\n }\n\n for (const pkg of parsedData.delete) {\n await ky.delete(`${context.serverUrl}/api/packages/${context.repo.owner}/arch/${pkg.repository}/${pkg.package}/${pkg.version}/${pkg.architecture}`, {\n headers\n });\n }\n}\n\nfunction getFilename(pkg: PackageInfo) {\n return `${pkg.package}-${pkg.version}-${pkg.architecture}.pkg.tar.zst`;\n}\n\nfunction getCurrent(): string {\n return core.getInput('current', { required: true });\n}\n\nasync function doParse() {\n const previous = core.getInput('previous', { required: true });\n const current = getCurrent();\n const diff = await parse(previous, current);\n core.setOutput('parsed-data', JSON.stringify(diff));\n}\n"]} \ No newline at end of file +{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"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","sourcesContent":["import * as core from '@actions/core'\nimport { context } from '@actions/github'\nimport ky from 'ky';\nimport { parse, type Result, type PackageInfo } from './pkgbase.js';\n\nexport type Mode = 'parse' | 'move' | 'delete';\n\ninterface PackageFile {\n id: number,\n size: number,\n name: string,\n md5: string,\n sha1: string,\n sha256: string,\n sha512: string\n};\n\nexport async function main() {\n const mode = core.getInput('mode', { required: true }).toLocaleLowerCase() as Mode;\n\n if (mode === 'parse') {\n await doParse();\n return;\n }\n const parsedData: Result = JSON.parse(core.getInput('parsed-data', { required: true }));\n const username = core.getInput('username', { required: true });\n const token = core.getInput('token', { required: true });\n const headers = {\n Authorization: `Basic ${btoa(`${username}:${token}`)}`\n }\n if (mode === 'move') {\n for (const pkg of parsedData.move) {\n const filename = getFilename(pkg);\n const files = await ky.get(`${context.serverUrl}/api/v1/packages/${context.repo.owner}/arch/${pkg.package}/${pkg.version}/files`, { headers }).json();\n const match = files.filter(f => f.name === filename);\n if (match.length !== 1) {\n throw new Error(`Expected one matching package, found ${match.length}`);\n }\n const packageUrl = `${context.serverUrl}/${context.repo.owner}/-/packages/arch/${pkg.package}/${pkg.version}/files/${match[0].id}`;\n const { body } = await ky.get(packageUrl);\n await ky.put(`${context.serverUrl}/api/packages/${context.repo.owner}/arch/${parsedData.actions.addRepo}`, {\n body,\n headers\n });\n }\n parsedData.delete.push(...parsedData.move);\n }\n\n for (const pkg of parsedData.delete) {\n await ky.delete(`${context.serverUrl}/api/packages/${context.repo.owner}/arch/${pkg.repository}/${pkg.package}/${pkg.version}/${pkg.architecture}`, {\n headers\n });\n }\n}\n\nfunction getFilename(pkg: PackageInfo) {\n return `${pkg.package}-${pkg.version}-${pkg.architecture}.pkg.tar.zst`;\n}\n\nfunction getCurrent(): string {\n return core.getInput('current', { required: true });\n}\n\nasync function doParse() {\n const previous = core.getInput('previous', { required: true });\n const current = getCurrent();\n const diff = await parse(previous, current);\n core.setOutput('parsed-data', JSON.stringify(diff));\n core.setOutput('build', diff.build);\n core.setOutput('move', diff.move.length > 0);\n core.setOutput('delete', diff.delete.length > 0);\n}\n"]} \ No newline at end of file diff --git a/src/router.ts b/src/router.ts index 7ebd4c8..a1e4966 100644 --- a/src/router.ts +++ b/src/router.ts @@ -66,4 +66,7 @@ async function doParse() { const current = getCurrent(); const diff = await parse(previous, current); core.setOutput('parsed-data', JSON.stringify(diff)); + core.setOutput('build', diff.build); + core.setOutput('move', diff.move.length > 0); + core.setOutput('delete', diff.delete.length > 0); }