From 84807be1cae2b1a71c3174983110b0c8f56e24b7 Mon Sep 17 00:00:00 2001 From: Ink33 Date: Sat, 9 Apr 2022 20:58:07 +0800 Subject: [PATCH 1/4] use go:embed for static resources (#1107) * feat: use go:embed to embed static files * ci: fix broken test * docs: update readme.md * chore: remove statik * feat: simplify code Co-authored-by: AaronLiu --- .github/workflows/build.yml | 84 ++++++++++---------- .github/workflows/test.yml | 57 +++++++------- .travis.yml | 7 +- Dockerfile | 2 - README.md | 16 +--- bootstrap/static.go | 149 ++++++++++++++++-------------------- build.sh | 122 ++++++++++++++--------------- go.mod | 4 +- go.sum | 2 +- main.go | 4 + pkg/util/path.go | 1 + 11 files changed, 204 insertions(+), 244 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 510e481..8451569 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,53 +9,49 @@ jobs: name: Build runs-on: ubuntu-18.04 steps: + - name: Set up Go 1.17 + uses: actions/setup-go@v2 + with: + go-version: "1.17" + id: go - - name: Set up Golang - uses: actions/setup-go@v1 - with: - go-version: 1.17 - id: go + - name: Check out code into the Go module directory + uses: actions/checkout@v2 + with: + clean: false + submodules: "recursive" + - run: | + git fetch --prune --unshallow --tags - - name: Check out code into the Go module directory - uses: actions/checkout@v2 - with: - clean: false - submodules: 'recursive' - - run: | - git fetch --prune --unshallow --tags + - name: Get dependencies and build + run: | + sudo apt-get update + sudo apt-get -y install gcc-mingw-w64-x86-64 + sudo apt-get -y install gcc-arm-linux-gnueabihf libc6-dev-armhf-cross + sudo apt-get -y install gcc-aarch64-linux-gnu libc6-dev-arm64-cross + chmod +x ./build.sh + ./build.sh -r b - - name: Get dependencies and build - run: | - go install github.com/rakyll/statik - export PATH=$PATH:~/go/bin/ - statik -src=models -f - sudo apt-get update - sudo apt-get -y install gcc-mingw-w64-x86-64 - sudo apt-get -y install gcc-arm-linux-gnueabihf libc6-dev-armhf-cross - sudo apt-get -y install gcc-aarch64-linux-gnu libc6-dev-arm64-cross - chmod +x ./build.sh - ./build.sh -r b + - name: Upload binary files (windows_amd64) + uses: actions/upload-artifact@v2 + with: + name: cloudreve_windows_amd64 + path: release/cloudreve*windows_amd64.* - - name: Upload binary files (windows_amd64) - uses: actions/upload-artifact@v2 - with: - name: cloudreve_windows_amd64 - path: release/cloudreve*windows_amd64.* + - name: Upload binary files (linux_amd64) + uses: actions/upload-artifact@v2 + with: + name: cloudreve_linux_amd64 + path: release/cloudreve*linux_amd64.* - - name: Upload binary files (linux_amd64) - uses: actions/upload-artifact@v2 - with: - name: cloudreve_linux_amd64 - path: release/cloudreve*linux_amd64.* + - name: Upload binary files (linux_arm) + uses: actions/upload-artifact@v2 + with: + name: cloudreve_linux_arm + path: release/cloudreve*linux_arm.* - - name: Upload binary files (linux_arm) - uses: actions/upload-artifact@v2 - with: - name: cloudreve_linux_arm - path: release/cloudreve*linux_arm.* - - - name: Upload binary files (linux_arm64) - uses: actions/upload-artifact@v2 - with: - name: cloudreve_linux_arm64 - path: release/cloudreve*linux_arm64.* + - name: Upload binary files (linux_arm64) + uses: actions/upload-artifact@v2 + with: + name: cloudreve_linux_arm64 + path: release/cloudreve*linux_arm64.* diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0c01296..944b015 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,46 +2,43 @@ name: Test on: pull_request: - branches: + branches: - master push: - branches: [ master ] + branches: [master] jobs: - test: name: Test runs-on: ubuntu-18.04 steps: + - name: Set up Go 1.17 + uses: actions/setup-go@v2 + with: + go-version: "1.17" + id: go - - name: Set up Golang - uses: actions/setup-go@v1 - with: - go-version: 1.17 - id: go + - name: Check out code into the Go module directory + uses: actions/checkout@v2 + with: + submodules: "recursive" - - name: Check out code into the Go module directory - uses: actions/checkout@v2 - with: - submodules: 'recursive' + - name: Build static files + run: | + mkdir assets/build + touch assets/build/test.html - - name: Get dependencies - run: | - go get github.com/rakyll/statik - export PATH=$PATH:~/go/bin/ - statik -src=models -f + - name: Test + run: go test -coverprofile=coverage.txt -covermode=atomic ./... - - name: Test - run: go test -coverprofile=coverage.txt -covermode=atomic ./... + - name: Upload binary files (linux_arm) + uses: actions/upload-artifact@v2 + with: + name: cloudreve_linux_arm + path: release/cloudreve*linux_arm.* - - name: Upload binary files (linux_arm) - uses: actions/upload-artifact@v2 - with: - name: cloudreve_linux_arm - path: release/cloudreve*linux_arm.* - - - name: Upload binary files (linux_arm64) - uses: actions/upload-artifact@v2 - with: - name: cloudreve_linux_arm64 - path: release/cloudreve*linux_arm64.* + - name: Upload binary files (linux_arm64) + uses: actions/upload-artifact@v2 + with: + name: cloudreve_linux_arm64 + path: release/cloudreve*linux_arm64.* diff --git a/.travis.yml b/.travis.yml index 22d4990..275b4c3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,10 +4,9 @@ go: node_js: "12.16.3" git: depth: 1 -install: - - go get github.com/rakyll/statik before_script: - - statik -src=models -f + - mkdir assets/build + - touch assets/build/test.html script: - go test -coverprofile=coverage.txt -covermode=atomic ./... after_success: @@ -27,4 +26,4 @@ deploy: draft: true skip_cleanup: true on: - tags: true \ No newline at end of file + tags: true diff --git a/Dockerfile b/Dockerfile index 4b51c5e..e99d32a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,8 +28,6 @@ RUN set -ex \ && apk add gcc libc-dev git \ && export COMMIT_SHA=$(git rev-parse --short HEAD) \ && export VERSION=$(git describe --tags) \ - && (cd && go get github.com/rakyll/statik) \ - && statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico -f \ && go install -ldflags "-X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=${VERSION}' \ -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=${COMMIT_SHA}'\ -w -s" diff --git a/README.md b/README.md index 408f7b8..76ebf8a 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ chmod +x ./cloudreve ## :gear: 构建 -自行构建前需要拥有 `Go >= 1.13`、`yarn`等必要依赖。 +自行构建前需要拥有 `Go >= 1.17`、`yarn`等必要依赖。 #### 克隆代码 @@ -85,19 +85,7 @@ cd assets yarn install # 开始构建 yarn run build -``` -#### 嵌入静态资源 - -```shell -# 回到项目主目录 -cd ../ - -# 安装 statik, 用于嵌入静态资源 -go get github.com/rakyll/statik - -# 开始嵌入 -statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico -f ``` #### 编译项目 @@ -108,7 +96,7 @@ export COMMIT_SHA=$(git rev-parse --short HEAD) export VERSION=$(git describe --tags) # 开始编译 -go build -a -o cloudreve -ldflags " -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA'" +go build -a -o cloudreve -ldflags "-s -w -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA'" ``` 你也可以使用项目根目录下的`build.sh`快速开始构建: diff --git a/bootstrap/static.go b/bootstrap/static.go index 09e393d..f767f04 100644 --- a/bootstrap/static.go +++ b/bootstrap/static.go @@ -1,21 +1,26 @@ package bootstrap import ( + "bufio" + "embed" "encoding/json" "io" - "io/ioutil" + "io/fs" "net/http" - "path" + "path/filepath" + + "github.com/pkg/errors" "github.com/cloudreve/Cloudreve/v3/pkg/conf" "github.com/cloudreve/Cloudreve/v3/pkg/util" - _ "github.com/cloudreve/Cloudreve/v3/statik" + "github.com/gin-contrib/static" - "github.com/rakyll/statik/fs" ) const StaticFolder = "statics" +var StaticEmbed embed.FS + type GinFS struct { FS http.FileSystem } @@ -35,124 +40,100 @@ func (b *GinFS) Open(name string) (http.File, error) { // Exists 文件是否存在 func (b *GinFS) Exists(prefix string, filepath string) bool { - if _, err := b.FS.Open(filepath); err != nil { return false } return true - } // InitStatic 初始化静态资源文件 func InitStatic() { - var err error - if util.Exists(util.RelativePath(StaticFolder)) { util.Log().Info("检测到 statics 目录存在,将使用此目录下的静态资源文件") StaticFS = static.LocalFile(util.RelativePath("statics"), false) - - // 检查静态资源的版本 - f, err := StaticFS.Open("version.json") - if err != nil { - util.Log().Warning("静态资源版本标识文件不存在,请重新构建或删除 statics 目录") - return - } - - b, err := ioutil.ReadAll(f) - if err != nil { - util.Log().Warning("无法读取静态资源文件版本,请重新构建或删除 statics 目录") - return - } - - var v staticVersion - if err := json.Unmarshal(b, &v); err != nil { - util.Log().Warning("无法解析静态资源文件版本, %s", err) - return - } - - staticName := "cloudreve-frontend" - if conf.IsPro == "true" { - staticName += "-pro" - } - - if v.Name != staticName { - util.Log().Warning("静态资源版本不匹配,请重新构建或删除 statics 目录") - return - } - - if v.Version != conf.RequiredStaticVersion { - util.Log().Warning("静态资源版本不匹配 [当前 %s, 需要: %s],请重新构建或删除 statics 目录", v.Version, conf.RequiredStaticVersion) - return - } - } else { - StaticFS = &GinFS{} - StaticFS.(*GinFS).FS, err = fs.New() + // 初始化静态资源 + embedFS, err := fs.Sub(StaticEmbed, "assets/build") if err != nil { util.Log().Panic("无法初始化静态资源, %s", err) } + + StaticFS = &GinFS{ + FS: http.FS(embedFS), + } + } + // 检查静态资源的版本 + f, err := StaticFS.Open("version.json") + if err != nil { + util.Log().Warning("静态资源版本标识文件不存在,请重新构建或删除 statics 目录") + return } + b, err := io.ReadAll(f) + if err != nil { + util.Log().Warning("无法读取静态资源文件版本,请重新构建或删除 statics 目录") + return + } + + var v staticVersion + if err := json.Unmarshal(b, &v); err != nil { + util.Log().Warning("无法解析静态资源文件版本, %s", err) + return + } + + staticName := "cloudreve-frontend" + if conf.IsPro == "true" { + staticName += "-pro" + } + + if v.Name != staticName { + util.Log().Warning("静态资源版本不匹配,请重新构建或删除 statics 目录") + return + } + + if v.Version != conf.RequiredStaticVersion { + util.Log().Warning("静态资源版本不匹配 [当前 %s, 需要: %s],请重新构建或删除 statics 目录", v.Version, conf.RequiredStaticVersion) + return + } } // Eject 抽离内置静态资源 func Eject() { - staticFS, err := fs.New() + // 初始化静态资源 + embedFS, err := fs.Sub(StaticEmbed, "assets/build") if err != nil { util.Log().Panic("无法初始化静态资源, %s", err) } - root, err := staticFS.Open("/") - if err != nil { - util.Log().Panic("根目录不存在, %s", err) - } - - var walk func(relPath string, object http.File) - walk = func(relPath string, object http.File) { - stat, err := object.Stat() + var walk func(relPath string, d fs.DirEntry, err error) error + walk = func(relPath string, d fs.DirEntry, err error) error { if err != nil { - util.Log().Error("无法获取[%s]的信息, %s, 跳过...", relPath, err) - return + return errors.Errorf("无法获取[%s]的信息, %s, 跳过...", relPath, err) } - if !stat.IsDir() { + if !d.IsDir() { // 写入文件 - out, err := util.CreatNestedFile(util.RelativePath(StaticFolder + relPath)) + out, err := util.CreatNestedFile(filepath.Join(util.RelativePath(""), StaticFolder, relPath)) defer out.Close() if err != nil { - util.Log().Error("无法创建文件[%s], %s, 跳过...", relPath, err) - return + return errors.Errorf("无法创建文件[%s], %s, 跳过...", relPath, err) } util.Log().Info("导出 [%s]...", relPath) - if _, err := io.Copy(out, object); err != nil { - util.Log().Error("无法写入文件[%s], %s, 跳过...", relPath, err) - return + obj, _ := embedFS.Open(relPath) + if _, err := io.Copy(out, bufio.NewReader(obj)); err != nil { + return errors.Errorf("无法写入文件[%s], %s, 跳过...", relPath, err) } - } else { - // 列出目录 - objects, err := object.Readdir(0) - if err != nil { - util.Log().Error("无法步入子目录[%s], %s, 跳过...", relPath, err) - return - } - - // 递归遍历子目录 - for _, newObject := range objects { - newPath := path.Join(relPath, newObject.Name()) - newRoot, err := staticFS.Open(newPath) - if err != nil { - util.Log().Error("无法打开对象[%s], %s, 跳过...", newPath, err) - continue - } - walk(newPath, newRoot) - } - } + return nil } - util.Log().Info("开始导出内置静态资源...") - walk("/", root) + // util.Log().Info("开始导出内置静态资源...") + err = fs.WalkDir(embedFS, ".", walk) + if err != nil { + util.Log().Error("导出内置静态资源遇到错误:%s", err) + return + } util.Log().Info("内置静态资源导出完成") } diff --git a/build.sh b/build.sh index dd18f3a..c1ec24e 100755 --- a/build.sh +++ b/build.sh @@ -1,13 +1,16 @@ #!/bin/bash -REPO=$(cd $(dirname $0); pwd) +REPO=$( + cd $(dirname $0) + pwd +) COMMIT_SHA=$(git rev-parse --short HEAD) VERSION=$(git describe --tags) ASSETS="false" BINARY="false" RELEASE="false" -debugInfo () { +debugInfo() { echo "Repo: $REPO" echo "Build assets: $ASSETS" echo "Build binary: $BINARY" @@ -16,10 +19,9 @@ debugInfo () { echo "Commit: $COMMIT_SHA" } -buildAssets () { +buildAssets() { cd $REPO rm -rf assets/build - rm -f statik/statik.go export CI=false @@ -27,94 +29,88 @@ buildAssets () { yarn install yarn run build - - if ! [ -x "$(command -v statik)" ]; then - export CGO_ENABLED=0 - go get github.com/rakyll/statik - fi - - cd $REPO - statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico,*.ttf -f + cd build + rm -rf *.map } -buildBinary () { +buildBinary() { cd $REPO go build -a -o cloudreve -ldflags " -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA'" } _build() { - local osarch=$1 - IFS=/ read -r -a arr <<<"$osarch" - os="${arr[0]}" - arch="${arr[1]}" - gcc="${arr[2]}" + local osarch=$1 + IFS=/ read -r -a arr <<<"$osarch" + os="${arr[0]}" + arch="${arr[1]}" + gcc="${arr[2]}" - # Go build to build the binary. - export GOOS=$os - export GOARCH=$arch - export CC=$gcc - export CGO_ENABLED=1 + # Go build to build the binary. + export GOOS=$os + export GOARCH=$arch + export CC=$gcc + export CGO_ENABLED=1 - if [ -n "$VERSION" ]; then - out="release/cloudreve_${VERSION}_${os}_${arch}" - else - out="release/cloudreve_${COMMIT_SHA}_${os}_${arch}" - fi + if [ -n "$VERSION" ]; then + out="release/cloudreve_${VERSION}_${os}_${arch}" + else + out="release/cloudreve_${COMMIT_SHA}_${os}_${arch}" + fi - go build -a -o "${out}" -ldflags " -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA'" + go build -a -o "${out}" -ldflags " -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA'" - if [ "$os" = "windows" ]; then - mv $out release/cloudreve.exe - zip -j -q "${out}.zip" release/cloudreve.exe - rm -f "release/cloudreve.exe" - else - mv $out release/cloudreve - tar -zcvf "${out}.tar.gz" -C release cloudreve - rm -f "release/cloudreve" - fi + if [ "$os" = "windows" ]; then + mv $out release/cloudreve.exe + zip -j -q "${out}.zip" release/cloudreve.exe + rm -f "release/cloudreve.exe" + else + mv $out release/cloudreve + tar -zcvf "${out}.tar.gz" -C release cloudreve + rm -f "release/cloudreve" + fi } -release(){ +release() { cd $REPO ## List of architectures and OS to test coss compilation. SUPPORTED_OSARCH="linux/amd64/gcc linux/arm/arm-linux-gnueabihf-gcc windows/amd64/x86_64-w64-mingw32-gcc linux/arm64/aarch64-linux-gnu-gcc" echo "Release builds for OS/Arch/CC: ${SUPPORTED_OSARCH}" for each_osarch in ${SUPPORTED_OSARCH}; do - _build "${each_osarch}" + _build "${each_osarch}" done } usage() { - echo "Usage: $0 [-a] [-c] [-b] [-r]" 1>&2; - exit 1; + echo "Usage: $0 [-a] [-c] [-b] [-r]" 1>&2 + exit 1 } while getopts "bacr:d" o; do case "${o}" in - b) - ASSETS="true" - BINARY="true" - ;; - a) - ASSETS="true" - ;; - c) - BINARY="true" - ;; - r) - ASSETS="true" - RELEASE="true" - ;; - d) - DEBUG="true" - ;; - *) - usage - ;; + b) + ASSETS="true" + BINARY="true" + ;; + a) + ASSETS="true" + ;; + c) + BINARY="true" + ;; + r) + ASSETS="true" + RELEASE="true" + ;; + d) + DEBUG="true" + ;; + *) + usage + ;; esac done -shift $((OPTIND-1)) +shift $((OPTIND - 1)) if [ "$DEBUG" = "true" ]; then debugInfo diff --git a/go.mod b/go.mod index 51890bf..4c47547 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/cloudreve/Cloudreve/v3 -go 1.13 +go 1.17 require ( github.com/DATA-DOG/go-sqlmock v1.3.3 @@ -43,4 +43,4 @@ require ( gopkg.in/go-playground/validator.v9 v9.29.1 gopkg.in/ini.v1 v1.51.0 // indirect gopkg.in/mail.v2 v2.3.1 // indirect -) +) \ No newline at end of file diff --git a/go.sum b/go.sum index bdbc920..4be69f4 100644 --- a/go.sum +++ b/go.sum @@ -362,4 +362,4 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= \ No newline at end of file diff --git a/main.go b/main.go index d71e587..7173183 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "embed" "flag" "github.com/cloudreve/Cloudreve/v3/bootstrap" @@ -15,6 +16,9 @@ var ( scriptName string ) +//go:embed assets/build +var StaticEmbed embed.FS + func init() { flag.StringVar(&confPath, "c", util.RelativePath("conf.ini"), "配置文件路径") flag.BoolVar(&isEject, "eject", false, "导出内置静态资源") diff --git a/pkg/util/path.go b/pkg/util/path.go index ff51d57..2dd8aef 100644 --- a/pkg/util/path.go +++ b/pkg/util/path.go @@ -56,3 +56,4 @@ func RelativePath(name string) string { e, _ := os.Executable() return filepath.Join(filepath.Dir(e), name) } + From 1f3c1d7ce236eb55967de54d618daf6fedf4a379 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 Apr 2022 21:02:14 +0800 Subject: [PATCH 2/4] Chore(deps): Bump github.com/gin-gonic/gin from 1.5.0 to 1.7.0 (#1198) Bumps [github.com/gin-gonic/gin](https://github.com/gin-gonic/gin) from 1.5.0 to 1.7.0. - [Release notes](https://github.com/gin-gonic/gin/releases) - [Changelog](https://github.com/gin-gonic/gin/blob/master/CHANGELOG.md) - [Commits](https://github.com/gin-gonic/gin/compare/v1.5.0...v1.7.0) --- updated-dependencies: - dependency-name: github.com/gin-gonic/gin dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++------- go.sum | 25 +++++++++++++++++-------- 2 files changed, 68 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 4c47547..b7ef968 100644 --- a/go.mod +++ b/go.mod @@ -6,14 +6,13 @@ require ( github.com/DATA-DOG/go-sqlmock v1.3.3 github.com/HFO4/aliyun-oss-go-sdk v2.2.3+incompatible github.com/aws/aws-sdk-go v1.31.5 - github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect github.com/duo-labs/webauthn v0.0.0-20191119193225-4bf9a0f776d4 github.com/fatih/color v1.7.0 github.com/gin-contrib/cors v1.3.0 github.com/gin-contrib/gzip v0.0.2-0.20200226035851-25bef2ef21e8 github.com/gin-contrib/sessions v0.0.1 github.com/gin-contrib/static v0.0.0-20191128031702-f81c604d8ac2 - github.com/gin-gonic/gin v1.5.0 + github.com/gin-gonic/gin v1.7.0 github.com/go-ini/ini v1.50.0 github.com/go-mail/mail v2.3.1+incompatible github.com/gofrs/uuid v4.0.0+incompatible @@ -23,15 +22,12 @@ require ( github.com/hashicorp/go-version v1.3.0 github.com/jinzhu/gorm v1.9.11 github.com/juju/ratelimit v1.0.1 - github.com/mattn/go-colorable v0.1.4 // indirect github.com/mojocn/base64Captcha v0.0.0-20190801020520-752b1cd608b2 github.com/pkg/errors v0.9.1 github.com/pquerna/otp v1.2.0 github.com/qiniu/go-sdk/v7 v7.11.1 github.com/rafaeljusto/redigomock v0.0.0-20191117212112-00b2509252a1 - github.com/rakyll/statik v0.1.7 github.com/robfig/cron/v3 v3.0.1 - github.com/smartystreets/goconvey v1.6.4 // indirect github.com/speps/go-hashids v2.0.0+incompatible github.com/stretchr/testify v1.6.1 github.com/tencentcloud/tencentcloud-sdk-go v3.0.125+incompatible @@ -39,8 +35,56 @@ require ( github.com/upyun/go-sdk v2.1.0+incompatible golang.org/x/image v0.0.0-20211028202545-6944b10bf410 golang.org/x/text v0.3.7 - gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/go-playground/validator.v9 v9.29.1 +) + +require ( + cloud.google.com/go v0.37.4 // indirect + github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 // indirect + github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect + github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect + github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect + github.com/cloudflare/cfssl v0.0.0-20190726000631-633726f6bcb7 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/denisenkom/go-mssqldb v0.0.0-20190515213511-eb9f6a1743f3 // indirect + github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-playground/locales v0.14.0 // indirect + github.com/go-playground/universal-translator v0.18.0 // indirect + github.com/go-playground/validator/v10 v10.8.0 // indirect + github.com/go-sql-driver/mysql v1.5.0 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/golang/protobuf v1.3.3 // indirect + github.com/google/certificate-transparency-go v1.0.21 // indirect + github.com/gorilla/context v1.1.1 // indirect + github.com/gorilla/securecookie v1.1.1 // indirect + github.com/gorilla/sessions v1.1.3 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jmespath/go-jmespath v0.3.0 // indirect + github.com/json-iterator/go v1.1.9 // indirect + github.com/katzenpost/core v0.0.7 // indirect + github.com/leodido/go-urn v1.2.1 // indirect + github.com/lib/pq v1.1.1 // indirect + github.com/mattn/go-colorable v0.1.4 // indirect + github.com/mattn/go-isatty v0.0.12 // indirect + github.com/mattn/go-sqlite3 v1.11.0 // indirect + github.com/mitchellh/mapstructure v1.1.2 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/mozillazg/go-httpheader v0.2.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438 // indirect + github.com/satori/go.uuid v1.2.0 // indirect + github.com/smartystreets/goconvey v1.6.4 // indirect + github.com/stretchr/objx v0.2.0 // indirect + github.com/ugorji/go/codec v1.1.7 // indirect + golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a // indirect + golang.org/x/sys v0.0.0-20211020174200-9d6173849985 // indirect + golang.org/x/time v0.0.0-20181108054448-85acf8d2951c // indirect + gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/ini.v1 v1.51.0 // indirect gopkg.in/mail.v2 v2.3.1 // indirect -) \ No newline at end of file + gopkg.in/yaml.v2 v2.2.8 // indirect + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect +) diff --git a/go.sum b/go.sum index 4be69f4..025c467 100644 --- a/go.sum +++ b/go.sum @@ -61,8 +61,9 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-contrib/static v0.0.0-20191128031702-f81c604d8ac2 h1:xLG16iua01X7Gzms9045s2Y2niNpvSY/Zb1oBwgNYZY= github.com/gin-contrib/static v0.0.0-20191128031702-f81c604d8ac2/go.mod h1:VhW/Ch/3FhimwZb8Oj+qJmdMmoB8r7lmJ5auRjm50oQ= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/gin-gonic/gin v1.5.0 h1:fi+bqFAx/oLK54somfCtEZs9HeH1LHVoEPUgARpTqyc= github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= +github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= +github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-ini/ini v1.50.0 h1:ogX6RS8VstVN8MJcwhEP78hHhWaI3klN02+97bByabY= github.com/go-ini/ini v1.50.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= @@ -70,6 +71,7 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-mail/mail v2.3.1+incompatible h1:UzNOn0k5lpfVtO31cK3hn6I4VEVGhe3lX8AJBAxXExM= github.com/go-mail/mail v2.3.1+incompatible/go.mod h1:VPWjmmNyRsWXQZHVHT3g0YbIINUkSmuKOiLIDkWbL6M= +github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= @@ -79,6 +81,8 @@ github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEK github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-playground/validator/v10 v10.8.0 h1:1kAa0fCrnpv+QYdkdcRzrRM7AyYs5o8+jZdJCz9xj6k= github.com/go-playground/validator/v10 v10.8.0/go.mod h1:9JhgTzTaE31GZDpH/HSvHiRJrJ3iKAgqqH0Bl/Ocjdk= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= @@ -95,8 +99,9 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= @@ -138,8 +143,9 @@ github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/ github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -162,6 +168,7 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= @@ -170,8 +177,9 @@ github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaa github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -217,8 +225,6 @@ github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438 h1:jnz/4VenymvySj github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg= github.com/rafaeljusto/redigomock v0.0.0-20191117212112-00b2509252a1 h1:leEwA4MD1ew0lNgzz6Q4G76G3AEfeci+TMggN6WuFRs= github.com/rafaeljusto/redigomock v0.0.0-20191117212112-00b2509252a1/go.mod h1:JaY6n2sDr+z2WTsXkOmNRUfDy6FN0L6Nk7x06ndm4tY= -github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= -github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= @@ -260,6 +266,7 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -305,6 +312,7 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -355,11 +363,12 @@ gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk= gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= \ No newline at end of file +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From 23dc7e370e9e148038a2808967c6cf5511157b63 Mon Sep 17 00:00:00 2001 From: AaronLiu Date: Sat, 9 Apr 2022 21:07:52 +0800 Subject: [PATCH 3/4] Create stale.yml --- .github/stale.yml | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..e998aaa --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,61 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +# Number of days of inactivity before an Issue or Pull Request becomes stale +daysUntilStale: 360 + +# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. +# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. +daysUntilClose: 30 + +# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) +onlyLabels: [] + +# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable +exemptLabels: + - pinned + - security + - "[Status] Maybe Later" + +# Set to true to ignore issues in a project (defaults to false) +exemptProjects: true + +# Set to true to ignore issues in a milestone (defaults to false) +exemptMilestones: true + +# Set to true to ignore issues with an assignee (defaults to false) +exemptAssignees: true + +# Label to use when marking as stale +staleLabel: wontfix + +# Comment to post when marking as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. + +# Comment to post when removing the stale label. +# unmarkComment: > +# Your comment here. + +# Comment to post when closing a stale Issue or Pull Request. +# closeComment: > +# Your comment here. + +# Limit the number of actions per hour, from 1-30. Default is 30 +limitPerRun: 30 + +# Limit to only `issues` or `pulls` +# only: issues + +# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': +# pulls: +# daysUntilStale: 30 +# markComment: > +# This pull request has been automatically marked as stale because it has not had +# recent activity. It will be closed if no further activity occurs. Thank you +# for your contributions. + +# issues: +# exemptLabels: +# - confirmed From b50756dbcb6c9ba3176dabda99a769e1ac756e5a Mon Sep 17 00:00:00 2001 From: vvisionnn <0xEFEFEF@gmail.com> Date: Mon, 11 Apr 2022 22:13:33 +0800 Subject: [PATCH 4/4] feat: docker/docker-compose support (#1203) * Feat: add official Dockerfile * Feat: add dev docker build actions * update github actions for docker * update docker actions * update docker actions * update docker actions * update docker actions * update docker actions * update docker actions * fix: add npm default registry * fix: remove yarn.lock * fix: update frontend checksum * remove set registry * update Dockerfile * feat: basic docker-compose solution * remove old Dockerfile * fix typo * fix: frontend version * fix: remove unused comments --- .github/workflows/docker-release.yml | 50 ++++++++++++++++ Dockerfile | 87 ++++++++++------------------ docker-compose.yml | 33 +++++++++++ 3 files changed, 113 insertions(+), 57 deletions(-) create mode 100644 .github/workflows/docker-release.yml create mode 100644 docker-compose.yml diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml new file mode 100644 index 0000000..6c49210 --- /dev/null +++ b/.github/workflows/docker-release.yml @@ -0,0 +1,50 @@ +name: Build and push docker image + +on: + push: + tags: + - 3.* # triggered on every push with tag 3.* + workflow_dispatch: # or just on button clicked + +jobs: + docker-build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - run: git fetch --prune --unshallow + - name: Setup Environments + id: envs + run: | + CLOUDREVE_LATEST_TAG=$(git describe --tags --abbrev=0) + DOCKER_IMAGE="cloudreve/cloudreve" + + echo "RELEASE_VERSION=${GITHUB_REF#refs}" + TAGS="${DOCKER_IMAGE}:latest,${DOCKER_IMAGE}:${CLOUDREVE_LATEST_TAG}" + + echo "CLOUDREVE_LATEST_TAG:${CLOUDREVE_LATEST_TAG}" + echo ::set-output name=tags::${TAGS} + - name: Setup QEMU Emulator + uses: docker/setup-qemu-action@master + with: + platforms: all + - name: Setup Docker Buildx Command + id: buildx + uses: docker/setup-buildx-action@master + - name: Login to Dockerhub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + - name: Build Docker Image and Push + id: docker_build + uses: docker/build-push-action@v2 + with: + push: true + builder: ${{ steps.buildx.outputs.name }} + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm64,linux/arm/v7 + tags: ${{ steps.envs.outputs.tags }} + - name: Image Digest + run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/Dockerfile b/Dockerfile index e99d32a..0f8edf4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,70 +1,43 @@ +FROM golang:1.17.7-alpine as cloudreve_builder + + +# install dependencies and build tools +RUN apk update && apk add --no-cache wget curl git yarn build-base gcc abuild binutils binutils-doc gcc-doc + +WORKDIR /cloudreve_builder +RUN git clone --recurse-submodules https://github.com/cloudreve/Cloudreve.git + # build frontend -FROM node:lts-buster AS fe-builder - -COPY ./assets /assets - -WORKDIR /assets - -# If encountered problems like JavaScript heap out of memory, please uncomment the following options -ENV NODE_OPTIONS --max_old_space_size=4096 - -# yarn repo connection is unstable, adjust the network timeout to 10 min. -RUN set -ex \ - && yarn install --network-timeout 600000 \ - && yarn run build +WORKDIR /cloudreve_builder/Cloudreve/assets +RUN yarn install --network-timeout 1000000 +RUN yarn run build # build backend -FROM golang:1.17.7-alpine3.12 AS be-builder - -ENV GO111MODULE on - -COPY . /go/src/github.com/cloudreve/Cloudreve/v3 -COPY --from=fe-builder /assets/build/ /go/src/github.com/cloudreve/Cloudreve/v3/assets/build/ - -WORKDIR /go/src/github.com/cloudreve/Cloudreve/v3 - -RUN set -ex \ - && apk upgrade \ - && apk add gcc libc-dev git \ +WORKDIR /cloudreve_builder/Cloudreve +RUN go get github.com/rakyll/statik \ + && statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico -f \ + && tag_name=$(git describe --tags) \ && export COMMIT_SHA=$(git rev-parse --short HEAD) \ - && export VERSION=$(git describe --tags) \ - && go install -ldflags "-X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=${VERSION}' \ - -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=${COMMIT_SHA}'\ - -w -s" + && go build -a -o cloudreve -ldflags " -X 'github.com/HFO4/cloudreve/pkg/conf.BackendVersion=$tag_name' -X 'github.com/HFO4/cloudreve/pkg/conf.LastCommit=$COMMIT_SHA'" + # build final image -FROM alpine:3.12 AS dist +FROM alpine:latest -LABEL maintainer="mritd " +WORKDIR /cloudreve -# we use the Asia/Shanghai timezone by default, you can be modified -# by `docker build --build-arg=TZ=Other_Timezone ...` -ARG TZ="Asia/Shanghai" +RUN apk update && apk add --no-cache tzdata -ENV TZ ${TZ} +# we using the `Asia/Shanghai` timezone by default, you can do modification at your will +RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ + && echo "Asia/Shanghai" > /etc/timezone -COPY --from=be-builder /go/bin/Cloudreve /cloudreve/cloudreve -COPY docker-bootstrap.sh /cloudreve/bootstrap.sh +COPY --from=cloudreve_builder /cloudreve_builder/Cloudreve/cloudreve ./ -RUN apk upgrade \ - && apk add bash tzdata aria2 \ - && ln -s /cloudreve/cloudreve /usr/bin/cloudreve \ - && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \ - && echo ${TZ} > /etc/timezone \ - && rm -rf /var/cache/apk/* \ - && mkdir /etc/cloudreve \ - && ln -s /etc/cloudreve/cloureve.db /cloudreve/cloudreve.db \ - && ln -s /etc/cloudreve/conf.ini /cloudreve/conf.ini +# prepare permissions and aria2 dir +RUN chmod +x ./cloudreve && mkdir -p /data/aria2 && chmod -R 766 /data/aria2 -# cloudreve use tcp 5212 port by default -EXPOSE 5212/tcp +EXPOSE 5212 +VOLUME ["/cloudreve/uploads", "/cloudreve/avatar", "/data"] -# cloudreve stores all files(including executable file) in the `/cloudreve` -# directory by default; users should mount the configfile to the `/etc/cloudreve` -# directory by themselves for persistence considerations, and the data storage -# directory recommends using `/data` directory. -VOLUME /etc/cloudreve - -VOLUME /data - -ENTRYPOINT ["sh", "/cloudreve/bootstrap.sh"] +ENTRYPOINT ["./cloudreve"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ec3a457 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,33 @@ +version: "3.8" +services: + cloudreve: + container_name: cloudreve + image: cloudreve/cloudreve:latest + restart: unless-stopped + ports: + - "5212:5212" + volumes: + - temp_data:/data + - ./cloudreve/uploads:/cloudreve/uploads + - ./cloudreve/conf.ini:/cloudreve/conf.ini + - ./cloudreve/cloudreve.db:/cloudreve/cloudreve.db + - ./cloudreve/avatar:/cloudreve/avatar + depends_on: + - aria2 + aria2: + container_name: aria2 + image: p3terx/aria2-pro # third party image, please keep notice what you are doing + restart: unless-stopped + environment: + - RPC_SECRET=your_aria_rpc_token # aria rpc token, customize your own + - RPC_PORT=6800 + volumes: + - ./aria2/config:/config + - temp_data:/data +volumes: + temp_data: + driver: local + driver_opts: + type: none + device: $PWD/data + o: bind \ No newline at end of file