mirror of
https://github.com/shimataro/ssh-key-action.git
synced 2025-06-19 22:52:10 +10:00
* first action! (#1)
This commit is contained in:
parent
8deacc95b1
commit
ace1e6a69a
3750 changed files with 1155519 additions and 0 deletions
26
node_modules/npm-package-arg/CHANGELOG.md
generated
vendored
Normal file
26
node_modules/npm-package-arg/CHANGELOG.md
generated
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
# Change Log
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
<a name="6.1.1"></a>
|
||||
## [6.1.1](https://github.com/npm/npm-package-arg/compare/v6.1.0...v6.1.1) (2019-08-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* preserve drive letter on windows git file:// urls ([3909203](https://github.com/npm/npm-package-arg/commit/3909203))
|
||||
|
||||
|
||||
|
||||
<a name="6.1.0"></a>
|
||||
# [6.1.0](https://github.com/npm/npm-package-arg/compare/v6.0.0...v6.1.0) (2018-04-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **git:** Fix gitRange for git+ssh for private git ([#33](https://github.com/npm/npm-package-arg/issues/33)) ([647a0b3](https://github.com/npm/npm-package-arg/commit/647a0b3))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **alias:** add `npm:` registry alias spec ([#34](https://github.com/npm/npm-package-arg/issues/34)) ([ab99f8e](https://github.com/npm/npm-package-arg/commit/ab99f8e))
|
15
node_modules/npm-package-arg/LICENSE
generated
vendored
Normal file
15
node_modules/npm-package-arg/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
The ISC License
|
||||
|
||||
Copyright (c) Isaac Z. Schlueter
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
83
node_modules/npm-package-arg/README.md
generated
vendored
Normal file
83
node_modules/npm-package-arg/README.md
generated
vendored
Normal file
|
@ -0,0 +1,83 @@
|
|||
# npm-package-arg
|
||||
|
||||
[](https://travis-ci.org/npm/npm-package-arg)
|
||||
|
||||
Parses package name and specifier passed to commands like `npm install` or
|
||||
`npm cache add`, or as found in `package.json` dependency sections.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
```javascript
|
||||
var assert = require("assert")
|
||||
var npa = require("npm-package-arg")
|
||||
|
||||
// Pass in the descriptor, and it'll return an object
|
||||
try {
|
||||
var parsed = npa("@bar/foo@1.2")
|
||||
} catch (ex) {
|
||||
…
|
||||
}
|
||||
```
|
||||
|
||||
## USING
|
||||
|
||||
`var npa = require('npm-package-arg')`
|
||||
|
||||
### var result = npa(*arg*[, *where*])
|
||||
|
||||
* *arg* - a string that you might pass to `npm install`, like:
|
||||
`foo@1.2`, `@bar/foo@1.2`, `foo@user/foo`, `http://x.com/foo.tgz`,
|
||||
`git+https://github.com/user/foo`, `bitbucket:user/foo`, `foo.tar.gz`,
|
||||
`../foo/bar/` or `bar`. If the *arg* you provide doesn't have a specifier
|
||||
part, eg `foo` then the specifier will default to `latest`.
|
||||
* *where* - Optionally the path to resolve file paths relative to. Defaults to `process.cwd()`
|
||||
|
||||
**Throws** if the package name is invalid, a dist-tag is invalid or a URL's protocol is not supported.
|
||||
|
||||
### var result = npa.resolve(*name*, *spec*[, *where*])
|
||||
|
||||
* *name* - The name of the module you want to install. For example: `foo` or `@bar/foo`.
|
||||
* *spec* - The specifier indicating where and how you can get this module. Something like:
|
||||
`1.2`, `^1.7.17`, `http://x.com/foo.tgz`, `git+https://github.com/user/foo`,
|
||||
`bitbucket:user/foo`, `file:foo.tar.gz` or `file:../foo/bar/`. If not
|
||||
included then the default is `latest`.
|
||||
* *where* - Optionally the path to resolve file paths relative to. Defaults to `process.cwd()`
|
||||
|
||||
**Throws** if the package name is invalid, a dist-tag is invalid or a URL's protocol is not supported.
|
||||
|
||||
## RESULT OBJECT
|
||||
|
||||
The objects that are returned by npm-package-arg contain the following
|
||||
keys:
|
||||
|
||||
* `type` - One of the following strings:
|
||||
* `git` - A git repo
|
||||
* `tag` - A tagged version, like `"foo@latest"`
|
||||
* `version` - A specific version number, like `"foo@1.2.3"`
|
||||
* `range` - A version range, like `"foo@2.x"`
|
||||
* `file` - A local `.tar.gz`, `.tar` or `.tgz` file.
|
||||
* `directory` - A local directory.
|
||||
* `remote` - An http url (presumably to a tgz)
|
||||
* `registry` - If true this specifier refers to a resource hosted on a
|
||||
registry. This is true for `tag`, `version` and `range` types.
|
||||
* `name` - If known, the `name` field expected in the resulting pkg.
|
||||
* `scope` - If a name is something like `@org/module` then the `scope`
|
||||
field will be set to `@org`. If it doesn't have a scoped name, then
|
||||
scope is `null`.
|
||||
* `escapedName` - A version of `name` escaped to match the npm scoped packages
|
||||
specification. Mostly used when making requests against a registry. When
|
||||
`name` is `null`, `escapedName` will also be `null`.
|
||||
* `rawSpec` - The specifier part that was parsed out in calls to `npa(arg)`,
|
||||
or the value of `spec` in calls to `npa.resolve(name, spec).
|
||||
* `saveSpec` - The normalized specifier, for saving to package.json files.
|
||||
`null` for registry dependencies.
|
||||
* `fetchSpec` - The version of the specifier to be used to fetch this
|
||||
resource. `null` for shortcuts to hosted git dependencies as there isn't
|
||||
just one URL to try with them.
|
||||
* `gitRange` - If set, this is a semver specifier to match against git tags with
|
||||
* `gitCommittish` - If set, this is the specific committish to use with a git dependency.
|
||||
* `hosted` - If `from === 'hosted'` then this will be a `hosted-git-info`
|
||||
object. This property is not included when serializing the object as
|
||||
JSON.
|
||||
* `raw` - The original un-modified string that was provided. If called as
|
||||
`npa.resolve(name, spec)` then this will be `name + '@' + spec`.
|
301
node_modules/npm-package-arg/npa.js
generated
vendored
Normal file
301
node_modules/npm-package-arg/npa.js
generated
vendored
Normal file
|
@ -0,0 +1,301 @@
|
|||
'use strict'
|
||||
module.exports = npa
|
||||
module.exports.resolve = resolve
|
||||
module.exports.Result = Result
|
||||
|
||||
let url
|
||||
let HostedGit
|
||||
let semver
|
||||
let path_
|
||||
function path () {
|
||||
if (!path_) path_ = require('path')
|
||||
return path_
|
||||
}
|
||||
let validatePackageName
|
||||
let osenv
|
||||
|
||||
const isWindows = process.platform === 'win32' || global.FAKE_WINDOWS
|
||||
const hasSlashes = isWindows ? /\\|[/]/ : /[/]/
|
||||
const isURL = /^(?:git[+])?[a-z]+:/i
|
||||
const isFilename = /[.](?:tgz|tar.gz|tar)$/i
|
||||
|
||||
function npa (arg, where) {
|
||||
let name
|
||||
let spec
|
||||
if (typeof arg === 'object') {
|
||||
if (arg instanceof Result && (!where || where === arg.where)) {
|
||||
return arg
|
||||
} else if (arg.name && arg.rawSpec) {
|
||||
return npa.resolve(arg.name, arg.rawSpec, where || arg.where)
|
||||
} else {
|
||||
return npa(arg.raw, where || arg.where)
|
||||
}
|
||||
}
|
||||
const nameEndsAt = arg[0] === '@' ? arg.slice(1).indexOf('@') + 1 : arg.indexOf('@')
|
||||
const namePart = nameEndsAt > 0 ? arg.slice(0, nameEndsAt) : arg
|
||||
if (isURL.test(arg)) {
|
||||
spec = arg
|
||||
} else if (namePart[0] !== '@' && (hasSlashes.test(namePart) || isFilename.test(namePart))) {
|
||||
spec = arg
|
||||
} else if (nameEndsAt > 0) {
|
||||
name = namePart
|
||||
spec = arg.slice(nameEndsAt + 1)
|
||||
} else {
|
||||
if (!validatePackageName) validatePackageName = require('validate-npm-package-name')
|
||||
const valid = validatePackageName(arg)
|
||||
if (valid.validForOldPackages) {
|
||||
name = arg
|
||||
} else {
|
||||
spec = arg
|
||||
}
|
||||
}
|
||||
return resolve(name, spec, where, arg)
|
||||
}
|
||||
|
||||
const isFilespec = isWindows ? /^(?:[.]|~[/]|[/\\]|[a-zA-Z]:)/ : /^(?:[.]|~[/]|[/]|[a-zA-Z]:)/
|
||||
|
||||
function resolve (name, spec, where, arg) {
|
||||
const res = new Result({
|
||||
raw: arg,
|
||||
name: name,
|
||||
rawSpec: spec,
|
||||
fromArgument: arg != null
|
||||
})
|
||||
|
||||
if (name) res.setName(name)
|
||||
|
||||
if (spec && (isFilespec.test(spec) || /^file:/i.test(spec))) {
|
||||
return fromFile(res, where)
|
||||
} else if (spec && /^npm:/i.test(spec)) {
|
||||
return fromAlias(res, where)
|
||||
}
|
||||
if (!HostedGit) HostedGit = require('hosted-git-info')
|
||||
const hosted = HostedGit.fromUrl(spec, {noGitPlus: true, noCommittish: true})
|
||||
if (hosted) {
|
||||
return fromHostedGit(res, hosted)
|
||||
} else if (spec && isURL.test(spec)) {
|
||||
return fromURL(res)
|
||||
} else if (spec && (hasSlashes.test(spec) || isFilename.test(spec))) {
|
||||
return fromFile(res, where)
|
||||
} else {
|
||||
return fromRegistry(res)
|
||||
}
|
||||
}
|
||||
|
||||
function invalidPackageName (name, valid) {
|
||||
const err = new Error(`Invalid package name "${name}": ${valid.errors.join('; ')}`)
|
||||
err.code = 'EINVALIDPACKAGENAME'
|
||||
return err
|
||||
}
|
||||
function invalidTagName (name) {
|
||||
const err = new Error(`Invalid tag name "${name}": Tags may not have any characters that encodeURIComponent encodes.`)
|
||||
err.code = 'EINVALIDTAGNAME'
|
||||
return err
|
||||
}
|
||||
|
||||
function Result (opts) {
|
||||
this.type = opts.type
|
||||
this.registry = opts.registry
|
||||
this.where = opts.where
|
||||
if (opts.raw == null) {
|
||||
this.raw = opts.name ? opts.name + '@' + opts.rawSpec : opts.rawSpec
|
||||
} else {
|
||||
this.raw = opts.raw
|
||||
}
|
||||
this.name = undefined
|
||||
this.escapedName = undefined
|
||||
this.scope = undefined
|
||||
this.rawSpec = opts.rawSpec == null ? '' : opts.rawSpec
|
||||
this.saveSpec = opts.saveSpec
|
||||
this.fetchSpec = opts.fetchSpec
|
||||
if (opts.name) this.setName(opts.name)
|
||||
this.gitRange = opts.gitRange
|
||||
this.gitCommittish = opts.gitCommittish
|
||||
this.hosted = opts.hosted
|
||||
}
|
||||
|
||||
Result.prototype.setName = function (name) {
|
||||
if (!validatePackageName) validatePackageName = require('validate-npm-package-name')
|
||||
const valid = validatePackageName(name)
|
||||
if (!valid.validForOldPackages) {
|
||||
throw invalidPackageName(name, valid)
|
||||
}
|
||||
this.name = name
|
||||
this.scope = name[0] === '@' ? name.slice(0, name.indexOf('/')) : undefined
|
||||
// scoped packages in couch must have slash url-encoded, e.g. @foo%2Fbar
|
||||
this.escapedName = name.replace('/', '%2f')
|
||||
return this
|
||||
}
|
||||
|
||||
Result.prototype.toString = function () {
|
||||
const full = []
|
||||
if (this.name != null && this.name !== '') full.push(this.name)
|
||||
const spec = this.saveSpec || this.fetchSpec || this.rawSpec
|
||||
if (spec != null && spec !== '') full.push(spec)
|
||||
return full.length ? full.join('@') : this.raw
|
||||
}
|
||||
|
||||
Result.prototype.toJSON = function () {
|
||||
const result = Object.assign({}, this)
|
||||
delete result.hosted
|
||||
return result
|
||||
}
|
||||
|
||||
function setGitCommittish (res, committish) {
|
||||
if (committish != null && committish.length >= 7 && committish.slice(0, 7) === 'semver:') {
|
||||
res.gitRange = decodeURIComponent(committish.slice(7))
|
||||
res.gitCommittish = null
|
||||
} else {
|
||||
res.gitCommittish = committish === '' ? null : committish
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
const isAbsolutePath = /^[/]|^[A-Za-z]:/
|
||||
|
||||
function resolvePath (where, spec) {
|
||||
if (isAbsolutePath.test(spec)) return spec
|
||||
return path().resolve(where, spec)
|
||||
}
|
||||
|
||||
function isAbsolute (dir) {
|
||||
if (dir[0] === '/') return true
|
||||
if (/^[A-Za-z]:/.test(dir)) return true
|
||||
return false
|
||||
}
|
||||
|
||||
function fromFile (res, where) {
|
||||
if (!where) where = process.cwd()
|
||||
res.type = isFilename.test(res.rawSpec) ? 'file' : 'directory'
|
||||
res.where = where
|
||||
|
||||
const spec = res.rawSpec.replace(/\\/g, '/')
|
||||
.replace(/^file:[/]*([A-Za-z]:)/, '$1') // drive name paths on windows
|
||||
.replace(/^file:(?:[/]*([~./]))?/, '$1')
|
||||
if (/^~[/]/.test(spec)) {
|
||||
// this is needed for windows and for file:~/foo/bar
|
||||
if (!osenv) osenv = require('osenv')
|
||||
res.fetchSpec = resolvePath(osenv.home(), spec.slice(2))
|
||||
res.saveSpec = 'file:' + spec
|
||||
} else {
|
||||
res.fetchSpec = resolvePath(where, spec)
|
||||
if (isAbsolute(spec)) {
|
||||
res.saveSpec = 'file:' + spec
|
||||
} else {
|
||||
res.saveSpec = 'file:' + path().relative(where, res.fetchSpec)
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
function fromHostedGit (res, hosted) {
|
||||
res.type = 'git'
|
||||
res.hosted = hosted
|
||||
res.saveSpec = hosted.toString({noGitPlus: false, noCommittish: false})
|
||||
res.fetchSpec = hosted.getDefaultRepresentation() === 'shortcut' ? null : hosted.toString()
|
||||
return setGitCommittish(res, hosted.committish)
|
||||
}
|
||||
|
||||
function unsupportedURLType (protocol, spec) {
|
||||
const err = new Error(`Unsupported URL Type "${protocol}": ${spec}`)
|
||||
err.code = 'EUNSUPPORTEDPROTOCOL'
|
||||
return err
|
||||
}
|
||||
|
||||
function matchGitScp (spec) {
|
||||
// git ssh specifiers are overloaded to also use scp-style git
|
||||
// specifiers, so we have to parse those out and treat them special.
|
||||
// They are NOT true URIs, so we can't hand them to `url.parse`.
|
||||
//
|
||||
// This regex looks for things that look like:
|
||||
// git+ssh://git@my.custom.git.com:username/project.git#deadbeef
|
||||
//
|
||||
// ...and various combinations. The username in the beginning is *required*.
|
||||
const matched = spec.match(/^git\+ssh:\/\/([^:#]+:[^#]+(?:\.git)?)(?:#(.*))?$/i)
|
||||
return matched && !matched[1].match(/:[0-9]+\/?.*$/i) && {
|
||||
fetchSpec: matched[1],
|
||||
gitCommittish: matched[2] == null ? null : matched[2]
|
||||
}
|
||||
}
|
||||
|
||||
function fromURL (res) {
|
||||
if (!url) url = require('url')
|
||||
const urlparse = url.parse(res.rawSpec)
|
||||
res.saveSpec = res.rawSpec
|
||||
// check the protocol, and then see if it's git or not
|
||||
switch (urlparse.protocol) {
|
||||
case 'git:':
|
||||
case 'git+http:':
|
||||
case 'git+https:':
|
||||
case 'git+rsync:':
|
||||
case 'git+ftp:':
|
||||
case 'git+file:':
|
||||
case 'git+ssh:':
|
||||
res.type = 'git'
|
||||
const match = urlparse.protocol === 'git+ssh:' && matchGitScp(res.rawSpec)
|
||||
if (match) {
|
||||
setGitCommittish(res, match.gitCommittish)
|
||||
res.fetchSpec = match.fetchSpec
|
||||
} else {
|
||||
setGitCommittish(res, urlparse.hash != null ? urlparse.hash.slice(1) : '')
|
||||
urlparse.protocol = urlparse.protocol.replace(/^git[+]/, '')
|
||||
if (urlparse.protocol === 'file:' && /^git\+file:\/\/[a-z]:/i.test(res.rawSpec)) {
|
||||
// keep the drive letter : on windows file paths
|
||||
urlparse.host += ':'
|
||||
urlparse.hostname += ':'
|
||||
}
|
||||
delete urlparse.hash
|
||||
res.fetchSpec = url.format(urlparse)
|
||||
}
|
||||
break
|
||||
case 'http:':
|
||||
case 'https:':
|
||||
res.type = 'remote'
|
||||
res.fetchSpec = res.saveSpec
|
||||
break
|
||||
|
||||
default:
|
||||
throw unsupportedURLType(urlparse.protocol, res.rawSpec)
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
function fromAlias (res, where) {
|
||||
const subSpec = npa(res.rawSpec.substr(4), where)
|
||||
if (subSpec.type === 'alias') {
|
||||
throw new Error('nested aliases not supported')
|
||||
}
|
||||
if (!subSpec.registry) {
|
||||
throw new Error('aliases only work for registry deps')
|
||||
}
|
||||
res.subSpec = subSpec
|
||||
res.registry = true
|
||||
res.type = 'alias'
|
||||
res.saveSpec = null
|
||||
res.fetchSpec = null
|
||||
return res
|
||||
}
|
||||
|
||||
function fromRegistry (res) {
|
||||
res.registry = true
|
||||
const spec = res.rawSpec === '' ? 'latest' : res.rawSpec
|
||||
// no save spec for registry components as we save based on the fetched
|
||||
// version, not on the argument so this can't compute that.
|
||||
res.saveSpec = null
|
||||
res.fetchSpec = spec
|
||||
if (!semver) semver = require('semver')
|
||||
const version = semver.valid(spec, true)
|
||||
const range = semver.validRange(spec, true)
|
||||
if (version) {
|
||||
res.type = 'version'
|
||||
} else if (range) {
|
||||
res.type = 'range'
|
||||
} else {
|
||||
if (encodeURIComponent(spec) !== spec) {
|
||||
throw invalidTagName(spec)
|
||||
}
|
||||
res.type = 'tag'
|
||||
}
|
||||
return res
|
||||
}
|
75
node_modules/npm-package-arg/package.json
generated
vendored
Normal file
75
node_modules/npm-package-arg/package.json
generated
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
{
|
||||
"_from": "npm-package-arg@^6.1.0",
|
||||
"_id": "npm-package-arg@6.1.1",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==",
|
||||
"_location": "/npm-package-arg",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "npm-package-arg@^6.1.0",
|
||||
"name": "npm-package-arg",
|
||||
"escapedName": "npm-package-arg",
|
||||
"rawSpec": "^6.1.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^6.1.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/npm-pick-manifest",
|
||||
"/npm-registry-fetch",
|
||||
"/pacote"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz",
|
||||
"_shasum": "02168cb0a49a2b75bf988a28698de7b529df5cb7",
|
||||
"_spec": "npm-package-arg@^6.1.0",
|
||||
"_where": "/home/shimataro/projects/actions/ssh-key-action/node_modules/pacote",
|
||||
"author": {
|
||||
"name": "Isaac Z. Schlueter",
|
||||
"email": "i@izs.me",
|
||||
"url": "http://blog.izs.me/"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/npm/npm-package-arg/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"hosted-git-info": "^2.7.1",
|
||||
"osenv": "^0.1.5",
|
||||
"semver": "^5.6.0",
|
||||
"validate-npm-package-name": "^3.0.0"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "Parse the things that can be arguments to `npm install`",
|
||||
"devDependencies": {
|
||||
"standard": "^11.0.1",
|
||||
"standard-version": "^4.4.0",
|
||||
"tap": "^12.5.0",
|
||||
"weallbehave": "^1.2.0",
|
||||
"weallcontribute": "^1.0.8"
|
||||
},
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"files": [
|
||||
"npa.js"
|
||||
],
|
||||
"homepage": "https://github.com/npm/npm-package-arg",
|
||||
"license": "ISC",
|
||||
"main": "npa.js",
|
||||
"name": "npm-package-arg",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/npm/npm-package-arg.git"
|
||||
},
|
||||
"scripts": {
|
||||
"postrelease": "npm publish && git push --follow-tags",
|
||||
"prerelease": "npm t",
|
||||
"pretest": "standard",
|
||||
"release": "standard-version -s",
|
||||
"test": "tap --100 -J --coverage test/*.js",
|
||||
"update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'",
|
||||
"update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'"
|
||||
},
|
||||
"version": "6.1.1"
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue