Support latest tag for golangci-lint version (#64)

This commit is contained in:
Sergey Vilgelm 2020-08-02 11:04:32 -05:00 committed by GitHub
parent b026646c83
commit 809d3b078b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 77 additions and 27 deletions

View File

@ -20,6 +20,6 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: ./ - uses: ./
with: with:
version: v1.29 version: latest
args: --issues-exit-code=0 ./sample/... args: --issues-exit-code=0 ./sample/...
only-new-issues: true only-new-issues: true

View File

@ -1,31 +1,31 @@
--- ---
name: 'Run golangci-lint' name: "Run golangci-lint"
description: 'Official golangci-lint action with line-attached annotations for found issues, caching and parallel execution.' description: "Official golangci-lint action with line-attached annotations for found issues, caching and parallel execution."
author: 'golangci' author: "golangci"
inputs: inputs:
version: version:
description: 'version of golangci-lint to use in form of v1.2' description: "version of golangci-lint to use in form of v1.2 or `latest` to use the latest version"
required: true required: false
args: args:
description: 'golangci-lint command line arguments' description: "golangci-lint command line arguments"
default: '' default: ""
required: false required: false
working-directory: working-directory:
description: 'golangci-lint working directory, default is project root' description: "golangci-lint working directory, default is project root"
required: false required: false
github-token: github-token:
description: 'the token is used for fetching patch of a pull request to show only new issues' description: "the token is used for fetching patch of a pull request to show only new issues"
default: ${{ github.token }} default: ${{ github.token }}
required: true required: true
only-new-issues: only-new-issues:
description: 'if set to true and the action runs on a pull request - the action outputs only newly found issues' description: "if set to true and the action runs on a pull request - the action outputs only newly found issues"
default: false default: false
required: true required: true
runs: runs:
using: 'node12' using: "node12"
main: 'dist/run/index.js' main: "dist/run/index.js"
post: 'dist/post_run/index.js' post: "dist/post_run/index.js"
branding: branding:
icon: 'shield' icon: "shield"
color: 'yellow' color: "yellow"

View File

@ -2019,6 +2019,9 @@ const core = __importStar(__webpack_require__(470));
const httpm = __importStar(__webpack_require__(539)); const httpm = __importStar(__webpack_require__(539));
const versionRe = /^v(\d+)\.(\d+)(?:\.(\d+))?$/; const versionRe = /^v(\d+)\.(\d+)(?:\.(\d+))?$/;
const parseVersion = (s) => { const parseVersion = (s) => {
if (s == "latest" || s == "") {
return null;
}
const match = s.match(versionRe); const match = s.match(versionRe);
if (!match) { if (!match) {
throw new Error(`invalid version string '${s}', expected format v1.2 or v1.2.3`); throw new Error(`invalid version string '${s}', expected format v1.2 or v1.2.3`);
@ -2029,13 +2032,24 @@ const parseVersion = (s) => {
patch: match[3] === undefined ? null : parseInt(match[3]), patch: match[3] === undefined ? null : parseInt(match[3]),
}; };
}; };
exports.stringifyVersion = (v) => `v${v.major}.${v.minor}${v.patch !== null ? `.${v.patch}` : ``}`; exports.stringifyVersion = (v) => {
if (v == null) {
return "latest";
}
return `v${v.major}.${v.minor}${v.patch !== null ? `.${v.patch}` : ``}`;
};
const minVersion = { const minVersion = {
major: 1, major: 1,
minor: 28, minor: 28,
patch: 3, patch: 3,
}; };
const isLessVersion = (a, b) => { const isLessVersion = (a, b) => {
if (a == null) {
return true;
}
if (b == null) {
return false;
}
if (a.major != b.major) { if (a.major != b.major) {
return a.major < b.major; return a.major < b.major;
} }
@ -2044,8 +2058,11 @@ const isLessVersion = (a, b) => {
return a.minor < b.minor; return a.minor < b.minor;
}; };
const getRequestedLintVersion = () => { const getRequestedLintVersion = () => {
const requestedLintVersion = core.getInput(`version`, { required: true }); const requestedLintVersion = core.getInput(`version`);
const parsedRequestedLintVersion = parseVersion(requestedLintVersion); const parsedRequestedLintVersion = parseVersion(requestedLintVersion);
if (parsedRequestedLintVersion == null) {
return null;
}
if (parsedRequestedLintVersion.patch !== null) { if (parsedRequestedLintVersion.patch !== null) {
throw new Error(`requested golangci-lint version '${requestedLintVersion}' was specified with the patch version, need specify only minor version`); throw new Error(`requested golangci-lint version '${requestedLintVersion}' was specified with the patch version, need specify only minor version`);
} }
@ -2076,12 +2093,12 @@ function findLintVersion() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
core.info(`Finding needed golangci-lint version...`); core.info(`Finding needed golangci-lint version...`);
const startedAt = Date.now(); const startedAt = Date.now();
const reqLintVersion = getRequestedLintVersion();
const config = yield getConfig(); const config = yield getConfig();
if (!config.MinorVersionToConfig) { if (!config.MinorVersionToConfig) {
core.warning(JSON.stringify(config)); core.warning(JSON.stringify(config));
throw new Error(`invalid config: no MinorVersionToConfig field`); throw new Error(`invalid config: no MinorVersionToConfig field`);
} }
const reqLintVersion = getRequestedLintVersion();
const versionConfig = config.MinorVersionToConfig[exports.stringifyVersion(reqLintVersion)]; const versionConfig = config.MinorVersionToConfig[exports.stringifyVersion(reqLintVersion)];
if (!versionConfig) { if (!versionConfig) {
throw new Error(`requested golangci-lint version '${exports.stringifyVersion(reqLintVersion)}' doesn't exist`); throw new Error(`requested golangci-lint version '${exports.stringifyVersion(reqLintVersion)}' doesn't exist`);

23
dist/run/index.js vendored
View File

@ -2019,6 +2019,9 @@ const core = __importStar(__webpack_require__(470));
const httpm = __importStar(__webpack_require__(539)); const httpm = __importStar(__webpack_require__(539));
const versionRe = /^v(\d+)\.(\d+)(?:\.(\d+))?$/; const versionRe = /^v(\d+)\.(\d+)(?:\.(\d+))?$/;
const parseVersion = (s) => { const parseVersion = (s) => {
if (s == "latest" || s == "") {
return null;
}
const match = s.match(versionRe); const match = s.match(versionRe);
if (!match) { if (!match) {
throw new Error(`invalid version string '${s}', expected format v1.2 or v1.2.3`); throw new Error(`invalid version string '${s}', expected format v1.2 or v1.2.3`);
@ -2029,13 +2032,24 @@ const parseVersion = (s) => {
patch: match[3] === undefined ? null : parseInt(match[3]), patch: match[3] === undefined ? null : parseInt(match[3]),
}; };
}; };
exports.stringifyVersion = (v) => `v${v.major}.${v.minor}${v.patch !== null ? `.${v.patch}` : ``}`; exports.stringifyVersion = (v) => {
if (v == null) {
return "latest";
}
return `v${v.major}.${v.minor}${v.patch !== null ? `.${v.patch}` : ``}`;
};
const minVersion = { const minVersion = {
major: 1, major: 1,
minor: 28, minor: 28,
patch: 3, patch: 3,
}; };
const isLessVersion = (a, b) => { const isLessVersion = (a, b) => {
if (a == null) {
return true;
}
if (b == null) {
return false;
}
if (a.major != b.major) { if (a.major != b.major) {
return a.major < b.major; return a.major < b.major;
} }
@ -2044,8 +2058,11 @@ const isLessVersion = (a, b) => {
return a.minor < b.minor; return a.minor < b.minor;
}; };
const getRequestedLintVersion = () => { const getRequestedLintVersion = () => {
const requestedLintVersion = core.getInput(`version`, { required: true }); const requestedLintVersion = core.getInput(`version`);
const parsedRequestedLintVersion = parseVersion(requestedLintVersion); const parsedRequestedLintVersion = parseVersion(requestedLintVersion);
if (parsedRequestedLintVersion == null) {
return null;
}
if (parsedRequestedLintVersion.patch !== null) { if (parsedRequestedLintVersion.patch !== null) {
throw new Error(`requested golangci-lint version '${requestedLintVersion}' was specified with the patch version, need specify only minor version`); throw new Error(`requested golangci-lint version '${requestedLintVersion}' was specified with the patch version, need specify only minor version`);
} }
@ -2076,12 +2093,12 @@ function findLintVersion() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
core.info(`Finding needed golangci-lint version...`); core.info(`Finding needed golangci-lint version...`);
const startedAt = Date.now(); const startedAt = Date.now();
const reqLintVersion = getRequestedLintVersion();
const config = yield getConfig(); const config = yield getConfig();
if (!config.MinorVersionToConfig) { if (!config.MinorVersionToConfig) {
core.warning(JSON.stringify(config)); core.warning(JSON.stringify(config));
throw new Error(`invalid config: no MinorVersionToConfig field`); throw new Error(`invalid config: no MinorVersionToConfig field`);
} }
const reqLintVersion = getRequestedLintVersion();
const versionConfig = config.MinorVersionToConfig[exports.stringifyVersion(reqLintVersion)]; const versionConfig = config.MinorVersionToConfig[exports.stringifyVersion(reqLintVersion)];
if (!versionConfig) { if (!versionConfig) {
throw new Error(`requested golangci-lint version '${exports.stringifyVersion(reqLintVersion)}' doesn't exist`); throw new Error(`requested golangci-lint version '${exports.stringifyVersion(reqLintVersion)}' doesn't exist`);

View File

@ -6,11 +6,14 @@ export type Version = {
major: number major: number
minor: number minor: number
patch: number | null patch: number | null
} } | null
const versionRe = /^v(\d+)\.(\d+)(?:\.(\d+))?$/ const versionRe = /^v(\d+)\.(\d+)(?:\.(\d+))?$/
const parseVersion = (s: string): Version => { const parseVersion = (s: string): Version => {
if (s == "latest" || s == "") {
return null
}
const match = s.match(versionRe) const match = s.match(versionRe)
if (!match) { if (!match) {
throw new Error(`invalid version string '${s}', expected format v1.2 or v1.2.3`) throw new Error(`invalid version string '${s}', expected format v1.2 or v1.2.3`)
@ -23,7 +26,12 @@ const parseVersion = (s: string): Version => {
} }
} }
export const stringifyVersion = (v: Version): string => `v${v.major}.${v.minor}${v.patch !== null ? `.${v.patch}` : ``}` export const stringifyVersion = (v: Version): string => {
if (v == null) {
return "latest"
}
return `v${v.major}.${v.minor}${v.patch !== null ? `.${v.patch}` : ``}`
}
const minVersion = { const minVersion = {
major: 1, major: 1,
@ -32,6 +40,12 @@ const minVersion = {
} }
const isLessVersion = (a: Version, b: Version): boolean => { const isLessVersion = (a: Version, b: Version): boolean => {
if (a == null) {
return true
}
if (b == null) {
return false
}
if (a.major != b.major) { if (a.major != b.major) {
return a.major < b.major return a.major < b.major
} }
@ -42,8 +56,11 @@ const isLessVersion = (a: Version, b: Version): boolean => {
} }
const getRequestedLintVersion = (): Version => { const getRequestedLintVersion = (): Version => {
const requestedLintVersion = core.getInput(`version`, { required: true }) const requestedLintVersion = core.getInput(`version`)
const parsedRequestedLintVersion = parseVersion(requestedLintVersion) const parsedRequestedLintVersion = parseVersion(requestedLintVersion)
if (parsedRequestedLintVersion == null) {
return null
}
if (parsedRequestedLintVersion.patch !== null) { if (parsedRequestedLintVersion.patch !== null) {
throw new Error( throw new Error(
`requested golangci-lint version '${requestedLintVersion}' was specified with the patch version, need specify only minor version` `requested golangci-lint version '${requestedLintVersion}' was specified with the patch version, need specify only minor version`
@ -93,15 +110,14 @@ const getConfig = async (): Promise<Config> => {
export async function findLintVersion(): Promise<VersionConfig> { export async function findLintVersion(): Promise<VersionConfig> {
core.info(`Finding needed golangci-lint version...`) core.info(`Finding needed golangci-lint version...`)
const startedAt = Date.now() const startedAt = Date.now()
const reqLintVersion = getRequestedLintVersion()
const config = await getConfig() const config = await getConfig()
if (!config.MinorVersionToConfig) { if (!config.MinorVersionToConfig) {
core.warning(JSON.stringify(config)) core.warning(JSON.stringify(config))
throw new Error(`invalid config: no MinorVersionToConfig field`) throw new Error(`invalid config: no MinorVersionToConfig field`)
} }
const reqLintVersion = getRequestedLintVersion()
const versionConfig = config.MinorVersionToConfig[stringifyVersion(reqLintVersion)] const versionConfig = config.MinorVersionToConfig[stringifyVersion(reqLintVersion)]
if (!versionConfig) { if (!versionConfig) {
throw new Error(`requested golangci-lint version '${stringifyVersion(reqLintVersion)}' doesn't exist`) throw new Error(`requested golangci-lint version '${stringifyVersion(reqLintVersion)}' doesn't exist`)