Skip to content

Commit 32d804d

Browse files
committed
feat: replace environment variable release flags with CLI arguments and refactor release fetching logic
1 parent 5eb7f05 commit 32d804d

2 files changed

Lines changed: 66 additions & 42 deletions

File tree

src/main.ts

Lines changed: 49 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,52 @@ app.whenReady().then(async () => {
172172
await handleProtocolUrl(url)
173173
})
174174

175-
if (!is.dev || process.env.APP_UPDATE_URL || process.env.PIPELAB_OVERRIDE_RELEASE) {
175+
const config = {
176+
options: {
177+
/** project: path to file .pipelab */
178+
project: {
179+
type: 'string',
180+
short: 'p'
181+
},
182+
/** action: run | open */
183+
action: {
184+
type: 'string',
185+
short: 'a'
186+
},
187+
/** output: path to output result */
188+
output: {
189+
type: 'string',
190+
short: 'o'
191+
},
192+
inspect: {
193+
type: 'boolean'
194+
},
195+
prerelease: {
196+
type: 'boolean'
197+
},
198+
'override-release': {
199+
type: 'string'
200+
},
201+
'app-update-url': {
202+
type: 'boolean'
203+
}
204+
}
205+
} satisfies ParseArgsConfig
206+
207+
const { values } = parseArgs(config)
208+
209+
const hasAppUpdateUrlFlag = !!values['app-update-url']
210+
const hasOverrideReleaseFlag = !!values['override-release']
211+
const hasPrereleaseFlag = !!values['prerelease']
212+
const overrideReleaseVal = values['override-release']
213+
214+
if (!is.dev || hasAppUpdateUrlFlag || hasOverrideReleaseFlag || hasPrereleaseFlag) {
176215
try {
177-
const latestRelease = await fetchLatestRelease('@pipelab/app')
216+
const latestRelease = await fetchLatestRelease({
217+
packageName: '@pipelab/app',
218+
prerelease: hasPrereleaseFlag,
219+
overrideRelease: overrideReleaseVal
220+
})
178221
if (latestRelease) {
179222
logger().info('Found latest release:', latestRelease.tag_name)
180223
logger().info('Release API URL:', latestRelease.url)
@@ -294,39 +337,13 @@ app.whenReady().then(async () => {
294337
logger().error('Failed to start WebSocket server:', error)
295338
}
296339

297-
const config = {
298-
options: {
299-
/** project: path to file .pipelab */
300-
project: {
301-
type: 'string',
302-
short: 'p'
303-
},
304-
/** action: run | open */
305-
action: {
306-
type: 'string',
307-
short: 'a'
308-
},
309-
/** output: path to output result */
310-
output: {
311-
type: 'string',
312-
short: 'o'
313-
},
314-
inspect: {
315-
type: 'boolean'
316-
}
317-
}
318-
} satisfies ParseArgsConfig
319-
320-
const { values } = parseArgs(config)
321-
322340
logger().info('values', values)
323341

324342
createWindow()
325343

326-
delete values['inspect']
327-
328-
// exit if values are passed
329-
if (Object.keys(values).length > 0) {
344+
// exit if values are passed for batch execution
345+
const hasPipelineArgs = values.action || values.project || values.output
346+
if (hasPipelineArgs) {
330347
logger().info('Processing graph...')
331348

332349
const { action, project, output } = values
@@ -406,7 +423,7 @@ app.whenReady().then(async () => {
406423
mainWindow.show()
407424
mainWindow.maximize()
408425

409-
if (app.isPackaged || process.env.APP_UPDATE_URL || process.env.PIPELAB_OVERRIDE_RELEASE) {
426+
if (app.isPackaged || hasAppUpdateUrlFlag || hasOverrideReleaseFlag || hasPrereleaseFlag) {
410427
autoUpdater.checkForUpdates()
411428
setTimeout(() => {
412429
autoUpdater.checkForUpdates()

src/main/releases.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,36 +34,43 @@ export const fetchAllReleases = async (): Promise<Release[]> => {
3434
}
3535
}
3636

37+
export type FetchLatestReleaseOptions = {
38+
packageName?: string
39+
prerelease?: boolean
40+
overrideRelease?: string
41+
}
42+
3743
/**
3844
* Fetches the latest release for a specific package.
39-
* Supports PIPELAB_OVERRIDE_RELEASE environment variable.
4045
*/
41-
export const fetchLatestRelease = async (packageName = '@pipelab/app'): Promise<Release | null> => {
46+
export const fetchLatestRelease = async (
47+
options: FetchLatestReleaseOptions = {}
48+
): Promise<Release | null> => {
49+
const { packageName = '@pipelab/app', prerelease = false, overrideRelease } = options
4250
const { logger } = useLogger()
4351

4452
try {
4553
const releases = await fetchAllReleases()
4654

47-
// Handle environment variable override
48-
const override = process.env.PIPELAB_OVERRIDE_RELEASE
49-
if (override) {
50-
logger().info('Using release override:', override)
51-
const targetTag = override.includes('@') ? override : `${packageName}@${override}`
55+
// Handle command-line override
56+
if (overrideRelease) {
57+
logger().info('Using release override:', overrideRelease)
58+
const targetTag = overrideRelease.includes('@') ? overrideRelease : `${packageName}@${overrideRelease}`
5259
const release = releases.find((r) => r.tag_name === targetTag)
5360
if (release) {
5461
return release
5562
}
56-
logger().warn(`Release override ${override} not found for package ${packageName}`)
63+
logger().warn(`Release override ${overrideRelease} not found for package ${packageName}`)
5764
}
5865

5966
// Helper to get version from tag name
6067
const getVersion = (tagName: string) => tagName.split('@').pop() || '0.0.0'
6168

62-
// Filter for releases that follow the {packageName}@X.Y.Z tag pattern and filter out prereleases unconditionally unless PRERELEASE is true
69+
// Filter for releases that follow the {packageName}@X.Y.Z tag pattern and filter out prereleases unconditionally unless prerelease is true
6370
const packageReleases = releases
6471
.filter((r) => r.tag_name.startsWith(`${packageName}@`))
6572
.filter((r) => {
66-
if (process.env.PRERELEASE === 'true') {
73+
if (prerelease) {
6774
return true
6875
}
6976
if (r.prerelease) {

0 commit comments

Comments
 (0)