ci: fix canary builds

This commit is contained in:
alina 🌸 2024-02-07 19:05:53 +03:00
parent 99bd1bc313
commit fc9dd07211
Signed by: teidesu
SSH key fingerprint: SHA256:uNeCpw6aTSU4aIObXLvHfLkDa82HWH9EiOj9AXOIRpI
3 changed files with 47 additions and 32 deletions

View file

@ -38,7 +38,8 @@ case "$method" in
;;
"ci-publish")
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"

View file

@ -6,6 +6,8 @@ services:
container_name: "verdaccio"
volumes:
- "./.verdaccio:/verdaccio/conf"
ports:
- "4873:4873"
networks:
- mtcute-e2e
build:

View file

@ -6,7 +6,7 @@ const fs = require('fs')
const path = require('path')
const { execSync } = require('child_process')
// setup token
// setup tokenw
const { NPM_TOKEN, REGISTRY, CURRENT_COMMIT } = process.env
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' })
const nodeModulesDir = path.join(__dirname, 'node_modules')
const mtcuteDir = path.join(nodeModulesDir, '@mtcute')
const commit = CURRENT_COMMIT.slice(0, 7)
const myPkgJson = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'), 'utf8'))
const packages = Object.keys(myPkgJson.dependencies).filter((x) => x.startsWith('@mtcute/')).map((x) => x.slice('@mtcute/'.length))
const workDir = path.join(__dirname, 'temp')
fs.mkdirSync(workDir, { recursive: true })
async function main() {
const versions = {}
for (const pkg of fs.readdirSync(mtcuteDir)) {
const pkgJsonPath = path.join(mtcuteDir, pkg, 'package.json')
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 pkgJsonPath = path.join(mtcuteDir, pkg, 'package.json')
const pkgJsonOrig = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8'))
const pkgJson = JSON.parse(JSON.stringify(pkgJsonOrig))
const version = versions[pkg]
pkgJson.version = version
// eslint-disable-next-line no-inner-declarations
function fixDependencies(key) {
function fixDependencies(pkgJson, key) {
if (!pkgJson[key]) return
const deps = pkgJson[key]
@ -49,18 +37,42 @@ for (const pkg of fs.readdirSync(mtcuteDir)) {
}
}
fixDependencies('dependencies')
fixDependencies('peerDependencies')
fixDependencies('devDependencies')
fixDependencies('optionalDependencies')
// prepare working directory
for (const pkg of packages) {
const data = await fetch(`http://localhost:4873/@mtcute/${pkg}`).then((x) => x.json())
const version = data['dist-tags'].latest
const tarball = data.versions[version].dist.tarball
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' })
versions[pkg] = `${version}-git.${commit}`
}
for (const pkg of packages) {
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: path.join(mtcuteDir, pkg),
cwd: pkgDir,
stdio: 'inherit',
})
// restore package.json just in case
fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJsonOrig, null, 4))
}
}
main().catch((err) => {
console.error(err)
process.exit(1)
})