Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: update check-config command to handle release-please monorepos #1448

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions src/check-project/check-licence-files.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,15 @@ import {
* @param {string} projectDir
*/
export async function checkLicenseFiles (projectDir) {
console.info('Check license files')

const pkg = fs.readJSONSync(path.join(projectDir, 'package.json'))

if (pkg.private === true) {
console.info('Private module found, skipping licence file check')
return
}

console.info('Check license files')

if (pkg.license !== 'Apache-2.0 OR MIT') {
throw new Error(`Incorrect license field - found '${pkg.license}', expected 'Apache-2.0 OR MIT'`)
}
Expand Down
2 changes: 1 addition & 1 deletion src/check-project/check-monorepo-readme.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export async function checkMonorepoReadme (projectDir, repoUrl, defaultBranch, p
throw new Error(`Could not parse repo owner & name from ${repoUrl}`)
}

console.info('Check README files')
console.info('Check monorepo README files')

const pkg = fs.readJSONSync(path.join(projectDir, 'package.json'))

Expand Down
9 changes: 7 additions & 2 deletions src/check-project/check-readme.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,15 @@ export async function checkReadme (projectDir, repoUrl, defaultBranch, ciFile, r
throw new Error(`Could not parse repo owner & name from ${repoUrl}`)
}

console.info('Check README files')

const pkg = fs.readJSONSync(path.join(projectDir, 'package.json'))

if (pkg.private) {
console.info('Private module found, skipping README file check')
return
}

console.info('Check README files')

const readmePath = path.join(projectDir, 'README.md')
let readmeContents = ''

Expand Down
18 changes: 14 additions & 4 deletions src/check-project/check-typedoc-files.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import path from 'path'
import fs from 'fs-extra'
import {
pkg
} from '../utils.js'
import {
ensureFileHasContents
} from './utils.js'
Expand All @@ -11,15 +14,22 @@ import {
* @param {boolean} isTypescriptProject
*/
export async function checkTypedocFiles (projectDir, isTypescriptProject) {
console.info('Check typedoc files')
const manifest = fs.readJSONSync(path.join(projectDir, 'package.json'))

const pkg = fs.readJSONSync(path.join(projectDir, 'package.json'))
if (manifest.scripts.docs == null && pkg.scripts.docs == null) {
console.info('No "docs" npm script found, skipping typedoc.json check')
return
}

if (manifest.exports == null) {
console.info('No exports map found, skipping typedoc.json check')

if (pkg.exports == null) {
return
}

const entryPoints = Object.values(pkg.exports)
console.info('Check typedoc files')

const entryPoints = Object.values(manifest.exports)
.map(e => {
const path = e.import

Expand Down
13 changes: 10 additions & 3 deletions src/check-project/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ import semver from 'semver'
import yargsParser from 'yargs-parser'
import {
isMonorepoProject,
glob
glob,
usesReleasePlease
} from '../utils.js'
import { checkBuildFiles } from './check-build-files.js'
import { checkLicenseFiles } from './check-licence-files.js'
Expand Down Expand Up @@ -227,9 +228,14 @@ function chooseVersions (deps, list) {
* @param {Record<string, string>} siblingVersions
*/
function selectVersions (deps, list, siblingVersions) {
// release-please updates sibling versions to the latest patch releases but
// we try to update to the latest minor so skip that if release please is
// in use
const ignoreSiblingDeps = usesReleasePlease()

Object.entries(list).forEach(([key, value]) => {
if (deps[key] != null) {
if (siblingVersions[key] != null) {
if (siblingVersions[key] != null && !ignoreSiblingDeps) {
// take sibling version if available
deps[key] = siblingVersions[key]
} else {
Expand Down Expand Up @@ -438,13 +444,14 @@ export default new Listr([
const { branchName, repoUrl } = await getConfig(projectDir)
const manifest = fs.readJSONSync(path.join(projectDir, 'package.json'))
const monorepo = manifest.workspaces != null
const defaultCiFile = fs.existsSync(path.resolve(process.cwd(), '.github', 'workflows', 'main.yml')) ? 'main.yml' : 'js-test-and-release.yml'

const ciFile = (await prompt.get({
properties: {
ciFile: {
description: 'ciFile',
required: true,
default: 'js-test-and-release.yml'
default: defaultCiFile
}
}
})).ciFile.toString()
Expand Down
2 changes: 1 addition & 1 deletion src/check-project/manifests/typescript.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export async function typescriptManifest (manifest, branchName, repoUrl, homePag
release: (manifest.scripts?.release?.includes('semantic-release') || manifest.scripts?.release?.includes('aegir release')) ? semanticReleaseConfig(branchName) : undefined
}, repoUrl, homePage)

if (Object.keys(proposedManifest.exports).length > 1) {
if (proposedManifest.exports != null && Object.keys(proposedManifest.exports).length > 1) {
console.info('Multiple exports detected')

proposedManifest.typesVersions = {
Expand Down
13 changes: 12 additions & 1 deletion src/check-project/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ export function sortManifest (manifest) {
* @param {string} homePage
*/
export function constructManifest (manifest, manifestFields, repoUrl, homePage = repoUrl) {
return {
const output = {
name: manifest.name,
version: manifest.version,
description: manifest.description,
Expand Down Expand Up @@ -262,6 +262,17 @@ export function constructManifest (manifest, manifestFields, repoUrl, homePage =
optionalDependencies: manifest.optionalDependencies,
bundledDependencies: manifest.bundledDependencies
}

// remove publish-related fields if this module is not published
if (manifest.private === true) {
output.publishConfig = undefined
output.files = undefined
output.types = undefined
output.typesVersions = undefined
output.exports = undefined
}

return output
}

/**
Expand Down
20 changes: 18 additions & 2 deletions src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -272,9 +272,25 @@ export const isTypedCJS = isCJS && hasMain && hasTypes
export const isUntypedCJS = isCJS && hasMain

export const isMonorepoProject = (dir = process.cwd()) => {
const parentManifestPath = path.resolve(dir, '..', '..', 'package.json')
const cwd = path.resolve(dir, '..')
const manifest = readPackageUpSync({
cwd
})

return manifest?.packageJson.workspaces != null
}

return Boolean(fs.existsSync(parentManifestPath) && fs.readJSONSync(parentManifestPath).workspaces)
export const usesReleasePlease = (dir = process.cwd()) => {
try {
const mainYmlPath = path.resolve(dir, '.github', 'workflows', 'main.yml')
const contents = fs.readFileSync(mainYmlPath, {
encoding: 'utf-8'
})

return contents.includes('uses: google-github-actions/release-please-action')
} catch {
return false
}
}

/**
Expand Down