image: golang:bookworm # 在每个任务执行前运行 before_script: - mkdir -p .go - go version - go env -w GO111MODULE=on - go env -w GOPROXY=https://goproxy.cn,direct .go_cache: variables: GOPATH: $CI_PROJECT_DIR/.go cache: paths: - .go/pkg/mod/ # 全局变量 variables: OUTPUT_NAME: "panel" GO111MODULE: "on" GOPROXY: "https://goproxy.cn,direct" stages: - prepare - build - release golangci_lint: stage: prepare image: golangci/golangci-lint:latest-alpine extends: .go_cache allow_failure: true script: - golangci-lint run --timeout 30m unit_test: stage: prepare extends: .go_cache allow_failure: true script: - rm -rf /etc/apt/sources.list - rm -rf /etc/apt/sources.list.d/* - wget -O /etc/apt/sources.list https://mirrors.ustc.edu.cn/repogen/conf/debian-http-4-bookworm - apt-get update - apt-get install -y curl jq - cp panel-example.conf .env - echo "DB_FILE=$(pwd)/database/panel.db" >> .env - go run . artisan key:generate - go run . artisan migrate - go test -v -coverprofile=coverage.txt -covermode=atomic ./... build: stage: build extends: .go_cache script: - go mod download - CGO_ENABLED=0 go build -ldflags '-s -w --extldflags "-static -fpic"' -o $OUTPUT_NAME artifacts: name: "$OUTPUT_NAME" paths: - $OUTPUT_NAME expire_in: 3 days fetch: stage: build image: alpine:latest before_script: - sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories - apk add --no-cache curl jq unzip zip script: - curl -sSL "https://jihulab.com/api/v4/projects/haozi-team%2Fpanel-frontend/releases" | jq -r '.[0].assets.links[] | select(.name | contains("dist")) | .direct_asset_url' | xargs curl -L -o frontend.zip - rm -rf public - unzip frontend.zip - mv dist public artifacts: name: "frontend" paths: - public expire_in: 3 days release: stage: release dependencies: - build - fetch image: name: goreleaser/goreleaser entrypoint: [ '' ] only: - tags variables: # Disable shallow cloning so that goreleaser can diff between tags to # generate a changelog. GIT_DEPTH: 0 script: - goreleaser release --clean