- Add `release-doctor.mjs` for inspecting local Windows release environment. - Enhance `release-environment.mjs` to resolve AWS CLI executable on Windows. - Create `release-status.mjs` for checking public release status across platforms. - Introduce `release-windows-local.mjs` for building and uploading Windows releases locally. - Implement `route-windows-release.mjs` to route release processes between local and GitHub Actions. - Add `windows-release-common.mjs` for shared functions related to Windows releases. - Update preload scripts to remove E2E fixture mode for app updates. - Adjust CSS for draggable regions in Windows titlebars. - Remove outdated E2E tests related to app updates. - Update tests to reflect new local-first Windows release strategy and ensure proper handling of update scenarios.
54 lines
1.8 KiB
JavaScript
54 lines
1.8 KiB
JavaScript
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
|
import { access, readFile } from 'node:fs/promises'
|
|
import os from 'node:os'
|
|
import path from 'node:path'
|
|
import process from 'node:process'
|
|
|
|
export const loadReleaseEnvironment = async (root) => {
|
|
const filePath = path.join(root, '.env')
|
|
const content = await readFile(filePath, 'utf8').catch((error) => {
|
|
if (error?.code === 'ENOENT') return ''
|
|
throw error
|
|
})
|
|
for (const rawLine of content.split(/\r?\n/u)) {
|
|
const line = rawLine.trim()
|
|
if (!line || line.startsWith('#')) continue
|
|
const separator = line.indexOf('=')
|
|
if (separator < 1) throw new Error(`invalid release environment line: ${rawLine}`)
|
|
const name = line.slice(0, separator).trim()
|
|
let value = line.slice(separator + 1).trim()
|
|
if (
|
|
(value.startsWith('"') && value.endsWith('"')) ||
|
|
(value.startsWith("'") && value.endsWith("'"))
|
|
) {
|
|
value = value.slice(1, -1)
|
|
}
|
|
if (!process.env[name]) process.env[name] = value
|
|
}
|
|
|
|
if (!process.env.AWS_ACCESS_KEY_ID && process.env.R2_ACCESS_KEY_ID) {
|
|
process.env.AWS_ACCESS_KEY_ID = process.env.R2_ACCESS_KEY_ID
|
|
}
|
|
if (!process.env.AWS_SECRET_ACCESS_KEY && process.env.R2_SECRET_ACCESS_KEY) {
|
|
process.env.AWS_SECRET_ACCESS_KEY = process.env.R2_SECRET_ACCESS_KEY
|
|
}
|
|
|
|
if (process.platform === 'win32' && !process.env.NCURATOR_AWS_CLI) {
|
|
const candidates = [
|
|
process.env.ProgramFiles
|
|
? path.join(process.env.ProgramFiles, 'Amazon', 'AWSCLIV2', 'aws.exe')
|
|
: '',
|
|
path.join(os.homedir(), '.ncurator', 'release-tools', 'awscli', 'aws.exe')
|
|
].filter(Boolean)
|
|
for (const candidate of candidates) {
|
|
const exists = await access(candidate)
|
|
.then(() => true)
|
|
.catch(() => false)
|
|
if (exists) {
|
|
process.env.NCURATOR_AWS_CLI = candidate
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|