diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 5809041..cddddbe 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -1,13 +1,25 @@ name: build on: + workflow_dispatch: push: - branches: [ main ] + branches: + - 'main' + tags: + - 'v*' + pull_request: + branches: + - 'main' + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} jobs: - build_and_deploy_docker: + build-and-push-image: runs-on: ubuntu-latest + steps: - uses: actions/checkout@v4 @@ -20,37 +32,30 @@ jobs: - name: Login to image repository uses: docker/login-action@v2 with: - registry: ghcr.io + registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GHCR_TOKEN }} - - - name: Set up Flutter - uses: subosito/flutter-action@v2 + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 with: - channel: stable - flutter-version: 3 - - - name: Build Web - run: | - cd ui - flutter pub get - flutter build web + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - name: Build and push uses: docker/build-push-action@v3 with: context: . file: Dockerfile + push: true platforms: | linux/amd64 linux/arm64 - push: true - tags: ghcr.io/simon-ding/polaris:latest + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} - # - name: Set up Go - # uses: actions/setup-go@v3 - # with: - # go-version: '>=1.20.0' - - # - name: Build - # run: go build -v ./... \ No newline at end of file + - name: Generate artifact attestation + uses: actions/attest-build-provenance@v1 + with: + subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} + subject-digest: ${{ steps.push.outputs.digest }} + push-to-registry: true diff --git a/Dockerfile b/Dockerfile index dff79ca..848dc0d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,11 @@ +FROM instrumentisto/flutter:3 AS flutter +WORKDIR /app +COPY ./ui/pubspec.yaml ./ui/pubspec.lock ./ +RUN flutter pub get +COPY ./ui/ ./ +RUN flutter build web + +# 打包依赖阶段使用golang作为基础镜像 FROM golang:1.22 as builder # 启用go module @@ -6,19 +14,22 @@ ENV GO111MODULE=on \ WORKDIR /app -COPY go.mod go.sum ./ +COPY go.mod . +COPY go.sum . RUN go mod download COPY . . -RUN CGO_ENABLED=1 go build -o polaris ./cmd/ + +COPY --from=flutter /app/build/web ./ui/build/web/ +# 指定OS等,并go build +RUN GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -o polaris ./cmd/ FROM debian:12 WORKDIR /app RUN apt-get update && apt-get -y install ca-certificates +# 将上一个阶段publish文件夹下的所有文件复制进来 COPY --from=builder /app/polaris . -EXPOSE 8080 - -ENTRYPOINT ["./polaris"] \ No newline at end of file +EXPOSE 8080 \ No newline at end of file