Skip to content
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
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,7 @@ jobs:
- name: Publish
env:
PUBLISH_TOKEN: ${{ secrets.PUBLISH_TOKEN }}
run: npm publish --provenance
run: npm publish --provenance --tag=latest

post-release-integration:
needs: [ release, release-integration ]
Expand Down
13 changes: 7 additions & 6 deletions lib/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ const CONFIG_KEY = 'templateOSS'
const getPkgConfig = (pkg) => pkg[CONFIG_KEY] || {}

const { name: NAME, version: LATEST_VERSION } = require('../package.json')
const { minimatch } = require('minimatch')
const MERGE_KEYS = [...FILE_KEYS, 'defaultContent', 'content']
const DEFAULT_CONTENT = require.resolve(NAME)

Expand Down Expand Up @@ -157,9 +156,12 @@ const getFullConfig = async ({

const branches = uniq([...pkgConfig.branches ?? [], pkgConfig.releaseBranch]).filter(Boolean)
const gitBranches = await git.getBranches(rootPkg.path, branches)
const currentBranch = await git.currentBranch(rootPkg.path)
const isReleaseBranch = currentBranch ? minimatch(currentBranch, pkgConfig.releaseBranch) : false
const defaultBranch = await git.defaultBranch(rootPkg.path) ?? 'main'
const isReleaseBranch = !!pkgConfig.backport
const publishTag = isReleaseBranch ? `next-${pkgConfig.backport}` : 'latest'
const releaseBranch = isReleaseBranch
? pkgConfig.releaseBranch.replace(/\*/g, pkgConfig.backport)
: defaultBranch

// all derived keys
const derived = {
Expand All @@ -179,12 +181,11 @@ const getFullConfig = async ({
// controls whether we are in a monorepo with any public workspaces
isMonoPublic: isMono && !!publicPkgs.filter(p => p.path !== rootPkg.path).length,
// git
defaultBranch,
baseBranch: isReleaseBranch ? currentBranch : defaultBranch,
branches: gitBranches.branches,
branchPatterns: gitBranches.patterns,
isReleaseBranch,
// dependabot
releaseBranch,
publishTag,
dependabot: parseDependabot(pkgConfig, defaultConfig, gitBranches.branches),
// repo
repoDir: rootPkg.path,
Expand Down
2 changes: 1 addition & 1 deletion lib/content/_job-release-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ steps:
- name: Publish
env:
PUBLISH_TOKEN: $\{{ secrets.PUBLISH_TOKEN }}
run: npm publish --provenance
run: npm publish --provenance --tag={{ publishTag }}
{{else}}
runs-on: ubuntu-latest
defaults:
Expand Down
2 changes: 1 addition & 1 deletion lib/content/ci-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
ref:
required: true
type: string
default: {{ baseBranch }}
default: {{ releaseBranch }}
workflow_call:
inputs:
ref:
Expand Down
2 changes: 2 additions & 0 deletions lib/content/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,8 @@ module.exports = {
windowsCI: true,
macCI: true,
branches: ['main', 'latest'],
// set this to the major version to backport
backport: null,
releaseBranch: 'release/v*',
distPaths: [
'bin/',
Expand Down
9 changes: 0 additions & 9 deletions lib/util/git.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,17 +66,8 @@ const defaultBranch = async (path) => {
}
}

const currentBranch = async (path) => {
try {
return await tryGit(path, 'rev-parse', '--abbrev-ref', 'HEAD')
} catch {
// ignore errors
}
}

module.exports = {
getUrl,
getBranches,
defaultBranch,
currentBranch,
}
42 changes: 35 additions & 7 deletions test/apply/release.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,22 @@ const { join } = require('path')
const setup = require('../setup.js')

t.test('no workspace flags in commands', async (t) => {
const s = await setup(t)
const s = await setup(t, {
package: {
templateOSS: {
publish: true,
},
},
})
await s.apply()

const release = await s.readFile(join('.github', 'workflows', 'ci-release.yml'))
const ciRelease = await s.readFile(join('.github', 'workflows', 'ci-release.yml'))

t.match(ciRelease, '--ignore-scripts\n')
t.notMatch(ciRelease, '--ignore-scripts -ws -iwr --if-present\n')

t.match(release, '--ignore-scripts\n')
t.notMatch(release, '--ignore-scripts -ws -iwr --if-present\n')
const release = await s.readFile(join('.github', 'workflows', 'release.yml'))
t.match(release, 'npm publish --provenance --tag=latest\n')
})

t.test('uses workspace flags in commands', async (t) => {
Expand All @@ -20,8 +29,27 @@ t.test('uses workspace flags in commands', async (t) => {
})
await s.apply()

const release = await s.readFile(join('.github', 'workflows', 'ci-release.yml'))
const ciRelease = await s.readFile(join('.github', 'workflows', 'ci-release.yml'))

t.notMatch(ciRelease, '--ignore-scripts\n')
t.match(ciRelease, '--ignore-scripts -ws -iwr --if-present\n')
})

t.test('backport', async (t) => {
const s = await setup(t, {
package: {
templateOSS: {
backport: 8,
publish: true,
},
},
})
await s.apply()

const ciRelease = await s.readFile(join('.github', 'workflows', 'ci-release.yml'))

t.match(ciRelease, 'default: release/v8\n')

t.notMatch(release, '--ignore-scripts\n')
t.match(release, '--ignore-scripts -ws -iwr --if-present\n')
const release = await s.readFile(join('.github', 'workflows', 'release.yml'))
t.match(release, 'npm publish --provenance --tag=next-8\n')
})