@npmcli/template-oss 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,7 +18,7 @@ module.exports = [{
18
18
  options.config.repoFiles,
19
19
  options
20
20
  ),
21
- when: ({ config: c }) => c.isForce || (c.needsUpdate && c.applyRepo),
21
+ when: ({ config: c }) => c.applyRepo && c.needsUpdate,
22
22
  name: 'apply-repo',
23
23
  }, {
24
24
  run: (options) => run(
@@ -26,6 +26,6 @@ module.exports = [{
26
26
  options.config.moduleFiles,
27
27
  options
28
28
  ),
29
- when: ({ config: c }) => c.isForce || (c.needsUpdate && c.applyModule),
29
+ when: ({ config: c }) => c.applyModule && c.needsUpdate,
30
30
  name: 'apply-module',
31
31
  }]
@@ -0,0 +1,26 @@
1
+ const log = require('proc-log')
2
+ const PackageJson = require('@npmcli/package-json')
3
+
4
+ const run = async ({ config: c }) => {
5
+ const {
6
+ moduleDir: dir,
7
+ __CONFIG_KEY__: key,
8
+ __VERSION__: version,
9
+ } = c
10
+
11
+ log.verbose('apply-version', dir)
12
+
13
+ const pkg = await PackageJson.load(dir)
14
+ if (!pkg.content[key]) {
15
+ pkg.content[key] = { version }
16
+ } else {
17
+ pkg.content[key].version = version
18
+ }
19
+ await pkg.save()
20
+ }
21
+
22
+ module.exports = {
23
+ run,
24
+ when: ({ config: c }) => c.needsUpdate && !c.isDogFood,
25
+ name: 'apply-version',
26
+ }
@@ -2,4 +2,5 @@ const run = require('../index.js')
2
2
 
3
3
  module.exports = (root, content) => run(root, content, [
4
4
  require('./apply-files.js'),
5
+ require('./apply-version.js'),
5
6
  ])
package/lib/config.js CHANGED
@@ -56,6 +56,7 @@ const getConfig = async ({
56
56
  const isRoot = root === path
57
57
  const isLatest = version === LATEST_VERSION
58
58
  const isDogFood = pkg.name === NAME
59
+ const isForce = process.argv.includes('--force')
59
60
 
60
61
  // this is written to ci yml files so it needs to always use posix
61
62
  const pkgRelPath = makePosix(relative(root, path))
@@ -111,16 +112,18 @@ const getConfig = async ({
111
112
  pkgName: pkg.name,
112
113
  pkgNameFs: pkg.name.replace(/\//g, '-').replace(/@/g, ''),
113
114
  pkgRelPath: pkgRelPath,
114
- // force changes if we are dogfooding this repo or with force argv
115
- // XXX: setup proper cli arg parsing
116
- isForce: isDogFood || process.argv.includes('--force'),
115
+ pkgPrivate: !!pkg.private,
116
+ // booleans to control application of updates
117
+ isForce,
118
+ isDogFood,
117
119
  isLatest,
118
- needsUpdate: !isLatest,
120
+ // needs update if we are dogfooding this repo, with force argv, or its
121
+ // behind the current version
122
+ needsUpdate: isForce || isDogFood || !isLatest,
119
123
  // templateoss specific values
120
124
  __NAME__: NAME,
121
125
  __CONFIG_KEY__: CONFIG_KEY,
122
126
  __VERSION__: LATEST_VERSION,
123
- __DOGFOOD__: isDogFood,
124
127
  }
125
128
 
126
129
  // merge the rest of base and pkg content to make the
@@ -12,5 +12,5 @@ jobs:
12
12
  steps:
13
13
  {{> setupGit}}
14
14
  {{> setupNode}}
15
- - run: npm i --ignore-scripts --package-lock
15
+ - run: npm i --ignore-scripts --no-audit --no-fund --package-lock
16
16
  - run: npm audit
@@ -28,7 +28,7 @@ jobs:
28
28
  steps:
29
29
  {{> setupGit}}
30
30
  {{> setupNode}}
31
- - run: npm i --ignore-scripts
31
+ - run: npm i --ignore-scripts --no-audit --no-fund
32
32
  - run: npm run lint {{~#if isWorkspace}} -w {{pkgName}}{{/if}}
33
33
 
34
34
  test:
@@ -55,5 +55,5 @@ jobs:
55
55
  steps:
56
56
  {{> setupGit}}
57
57
  {{> setupNode useMatrix=true}}
58
- - run: npm i --ignore-scripts
58
+ - run: npm i --ignore-scripts --no-audit --no-fund
59
59
  - run: npm test --ignore-scripts {{~#if isWorkspace}} -w {{pkgName}}{{/if}}
@@ -5,6 +5,7 @@ const localConfigs = readdir(__dirname)
5
5
  .map((file) => `./${file}`)
6
6
 
7
7
  module.exports = {
8
+ root: true,
8
9
  extends: [
9
10
  '@npmcli',
10
11
  ...localConfigs,
@@ -38,7 +38,10 @@ const rootModule = {
38
38
  // Changes for each workspace but applied to the root of the repo
39
39
  const workspaceRepo = {
40
40
  add: {
41
- '.github/workflows/release-please-{{pkgNameFs}}.yml': 'release-please.yml',
41
+ '.github/workflows/release-please-{{pkgNameFs}}.yml': {
42
+ file: 'release-please.yml',
43
+ filter: (o) => !o.pkg.private,
44
+ },
42
45
  '.github/workflows/ci-{{pkgNameFs}}.yml': 'ci.yml',
43
46
  },
44
47
  }
@@ -53,6 +56,7 @@ const workspaceModule = {
53
56
  rm: [
54
57
  '.npmrc',
55
58
  '.eslintrc.!(js|local.*)',
59
+ 'SECURITY.md',
56
60
  ],
57
61
  }
58
62
 
@@ -65,6 +69,7 @@ module.exports = {
65
69
  branches: ['main', 'latest'],
66
70
  distPaths: ['bin/', 'lib/'],
67
71
  ciVersions: ['12.13.0', '12.x', '14.15.0', '14.x', '16.0.0', '16.x'],
72
+ lockfile: false,
68
73
  unwantedPackages: [
69
74
  'eslint',
70
75
  'eslint-plugin-node',
package/lib/content/npmrc CHANGED
@@ -1 +1 @@
1
- package-lock=false
1
+ package-lock={{lockfile}}
@@ -7,8 +7,12 @@
7
7
  "template-oss-apply": "template-oss-apply --force",
8
8
  "lintfix": "npm run lint -- --fix",
9
9
  "preversion": "npm test",
10
+ {{#if pkgPrivate}}
11
+ "postversion": "git push origin --follow-tags",
12
+ {{else}}
10
13
  "postversion": "npm publish",
11
14
  "prepublishOnly": "git push origin --follow-tags",
15
+ {{/if}}
12
16
  "snap": "tap",
13
17
  "test": "tap",
14
18
  "posttest": "npm run lint",
@@ -20,7 +24,7 @@
20
24
  "node": {{{json engines}}}
21
25
  },
22
26
  {{{json __CONFIG_KEY__}}}: {
23
- "version": {{#if __DOGFOOD__}}{{{del}}}{{else}}{{{json __VERSION__}}}{{/if}}
27
+ "version": {{#if isDogFood}}{{{del}}}{{else}}{{{json __VERSION__}}}{{/if}}
24
28
  },
25
29
  "templateVersion": {{{del}}},
26
30
  "standard": {{{del}}}
@@ -3,13 +3,12 @@ name: Post Dependabot Actions
3
3
  on:
4
4
  pull_request
5
5
 
6
- # https://docs.github.com/en/rest/overview/permissions-required-for-github-apps
6
+ # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
7
7
  permissions:
8
- actions: write
9
8
  contents: write
10
9
 
11
10
  jobs:
12
- Install:
11
+ template-oss-apply:
13
12
  runs-on: ubuntu-latest
14
13
  if: github.actor == 'dependabot[bot]'
15
14
  steps:
@@ -26,8 +25,9 @@ jobs:
26
25
  GITHUB_TOKEN: $\{{ secrets.GITHUB_TOKEN }}
27
26
  run: |
28
27
  gh pr checkout $\{{ github.event.pull_request.number }}
29
- npm install --ignore-scripts
28
+ npm install --ignore-scripts --no-audit --no-fund
30
29
  npm run template-oss-apply
31
30
  git add .
32
31
  git commit -am "chore: postinstall for dependabot template-oss PR"
33
32
  git push
33
+ npm run lint
@@ -11,6 +11,11 @@ on:
11
11
  - {{.}}
12
12
  {{/each}}
13
13
 
14
+ {{~#if isWorkspace}}
15
+ permissions:
16
+ contents: write
17
+ {{/if}}
18
+
14
19
  jobs:
15
20
  release-please:
16
21
  runs-on: ubuntu-latest
@@ -21,7 +26,10 @@ jobs:
21
26
  release-type: node
22
27
  {{#if pkgRelPath}}
23
28
  monorepo-tags: true
24
- paths: {{pkgRelPath}}
29
+ path: {{pkgRelPath}}
30
+ # name can be removed after this is merged
31
+ # https://github.com/google-github-actions/release-please-action/pull/459
32
+ package-name: "{{pkgName}}"
25
33
  {{/if}}
26
34
  changelog-types: >
27
35
  [
@@ -29,3 +37,19 @@ jobs:
29
37
  {{{json .}}}{{#unless @last}},{{/unless}}
30
38
  {{/each}}
31
39
  ]
40
+ {{~#if isWorkspace}}
41
+ {{> setupGit}}
42
+ {{> setupNode}}
43
+ - name: Update package-lock.json and commit
44
+ if: steps.release.outputs.pr
45
+ env:
46
+ GITHUB_TOKEN: $\{{ secrets.GITHUB_TOKEN }}
47
+ run: |
48
+ gh pr checkout $\{{ fromJSON(steps.release.outputs.pr).number }}
49
+ npm run resetdeps
50
+ title="$\{{ fromJSON(steps.release.outputs.pr).title }}"
51
+ # get the version from the pr title
52
+ # get everything after the last space
53
+ git commit -am "deps: {{pkgName}}@${title##* }"
54
+ git push
55
+ {{/if}}
@@ -1,6 +1,9 @@
1
1
  - uses: actions/setup-node@v3
2
2
  with:
3
3
  node-version: {{#if useMatrix}}$\{{ matrix.node-version }}{{else}}{{#each ciVersions}}{{#if @last}}{{.}}{{/if}}{{/each}}{{/if}}
4
+ {{#if lockfile}}
5
+ cache: npm
6
+ {{/if}}
4
7
  {{#if useMatrix}}
5
8
  - name: Update to workable npm (windows)
6
9
  # node 12 and 14 ship with npm@6, which is known to fail when updating itself in windows
package/lib/util/files.js CHANGED
@@ -9,13 +9,24 @@ const fullTarget = (dir, file, options) => join(dir, template(file, options))
9
9
 
10
10
  // given an obj of files, return the full target/source paths and associated parser
11
11
  const getParsers = (dir, files, options) => Object.entries(files).map(([t, s]) => {
12
- let { file, parser: fileParser } = typeof s === 'string' ? { file: s } : s
13
- const target = fullTarget(dir, t, options)
12
+ let {
13
+ file,
14
+ parser: fileParser,
15
+ filter,
16
+ } = typeof s === 'string' ? { file: s } : s
17
+
14
18
  file = join(options.config.sourceDir, file)
19
+ const target = fullTarget(dir, t, options)
20
+
21
+ if (typeof filter === 'function' && !filter(options)) {
22
+ return null
23
+ }
24
+
15
25
  if (fileParser) {
16
26
  // allow files to extend base parsers or create new ones
17
27
  return new (fileParser(Parser.Parsers))(target, file, options)
18
28
  }
29
+
19
30
  return new (Parser(file))(target, file, options)
20
31
  })
21
32
 
@@ -32,7 +43,9 @@ const rmEach = async (dir, files, options, fn) => {
32
43
  const parseEach = async (dir, files, options, fn) => {
33
44
  const res = []
34
45
  for (const parser of getParsers(dir, files, options)) {
35
- res.push(await fn(parser))
46
+ if (parser) {
47
+ res.push(await fn(parser))
48
+ }
36
49
  }
37
50
  return res.filter(Boolean)
38
51
  }
@@ -249,7 +249,7 @@ class PackageJson extends JsonMerge {
249
249
  return unset(pkg.content, keys)
250
250
  }
251
251
  })
252
- pkg.save()
252
+ await pkg.save()
253
253
  }
254
254
  }
255
255
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@npmcli/template-oss",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "description": "templated files used in npm CLI team oss projects",
5
5
  "main": "lib/content/index.js",
6
6
  "bin": {
@@ -34,7 +34,7 @@
34
34
  "@npmcli/fs": "^2.0.1",
35
35
  "@npmcli/git": "^3.0.0",
36
36
  "@npmcli/map-workspaces": "^2.0.2",
37
- "@npmcli/package-json": "^1.0.1",
37
+ "@npmcli/package-json": "^2.0.0",
38
38
  "diff": "^5.0.0",
39
39
  "handlebars": "^4.7.7",
40
40
  "hosted-git-info": "^5.0.0",
@@ -44,7 +44,7 @@
44
44
  "npm-package-arg": "^9.0.1",
45
45
  "proc-log": "^2.0.0",
46
46
  "semver": "^7.3.5",
47
- "yaml": "^2.0.0-10"
47
+ "yaml": "^2.0.0-11"
48
48
  },
49
49
  "files": [
50
50
  "bin/",