fix: install only local version

This commit is contained in:
Olli Paloviita
2026-05-21 11:13:22 +03:00
parent afcda02325
commit a8cb2fcd11
4 changed files with 27 additions and 50 deletions
+3 -7
View File
@@ -76,16 +76,12 @@ jobs:
- name: Pack local screenci package
run: npm pack
- name: Set local screenci dependency for init
run: node -e "const fs=require('node:fs'); const pkg=require('./package.json'); fs.appendFileSync(process.env.GITHUB_ENV, 'SCREENCI_INIT_SCREENCI_DEPENDENCY=file:../' + pkg.name + '-' + pkg.version + '.tgz\n')"
- name: Run screenci init
run: node scripts/ci-run-in-shell.ts ${{ matrix.shell_name }} node bin/screenci.js init smoke-project --yes --verbose
- name: Point smoke project to local screenci tarball
run: node scripts/ci-change-to-local-screenci-build.ts
- name: Install smoke project dependencies
working-directory: smoke-project
run: npm install
- name: Run screenci test
working-directory: smoke-project
run: node ../scripts/ci-run-in-shell.ts ${{ matrix.shell_name }} npx screenci test
+18
View File
@@ -1271,6 +1271,24 @@ describe('CLI', () => {
expect(pkgCall?.[1]).not.toContain('"screenci": "file:')
})
it('should use SCREENCI_INIT_SCREENCI_DEPENDENCY when provided', async () => {
process.argv = ['node', 'cli.js', 'init', 'my-project']
process.env.SCREENCI_INIT_SCREENCI_DEPENDENCY =
'file:../screenci-0.0.32.tgz'
mockExistsSync.mockReturnValue(false)
const { main } = await import('./cli')
await main()
const pkgCall = mockWriteFile.mock.calls.find(
(c: unknown[]) =>
typeof c[0] === 'string' && c[0].endsWith('package.json')
)
expect(pkgCall?.[1]).toContain(
'"screenci": "file:../screenci-0.0.32.tgz"'
)
})
it('should use published screenci dependency when init runs through source cli', async () => {
const sourceCliPath = `${process.cwd()}/cli.ts`
process.argv = ['node', sourceCliPath, 'init', 'my-project']
+6 -1
View File
@@ -1606,6 +1606,10 @@ function getInitProjectRoot(): string {
return process.env['SCREENCI_INIT_CWD'] ?? process.cwd()
}
function getInitScreenciDependencyOverride(): string | undefined {
return process.env['SCREENCI_INIT_SCREENCI_DEPENDENCY']
}
export async function ensureScreenciSecret(): Promise<string | undefined> {
const existingSecret = process.env.SCREENCI_SECRET
if (existingSecret) return existingSecret
@@ -1721,7 +1725,8 @@ async function runInit(
'-y',
]
const skillsCommand = `npx ${skillsArgs.join(' ')}`
const screenciDependency = await readCurrentScreenciVersion()
const screenciDependency =
getInitScreenciDependencyOverride() ?? (await readCurrentScreenciVersion())
await mkdir(resolve(projectDir, 'videos'), { recursive: true })
if (shouldAddGithubActionCi) {
@@ -1,42 +0,0 @@
import { readFile, writeFile } from 'node:fs/promises'
import { resolve } from 'node:path'
async function updateProjectToUseLocalTarball(
projectDir: string,
packageRoot: string
): Promise<void> {
const packageJsonPath = resolve(packageRoot, 'package.json')
const projectPackageJsonPath = resolve(projectDir, 'package.json')
const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf8')) as {
name: string
version: string
}
const projectPackageJson = JSON.parse(
await readFile(projectPackageJsonPath, 'utf8')
) as {
dependencies?: Record<string, string>
}
const tarballName = `${packageJson.name}-${packageJson.version}.tgz`
projectPackageJson.dependencies ??= {}
projectPackageJson.dependencies['screenci'] = `file:../${tarballName}`
await writeFile(
projectPackageJsonPath,
JSON.stringify(projectPackageJson, null, 2) + '\n'
)
}
async function main(): Promise<void> {
const packageRoot = process.cwd()
const projectDir = resolve(packageRoot, 'smoke-project')
await updateProjectToUseLocalTarball(projectDir, packageRoot)
}
main().catch((error: unknown) => {
const message = error instanceof Error ? error.message : String(error)
console.error(message)
process.exit(1)
})