diff --git a/.github/workflows/release-tamagotchi.yml b/.github/workflows/release-tamagotchi.yml index c343214be..c79c4a312 100644 --- a/.github/workflows/release-tamagotchi.yml +++ b/.github/workflows/release-tamagotchi.yml @@ -5,6 +5,8 @@ permissions: env: BUNDLE_NAME: '' + DEB_BUNDLE_NAME: '' + RPM_BUNDLE_NAME: '' PRODUCT_NAME: 'AIRI' VERSION: '' @@ -141,19 +143,26 @@ jobs: name: ${{ env.BUNDLE_NAME }} path: apps/stage-tamagotchi/bundle/${{ env.BUNDLE_NAME }} + - name: Get Linux Artifact Names (Nightly + Linux Only) + if: ${{ github.event_name == 'schedule' && (matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-24.04-arm') }} + working-directory: ./apps/stage-tamagotchi + run: | + echo "DEB_BUNDLE_NAME=$(pnpm exec tsx scripts/artifacts-metadata.ts ${{ matrix.target }} --get-filename deb)" >> $GITHUB_ENV + echo "RPM_BUNDLE_NAME=$(pnpm exec tsx scripts/artifacts-metadata.ts ${{ matrix.target }} --get-filename rpm)" >> $GITHUB_ENV + - name: Upload Artifacts (Nightly + Linux deb) if: ${{ github.event_name == 'schedule' && (matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-24.04-arm') }} uses: actions/upload-artifact@v4 with: - name: ${{ env.PRODUCT_NAME }}-${{ env.VERSION }}-linux-${{ matrix.arch }}.deb - path: apps/stage-tamagotchi/bundle/${{ env.PRODUCT_NAME }}-${{ env.VERSION }}-linux-${{ matrix.arch }}.deb + name: ${{ env.DEB_BUNDLE_NAME }} + path: apps/stage-tamagotchi/bundle/${{ env.DEB_BUNDLE_NAME }} - name: Upload Artifacts (Nightly + Linux rpm) if: ${{ github.event_name == 'schedule' && (matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-24.04-arm') }} uses: actions/upload-artifact@v4 with: - name: ${{ env.PRODUCT_NAME }}-${{ env.VERSION }}-linux-${{ matrix.arch }}.rpm - path: apps/stage-tamagotchi/bundle/${{ env.PRODUCT_NAME }}-${{ env.VERSION }}-linux-${{ matrix.arch }}.rpm + name: ${{ env.RPM_BUNDLE_NAME }} + path: apps/stage-tamagotchi/bundle/${{ env.RPM_BUNDLE_NAME }} # --------- # Workflow Dispatch only @@ -183,6 +192,13 @@ jobs: run: | pnpm run -F @proj-airi/stage-tamagotchi rename-artifacts ${{ matrix.target }} --release ${{ !inputs.build_only && !inputs.artifacts_only }} --tag ${{ inputs.tag }} --auto-tag ${{ !inputs.build_only }} + - name: Get Linux Artifact Names (Manual + Non-Release + Linux Only) + if: ${{ github.event_name == 'workflow_dispatch' && !inputs.build_only && inputs.artifacts_only && (matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-24.04-arm') }} + working-directory: ./apps/stage-tamagotchi + run: | + echo "DEB_BUNDLE_NAME=$(pnpm exec tsx scripts/artifacts-metadata.ts ${{ matrix.target }} --get-filename deb --release ${{ !inputs.build_only && !inputs.artifacts_only }} --tag ${{ inputs.tag }} --auto-tag ${{ !inputs.build_only }})" >> $GITHUB_ENV + echo "RPM_BUNDLE_NAME=$(pnpm exec tsx scripts/artifacts-metadata.ts ${{ matrix.target }} --get-filename rpm --release ${{ !inputs.build_only && !inputs.artifacts_only }} --tag ${{ inputs.tag }} --auto-tag ${{ !inputs.build_only }})" >> $GITHUB_ENV + - name: Upload Artifacts (Manual + Non-Release + Non-Linux) if: ${{ github.event_name == 'workflow_dispatch' && !inputs.build_only && inputs.artifacts_only && (matrix.os != 'ubuntu-latest' && matrix.os != 'ubuntu-24.04-arm') }} uses: actions/upload-artifact@v4 @@ -194,15 +210,15 @@ jobs: if: ${{ github.event_name == 'workflow_dispatch' && !inputs.build_only && inputs.artifacts_only && (matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-24.04-arm') }} uses: actions/upload-artifact@v4 with: - name: ${{ env.PRODUCT_NAME }}-${{ env.VERSION }}-linux-${{ matrix.arch }}.deb - path: apps/stage-tamagotchi/bundle/${{ env.PRODUCT_NAME }}-${{ env.VERSION }}-linux-${{ matrix.arch }}.deb + name: ${{ env.DEB_BUNDLE_NAME }} + path: apps/stage-tamagotchi/bundle/${{ env.DEB_BUNDLE_NAME }} - name: Upload Artifacts (Manual + Non-Release + Linux rpm) if: ${{ github.event_name == 'workflow_dispatch' && !inputs.build_only && inputs.artifacts_only && (matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-24.04-arm') }} uses: actions/upload-artifact@v4 with: - name: ${{ env.PRODUCT_NAME }}-${{ env.VERSION }}-linux-${{ matrix.arch }}.rpm - path: apps/stage-tamagotchi/bundle/${{ env.PRODUCT_NAME }}-${{ env.VERSION }}-linux-${{ matrix.arch }}.rpm + name: ${{ env.RPM_BUNDLE_NAME }} + path: apps/stage-tamagotchi/bundle/${{ env.RPM_BUNDLE_NAME }} - name: Upload To GitHub Releases (Manual + Overwrite Release) if: ${{ github.event_name == 'workflow_dispatch' && !inputs.build_only && !inputs.artifacts_only }} diff --git a/apps/stage-tamagotchi/scripts/artifacts-metadata.ts b/apps/stage-tamagotchi/scripts/artifacts-metadata.ts index d8fcb9e90..1cb04fd74 100644 --- a/apps/stage-tamagotchi/scripts/artifacts-metadata.ts +++ b/apps/stage-tamagotchi/scripts/artifacts-metadata.ts @@ -11,6 +11,11 @@ async function main() { 'Rename with version from package.json', { default: false }, ) + .option( + '--get-filename ', + 'Get the release artifact filename for a specific extension (e.g., deb, rpm, dmg, exe)', + { default: '', type: [String] }, + ) .option( '--auto-tag', 'Automatically tag the release with the latest git ref', @@ -46,6 +51,7 @@ async function main() { getBundleName: boolean getProductName: boolean getVersion: boolean + getFilename: string[] } const target = args.args[0] @@ -53,6 +59,16 @@ async function main() { const filenames = await getFilenames(target, argOptions) console.info(filenames[0].releaseArtifactFilename) } + if (argOptions.getFilename && argOptions.getFilename[0]) { + const ext = String(argOptions.getFilename[0]).trim() + const filenames = await getFilenames(target, argOptions) + const match = filenames.find(f => f.extension === ext) + if (!match) { + console.error(`No artifact found for extension: ${ext}`) + process.exit(1) + } + console.info(match.releaseArtifactFilename) + } if (argOptions.getProductName) { const electronBuilderConfig = await getElectronBuilderConfig() console.info(electronBuilderConfig.productName) diff --git a/apps/stage-tamagotchi/scripts/utils.ts b/apps/stage-tamagotchi/scripts/utils.ts index adda5e0b5..ada231cf6 100644 --- a/apps/stage-tamagotchi/scripts/utils.ts +++ b/apps/stage-tamagotchi/scripts/utils.ts @@ -84,6 +84,34 @@ interface FilenameOutputEntry { version: string } +function mapArchFor( + target: string, + ext: string, +): string { + switch (true) { + case target === 'aarch64-unknown-linux-gnu': + if (ext === 'rpm') { + return 'aarch64' + } + + return 'arm64' + case target === 'x86_64-unknown-linux-gnu': + if (ext === 'rpm') { + return 'x86_64' + } + + return 'x64' + case target === 'aarch64-apple-darwin': + return 'arm64' + case target === 'x86_64-apple-darwin': + return 'x64' + case target === 'x86_64-pc-windows-msvc': + return 'x64' + default: + return 'x64' + } +} + export async function getFilenames(target: string, options: { release: boolean, autoTag: boolean, tag: string[] }): Promise { const electronBuilder = await getElectronBuilderConfig() const version = await getVersion(options) @@ -102,8 +130,20 @@ export async function getFilenames(target: string, options: { release: boolean, { target: 'x86_64-pc-windows-msvc', extension: 'exe', - outputFilename: applyTemplateOfArtifactName(electronBuilder.nsis?.artifactName!, productName, beforeVersion, 'x64', 'exe'), - releaseArtifactFilename: applyTemplateOfArtifactName(electronBuilder.nsis?.artifactName!, productName, version, 'x64', 'exe'), + outputFilename: applyTemplateOfArtifactName( + electronBuilder.nsis?.artifactName!, + productName, + beforeVersion, + mapArchFor(target, 'exe'), + 'exe', + ), + releaseArtifactFilename: applyTemplateOfArtifactName( + electronBuilder.nsis?.artifactName!, + productName, + version, + mapArchFor(target, 'exe'), + 'exe', + ), productName, version, }, @@ -120,8 +160,20 @@ export async function getFilenames(target: string, options: { release: boolean, { target: 'x86_64-unknown-linux-gnu', extension: 'deb', - outputFilename: applyTemplateOfArtifactName(electronBuilder.linux.artifactName!, productName, beforeVersion, 'x64', 'deb'), - releaseArtifactFilename: applyTemplateOfArtifactName(electronBuilder.linux.artifactName!, productName, version, 'x64', 'deb'), + outputFilename: applyTemplateOfArtifactName( + electronBuilder.linux.artifactName!, + productName, + beforeVersion, + mapArchFor(target, 'deb'), + 'deb', + ), + releaseArtifactFilename: applyTemplateOfArtifactName( + electronBuilder.linux.artifactName!, + productName, + version, + mapArchFor(target, 'deb'), + 'deb', + ), productName, version, }, @@ -136,8 +188,20 @@ export async function getFilenames(target: string, options: { release: boolean, { target: 'x86_64-unknown-linux-gnu', extension: 'rpm', - outputFilename: applyTemplateOfArtifactName(electronBuilder.linux.artifactName!, productName, beforeVersion, 'x64', 'rpm'), - releaseArtifactFilename: applyTemplateOfArtifactName(electronBuilder.linux.artifactName!, productName, version, 'x64', 'rpm'), + outputFilename: applyTemplateOfArtifactName( + electronBuilder.linux.artifactName!, + productName, + beforeVersion, + mapArchFor(target, 'rpm'), + 'rpm', + ), + releaseArtifactFilename: applyTemplateOfArtifactName( + electronBuilder.linux.artifactName!, + productName, + version, + mapArchFor(target, 'rpm'), + 'rpm', + ), productName, version, }, @@ -159,8 +223,20 @@ export async function getFilenames(target: string, options: { release: boolean, { target: 'aarch64-unknown-linux-gnu', extension: 'deb', - outputFilename: applyTemplateOfArtifactName(electronBuilder.linux.artifactName!, productName, beforeVersion, 'arm64', 'deb'), - releaseArtifactFilename: applyTemplateOfArtifactName(electronBuilder.linux.artifactName!, productName, version, 'arm64', 'deb'), + outputFilename: applyTemplateOfArtifactName( + electronBuilder.linux.artifactName!, + productName, + beforeVersion, + mapArchFor(target, 'deb'), + 'deb', + ), + releaseArtifactFilename: applyTemplateOfArtifactName( + electronBuilder.linux.artifactName!, + productName, + version, + mapArchFor(target, 'deb'), + 'deb', + ), productName, version, }, @@ -175,8 +251,20 @@ export async function getFilenames(target: string, options: { release: boolean, { target: 'aarch64-unknown-linux-gnu', extension: 'rpm', - outputFilename: applyTemplateOfArtifactName(electronBuilder.linux.artifactName!, productName, beforeVersion, 'arm64', 'rpm'), - releaseArtifactFilename: applyTemplateOfArtifactName(electronBuilder.linux.artifactName!, productName, version, 'arm64', 'rpm'), + outputFilename: applyTemplateOfArtifactName( + electronBuilder.linux.artifactName!, + productName, + beforeVersion, + mapArchFor(target, 'rpm'), + 'rpm', + ), + releaseArtifactFilename: applyTemplateOfArtifactName( + electronBuilder.linux.artifactName!, + productName, + version, + mapArchFor(target, 'rpm'), + 'rpm', + ), productName, version, }, @@ -191,8 +279,20 @@ export async function getFilenames(target: string, options: { release: boolean, { target: 'aarch64-apple-darwin', extension: 'dmg', - outputFilename: applyTemplateOfArtifactName(electronBuilder.dmg?.artifactName!, productName, beforeVersion, 'arm64', 'dmg'), - releaseArtifactFilename: applyTemplateOfArtifactName(electronBuilder.dmg?.artifactName!, productName, version, 'arm64', 'dmg'), + outputFilename: applyTemplateOfArtifactName( + electronBuilder.dmg?.artifactName!, + productName, + beforeVersion, + mapArchFor(target, 'dmg'), + 'dmg', + ), + releaseArtifactFilename: applyTemplateOfArtifactName( + electronBuilder.dmg?.artifactName!, + productName, + version, + mapArchFor(target, 'dmg'), + 'dmg', + ), productName, version, }, @@ -202,8 +302,20 @@ export async function getFilenames(target: string, options: { release: boolean, { target: 'x86_64-apple-darwin', extension: 'dmg', - outputFilename: applyTemplateOfArtifactName(electronBuilder.dmg?.artifactName!, productName, beforeVersion, 'x64', 'dmg'), - releaseArtifactFilename: applyTemplateOfArtifactName(electronBuilder.dmg?.artifactName!, productName, version, 'x64', 'dmg'), + outputFilename: applyTemplateOfArtifactName( + electronBuilder.dmg?.artifactName!, + productName, + beforeVersion, + mapArchFor(target, 'dmg'), + 'dmg', + ), + releaseArtifactFilename: applyTemplateOfArtifactName( + electronBuilder.dmg?.artifactName!, + productName, + version, + mapArchFor(target, 'dmg'), + 'dmg', + ), productName, version, },