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

feat: set backport release from config instead of current branch #360

Merged
merged 1 commit into from
Sep 14, 2023
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')
})