Skip to content

Commit

Permalink
feat(build): use binary golangci-lint
Browse files Browse the repository at this point in the history
  • Loading branch information
ilharp committed May 13, 2023
1 parent 7b3ac79 commit 18d1583
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 6 deletions.
2 changes: 2 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
run:
timeout: 360m

skip-dirs:
- ui/icon

Expand Down
11 changes: 9 additions & 2 deletions packages/build/tasks/lint.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { join } from 'node:path'
import { goEnv } from '../utils/config'
import { tryEachModule } from '../utils/module'
import { dir } from '../utils/path'
import { exec } from '../utils/spawn'
Expand All @@ -12,12 +14,17 @@ const buildLintArgs = (pkg: string, fix?: boolean) => {
return args
}

const lintCommand = join(
dir('buildCache', 'golangci-lint'),
goEnv.GOOS === 'windows' ? 'golangci-lint.exe' : 'golangci-lint'
)

export const lint = () =>
tryEachModule((pkg) =>
exec('golangci-lint', buildLintArgs(pkg), dir('packages', pkg))
exec(lintCommand, buildLintArgs(pkg), dir('packages', pkg))
)

export const lintFix = () =>
tryEachModule((pkg) =>
exec('golangci-lint', buildLintArgs(pkg, true), dir('packages', pkg))
exec(lintCommand, buildLintArgs(pkg, true), dir('packages', pkg))
)
50 changes: 46 additions & 4 deletions packages/build/tasks/prepare/tools.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
import { parallel } from 'gulp'
import { info } from 'gulplog'
import mkdirp from 'mkdirp'
import StreamZip from 'node-stream-zip'
import { createReadStream } from 'node:fs'
import { join } from 'node:path'
import stream from 'node:stream'
import { promisify } from 'node:util'
import * as tar from 'tar'
import {
goEnv,
sourceGitHub,
versionToolsGolangCILint,
versionToolsGoText,
Expand All @@ -20,10 +28,44 @@ export const prepareToolsVersioninfo = buildPrepareTool(
versionToolsVersioninfo
)

export const prepareToolsGolangCILint = buildPrepareTool(
'github.com/golangci/golangci-lint/cmd/golangci-lint',
versionToolsGolangCILint
)
export const prepareToolsGolangCILint = async () => {
const isWindows = goEnv.GOOS === 'windows'

const entryName = `golangci-lint-${versionToolsGolangCILint.slice(1)}-${
goEnv.GOOS
}-${goEnv.GOARCH}`
const src = `${sourceGitHub}/golangci/golangci-lint/releases/download/${versionToolsGolangCILint}/${entryName}.${
isWindows ? 'zip' : 'tar.gz'
}`

const destFile = `golangci-lint.${isWindows ? 'zip' : 'tar.gz'}`
const destDir = dir('buildCache', 'golangci-lint')

info('Checking temporary cache.')
if (
await exists(
join(destDir, isWindows ? 'golangci-lint.exe' : 'golangci-lint')
)
)
return

info('Now downloading golangci-lint.')
await download(src, dir('buildCache'), destFile)

info('Now extracting golangci-lint.')
await mkdirp(destDir)
if (isWindows) {
const zip = new StreamZip.async({ file: dir('buildCache', destFile) })
await zip.extract(entryName, dir('buildCache', destDir))
await zip.close()
} else {
await promisify(stream.finished)(
createReadStream(dir('buildCache', destFile)).pipe(
tar.extract({ cwd: dir('buildCache', destDir), strip: 1 })
)
)
}
}

export const prepareToolsGoText = buildPrepareTool(
'golang.org/x/text/cmd/gotext',
Expand Down
5 changes: 5 additions & 0 deletions packages/build/utils/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,8 @@ export const koishiVersionStrings = {
export const koiVersionStringsJson = JSON.stringify(koiVersionStrings)

//#endregion

export const goEnv = {
GOOS: spawnSyncOutput('go', ['env', 'GOOS']),
GOARCH: spawnSyncOutput('go', ['env', 'GOARCH']),
}

0 comments on commit 18d1583

Please sign in to comment.