ci: fix canary builds
This commit is contained in:
parent
99bd1bc313
commit
fc9dd07211
3 changed files with 47 additions and 32 deletions
|
@ -38,7 +38,8 @@ case "$method" in
|
||||||
;;
|
;;
|
||||||
"ci-publish")
|
"ci-publish")
|
||||||
export CURRENT_COMMIT=$(git rev-parse HEAD)
|
export CURRENT_COMMIT=$(git rev-parse HEAD)
|
||||||
docker compose run --rm -e REGISTRY -e NPM_TOKEN -e CURRENT_COMMIT test publish-canary
|
docker compose up -d verdaccio
|
||||||
|
node publish-canary.js
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown command"
|
echo "Unknown command"
|
||||||
|
|
|
@ -6,6 +6,8 @@ services:
|
||||||
container_name: "verdaccio"
|
container_name: "verdaccio"
|
||||||
volumes:
|
volumes:
|
||||||
- "./.verdaccio:/verdaccio/conf"
|
- "./.verdaccio:/verdaccio/conf"
|
||||||
|
ports:
|
||||||
|
- "4873:4873"
|
||||||
networks:
|
networks:
|
||||||
- mtcute-e2e
|
- mtcute-e2e
|
||||||
build:
|
build:
|
||||||
|
|
|
@ -6,7 +6,7 @@ const fs = require('fs')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const { execSync } = require('child_process')
|
const { execSync } = require('child_process')
|
||||||
|
|
||||||
// setup token
|
// setup tokenw
|
||||||
const { NPM_TOKEN, REGISTRY, CURRENT_COMMIT } = process.env
|
const { NPM_TOKEN, REGISTRY, CURRENT_COMMIT } = process.env
|
||||||
|
|
||||||
if (!NPM_TOKEN || !REGISTRY || !CURRENT_COMMIT) {
|
if (!NPM_TOKEN || !REGISTRY || !CURRENT_COMMIT) {
|
||||||
|
@ -15,30 +15,18 @@ if (!NPM_TOKEN || !REGISTRY || !CURRENT_COMMIT) {
|
||||||
}
|
}
|
||||||
|
|
||||||
execSync(`npm config set //${REGISTRY.replace(/^https?:\/\//, '')}/:_authToken ${NPM_TOKEN}`, { stdio: 'inherit' })
|
execSync(`npm config set //${REGISTRY.replace(/^https?:\/\//, '')}/:_authToken ${NPM_TOKEN}`, { stdio: 'inherit' })
|
||||||
|
|
||||||
const nodeModulesDir = path.join(__dirname, 'node_modules')
|
|
||||||
const mtcuteDir = path.join(nodeModulesDir, '@mtcute')
|
|
||||||
|
|
||||||
const commit = CURRENT_COMMIT.slice(0, 7)
|
const commit = CURRENT_COMMIT.slice(0, 7)
|
||||||
const versions = {}
|
|
||||||
|
|
||||||
for (const pkg of fs.readdirSync(mtcuteDir)) {
|
const myPkgJson = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'), 'utf8'))
|
||||||
const pkgJsonPath = path.join(mtcuteDir, pkg, 'package.json')
|
const packages = Object.keys(myPkgJson.dependencies).filter((x) => x.startsWith('@mtcute/')).map((x) => x.slice('@mtcute/'.length))
|
||||||
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8'))
|
|
||||||
const version = `${pkgJson.version}-git.${commit}`
|
|
||||||
versions[pkg] = version
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const pkg of fs.readdirSync(mtcuteDir)) {
|
const workDir = path.join(__dirname, 'temp')
|
||||||
const pkgJsonPath = path.join(mtcuteDir, pkg, 'package.json')
|
fs.mkdirSync(workDir, { recursive: true })
|
||||||
const pkgJsonOrig = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8'))
|
|
||||||
const pkgJson = JSON.parse(JSON.stringify(pkgJsonOrig))
|
|
||||||
|
|
||||||
const version = versions[pkg]
|
async function main() {
|
||||||
pkgJson.version = version
|
const versions = {}
|
||||||
|
|
||||||
// eslint-disable-next-line no-inner-declarations
|
function fixDependencies(pkgJson, key) {
|
||||||
function fixDependencies(key) {
|
|
||||||
if (!pkgJson[key]) return
|
if (!pkgJson[key]) return
|
||||||
|
|
||||||
const deps = pkgJson[key]
|
const deps = pkgJson[key]
|
||||||
|
@ -49,18 +37,42 @@ for (const pkg of fs.readdirSync(mtcuteDir)) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fixDependencies('dependencies')
|
// prepare working directory
|
||||||
fixDependencies('peerDependencies')
|
for (const pkg of packages) {
|
||||||
fixDependencies('devDependencies')
|
const data = await fetch(`http://localhost:4873/@mtcute/${pkg}`).then((x) => x.json())
|
||||||
fixDependencies('optionalDependencies')
|
const version = data['dist-tags'].latest
|
||||||
|
const tarball = data.versions[version].dist.tarball
|
||||||
|
|
||||||
fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 4))
|
execSync(`wget -O ${pkg}.tgz ${tarball}`, { cwd: workDir, stdio: 'inherit' })
|
||||||
|
execSync(`tar -xzf ${pkg}.tgz`, { cwd: workDir, stdio: 'inherit' })
|
||||||
|
execSync(`rm ${pkg}.tgz`, { cwd: workDir, stdio: 'inherit' })
|
||||||
|
execSync(`mv package ${pkg}`, { cwd: workDir, stdio: 'inherit' })
|
||||||
|
|
||||||
execSync(`npm publish --registry ${REGISTRY} -q --tag canary`, {
|
versions[pkg] = `${version}-git.${commit}`
|
||||||
cwd: path.join(mtcuteDir, pkg),
|
}
|
||||||
stdio: 'inherit',
|
|
||||||
})
|
|
||||||
|
|
||||||
// restore package.json just in case
|
for (const pkg of packages) {
|
||||||
fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJsonOrig, null, 4))
|
const pkgDir = path.join(workDir, pkg)
|
||||||
|
|
||||||
|
const pkgJsonPath = path.join(pkgDir, 'package.json')
|
||||||
|
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8'))
|
||||||
|
|
||||||
|
fixDependencies(pkgJson, 'dependencies')
|
||||||
|
fixDependencies(pkgJson, 'peerDependencies')
|
||||||
|
fixDependencies(pkgJson, 'devDependencies')
|
||||||
|
fixDependencies(pkgJson, 'optionalDependencies')
|
||||||
|
pkgJson.version = versions[pkg]
|
||||||
|
|
||||||
|
fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 4))
|
||||||
|
|
||||||
|
execSync(`npm publish --registry ${REGISTRY} -q --tag canary`, {
|
||||||
|
cwd: pkgDir,
|
||||||
|
stdio: 'inherit',
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main().catch((err) => {
|
||||||
|
console.error(err)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
|
|
Loading…
Reference in a new issue