mirror of
https://github.com/pocket-id/pocket-id.git
synced 2026-07-15 21:48:13 +03:00
chore: use goreleaser for binaries and static image builds (#1478)
Co-authored-by: Elias Schneider <login@eliasschneider.com>
This commit is contained in:
121
.github/workflows/build-next.yml
vendored
121
.github/workflows/build-next.yml
vendored
@@ -4,6 +4,7 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: build-next-image
|
group: build-next-image
|
||||||
@@ -20,117 +21,71 @@ jobs:
|
|||||||
build-next:
|
build-next:
|
||||||
runs-on: depot-ubuntu-latest
|
runs-on: depot-ubuntu-latest
|
||||||
|
|
||||||
env:
|
|
||||||
CONTAINER_IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/pocket-id
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v5
|
uses: pnpm/action-setup@v5
|
||||||
|
with:
|
||||||
|
run_install: false
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 24
|
node-version: 24
|
||||||
cache: "pnpm"
|
cache: pnpm
|
||||||
|
|
||||||
- name: Setup Go
|
- name: Setup Go
|
||||||
uses: actions/setup-go@v6
|
uses: actions/setup-go@v6
|
||||||
with:
|
with:
|
||||||
go-version-file: "backend/go.mod"
|
go-version-file: backend/go.mod
|
||||||
|
cache-dependency-path: backend/go.sum
|
||||||
|
|
||||||
- name: Set up Depot CLI
|
- name: Set up Depot CLI
|
||||||
uses: depot/setup-action@v1
|
uses: depot/setup-action@v1
|
||||||
|
|
||||||
|
- name: Setup depot buildx driver
|
||||||
|
run: depot configure-docker
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v4
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Container Image Metadata
|
- name: Set Short Git Commit SHA
|
||||||
id: meta
|
id: vars
|
||||||
uses: docker/metadata-action@v5
|
run: echo "sha_short=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Run GoReleaser
|
||||||
|
uses: goreleaser/goreleaser-action@v7
|
||||||
with:
|
with:
|
||||||
images: ${{ env.CONTAINER_IMAGE_NAME }}
|
distribution: goreleaser-pro
|
||||||
tags: |
|
version: "~> v2"
|
||||||
type=raw,value=next
|
args: release --clean --skip=announce,validate --parallelism=4
|
||||||
labels: |
|
env:
|
||||||
org.opencontainers.image.authors=Pocket ID
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
org.opencontainers.image.url=https://github.com/pocket-id/pocket-id
|
BUILD_NEXT: "true"
|
||||||
org.opencontainers.image.documentation=https://github.com/pocket-id/pocket-id/blob/main/README.md
|
SKIP_RELEASE: "true"
|
||||||
org.opencontainers.image.source=https://github.com/pocket-id/pocket-id
|
SKIP_CHANGELOG: "true"
|
||||||
org.opencontainers.image.version=next
|
GORELEASER_CURRENT_TAG: next-static-${{ steps.vars.outputs.sha_short }}
|
||||||
org.opencontainers.image.licenses=BSD-2-Clause
|
GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}
|
||||||
org.opencontainers.image.ref.name=pocket-id
|
MACOS_SIGN_P12: ${{ secrets.MACOS_SIGN_P12 }}
|
||||||
org.opencontainers.image.title=Pocket ID
|
MACOS_SIGN_PASSWORD: ${{ secrets.MACOS_SIGN_PASSWORD }}
|
||||||
|
MACOS_NOTARY_KEY: ${{ secrets.MACOS_NOTARY_KEY }}
|
||||||
|
MACOS_NOTARY_KEY_ID: ${{ secrets.MACOS_NOTARY_KEY_ID }}
|
||||||
|
MACOS_NOTARY_ISSUER_ID: ${{ secrets.MACOS_NOTARY_ISSUER_ID }}
|
||||||
|
|
||||||
- name: Container Image Metadata
|
- name: Binary attestation
|
||||||
id: distroless-meta
|
uses: actions/attest@v4
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
with:
|
||||||
images: ${{ env.CONTAINER_IMAGE_NAME }}
|
subject-checksums: ./dist/checksums.txt
|
||||||
tags: |
|
|
||||||
type=raw,value=next-distroless
|
|
||||||
labels: |
|
|
||||||
org.opencontainers.image.authors=Pocket ID
|
|
||||||
org.opencontainers.image.url=https://github.com/pocket-id/pocket-id
|
|
||||||
org.opencontainers.image.documentation=https://github.com/pocket-id/pocket-id/blob/main/README.md
|
|
||||||
org.opencontainers.image.source=https://github.com/pocket-id/pocket-id
|
|
||||||
org.opencontainers.image.version=next-distroless
|
|
||||||
org.opencontainers.image.licenses=BSD-2-Clause
|
|
||||||
org.opencontainers.image.ref.name=pocket-id
|
|
||||||
org.opencontainers.image.title=Pocket ID
|
|
||||||
|
|
||||||
- name: Install frontend dependencies
|
|
||||||
run: pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Build frontend
|
|
||||||
working-directory: frontend
|
|
||||||
run: pnpm run build
|
|
||||||
|
|
||||||
- name: Build binaries
|
|
||||||
run: sh scripts/development/build-binaries.sh --docker-only
|
|
||||||
|
|
||||||
- name: Build and push container image
|
|
||||||
id: build-push-image
|
|
||||||
uses: depot/build-push-action@v1
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: docker/Dockerfile-prebuilt
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
push: true
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
sbom: false
|
|
||||||
provenance: true
|
|
||||||
|
|
||||||
- name: Build and push container image (distroless)
|
|
||||||
uses: depot/build-push-action@v1
|
|
||||||
id: container-build-push-distroless
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: docker/Dockerfile-distroless
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
push: true
|
|
||||||
tags: ${{ steps.distroless-meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.distroless-meta.outputs.labels }}
|
|
||||||
sbom: false
|
|
||||||
provenance: true
|
|
||||||
|
|
||||||
- name: Container image attestation
|
- name: Container image attestation
|
||||||
uses: actions/attest-build-provenance@v2
|
uses: actions/attest@v4
|
||||||
with:
|
with:
|
||||||
subject-name: "${{ env.CONTAINER_IMAGE_NAME }}"
|
subject-checksums: ./dist/digests.txt
|
||||||
subject-digest: ${{ steps.build-push-image.outputs.digest }}
|
|
||||||
push-to-registry: true
|
|
||||||
|
|
||||||
- name: Container image attestation (distroless)
|
|
||||||
uses: actions/attest-build-provenance@v2
|
|
||||||
with:
|
|
||||||
subject-name: "${{ env.CONTAINER_IMAGE_NAME }}"
|
|
||||||
subject-digest: ${{ steps.container-build-push-distroless.outputs.digest }}
|
|
||||||
push-to-registry: true
|
|
||||||
|
|||||||
165
.github/workflows/release.yml
vendored
165
.github/workflows/release.yml
vendored
@@ -8,151 +8,78 @@ on:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
packages: write
|
packages: write
|
||||||
attestations: write
|
|
||||||
id-token: write
|
id-token: write
|
||||||
|
attestations: write
|
||||||
artifact-metadata: write
|
artifact-metadata: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
release:
|
||||||
runs-on: depot-ubuntu-24.04-16
|
runs-on: depot-ubuntu-24.04-16
|
||||||
|
|
||||||
env:
|
|
||||||
CONTAINER_IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/pocket-id
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v5
|
uses: pnpm/action-setup@v5
|
||||||
|
with:
|
||||||
- name: Set up Depot CLI
|
run_install: false
|
||||||
uses: depot/setup-action@v1
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 24
|
node-version: 24
|
||||||
cache: "pnpm"
|
cache: pnpm
|
||||||
|
|
||||||
- uses: actions/setup-go@v6
|
- name: Setup Go
|
||||||
|
uses: actions/setup-go@v6
|
||||||
with:
|
with:
|
||||||
go-version-file: "backend/go.mod"
|
go-version-file: backend/go.mod
|
||||||
|
cache-dependency-path: backend/go.sum
|
||||||
|
|
||||||
|
- name: Set up Depot CLI
|
||||||
|
uses: depot/setup-action@v1
|
||||||
|
|
||||||
|
- name: Setup depot buildx driver
|
||||||
|
run: depot configure-docker
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v4
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{github.repository_owner}}
|
username: ${{ github.repository_owner }}
|
||||||
password: ${{secrets.GITHUB_TOKEN}}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Docker metadata
|
- name: Run GoReleaser
|
||||||
id: meta
|
uses: goreleaser/goreleaser-action@v7
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
with:
|
||||||
images: |
|
distribution: goreleaser-pro
|
||||||
${{ env.CONTAINER_IMAGE_NAME }}
|
version: "~> v2"
|
||||||
tags: |
|
args: release --clean --skip=validate --parallelism=4
|
||||||
type=semver,pattern={{version}},prefix=v
|
|
||||||
type=semver,pattern={{major}}.{{minor}},prefix=v
|
|
||||||
type=semver,pattern={{major}},prefix=v
|
|
||||||
labels: |
|
|
||||||
org.opencontainers.image.authors=Pocket ID
|
|
||||||
org.opencontainers.image.url=https://github.com/pocket-id/pocket-id
|
|
||||||
org.opencontainers.image.documentation=https://github.com/pocket-id/pocket-id/blob/main/README.md
|
|
||||||
org.opencontainers.image.source=https://github.com/pocket-id/pocket-id
|
|
||||||
org.opencontainers.image.version=next
|
|
||||||
org.opencontainers.image.licenses=BSD-2-Clause
|
|
||||||
org.opencontainers.image.ref.name=pocket-id
|
|
||||||
org.opencontainers.image.title=Pocket ID
|
|
||||||
|
|
||||||
- name: Docker metadata (distroless)
|
|
||||||
id: meta-distroless
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: |
|
|
||||||
${{ env.CONTAINER_IMAGE_NAME }}
|
|
||||||
flavor: |
|
|
||||||
suffix=-distroless,onlatest=true
|
|
||||||
tags: |
|
|
||||||
type=semver,pattern={{version}},prefix=v
|
|
||||||
type=semver,pattern={{major}}.{{minor}},prefix=v
|
|
||||||
type=semver,pattern={{major}},prefix=v
|
|
||||||
labels: |
|
|
||||||
org.opencontainers.image.authors=Pocket ID
|
|
||||||
org.opencontainers.image.url=https://github.com/pocket-id/pocket-id
|
|
||||||
org.opencontainers.image.documentation=https://github.com/pocket-id/pocket-id/blob/main/README.md
|
|
||||||
org.opencontainers.image.source=https://github.com/pocket-id/pocket-id
|
|
||||||
org.opencontainers.image.version=next-distroless
|
|
||||||
org.opencontainers.image.licenses=BSD-2-Clause
|
|
||||||
org.opencontainers.image.ref.name=pocket-id
|
|
||||||
org.opencontainers.image.title=Pocket ID
|
|
||||||
|
|
||||||
- name: Install frontend dependencies
|
|
||||||
run: pnpm --filter pocket-id-frontend install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Build frontend
|
|
||||||
run: pnpm --filter pocket-id-frontend build
|
|
||||||
|
|
||||||
- name: Build binaries
|
|
||||||
run: sh scripts/development/build-binaries.sh
|
|
||||||
|
|
||||||
- name: Build and push container image
|
|
||||||
uses: depot/build-push-action@v1
|
|
||||||
id: container-build-push
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: docker/Dockerfile-prebuilt
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
push: true
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
sbom: false
|
|
||||||
provenance: true
|
|
||||||
|
|
||||||
- name: Build and push container image (distroless)
|
|
||||||
uses: depot/build-push-action@v1
|
|
||||||
id: container-build-push-distroless
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: docker/Dockerfile-distroless
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
push: true
|
|
||||||
tags: ${{ steps.meta-distroless.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta-distroless.outputs.labels }}
|
|
||||||
sbom: false
|
|
||||||
provenance: true
|
|
||||||
|
|
||||||
- name: Binary attestation
|
|
||||||
uses: actions/attest-build-provenance@v2
|
|
||||||
with:
|
|
||||||
subject-path: "backend/.bin/pocket-id-**"
|
|
||||||
|
|
||||||
- name: Container image attestation
|
|
||||||
uses: actions/attest-build-provenance@v2
|
|
||||||
with:
|
|
||||||
subject-name: "${{ env.CONTAINER_IMAGE_NAME }}"
|
|
||||||
subject-digest: ${{ steps.container-build-push.outputs.digest }}
|
|
||||||
push-to-registry: true
|
|
||||||
|
|
||||||
- name: Container image attestation (distroless)
|
|
||||||
uses: actions/attest-build-provenance@v2
|
|
||||||
with:
|
|
||||||
subject-name: "${{ env.CONTAINER_IMAGE_NAME }}"
|
|
||||||
subject-digest: ${{ steps.container-build-push-distroless.outputs.digest }}
|
|
||||||
push-to-registry: true
|
|
||||||
- name: Upload binaries to release
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: gh release upload ${{ github.ref_name }} backend/.bin/*
|
GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}
|
||||||
|
MACOS_SIGN_P12: ${{ secrets.MACOS_SIGN_P12 }}
|
||||||
|
MACOS_SIGN_PASSWORD: ${{ secrets.MACOS_SIGN_PASSWORD }}
|
||||||
|
MACOS_NOTARY_KEY: ${{ secrets.MACOS_NOTARY_KEY }}
|
||||||
|
MACOS_NOTARY_KEY_ID: ${{ secrets.MACOS_NOTARY_KEY_ID }}
|
||||||
|
MACOS_NOTARY_ISSUER_ID: ${{ secrets.MACOS_NOTARY_ISSUER_ID }}
|
||||||
|
DISCORD_WEBHOOK_ID: ${{ secrets.DISCORD_WEBHOOK_ID }}
|
||||||
|
DISCORD_WEBHOOK_TOKEN: ${{ secrets.DISCORD_WEBHOOK_TOKEN }}
|
||||||
|
|
||||||
publish-release:
|
- name: Binary attestation
|
||||||
runs-on: depot-ubuntu-latest
|
uses: actions/attest@v4
|
||||||
needs: [build]
|
with:
|
||||||
env:
|
subject-checksums: ./dist/checksums.txt
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
steps:
|
- name: Container image attestation
|
||||||
- name: Checkout code
|
uses: actions/attest@v4
|
||||||
uses: actions/checkout@v6
|
with:
|
||||||
- name: Mark release as published
|
subject-checksums: ./dist/digests.txt
|
||||||
|
|
||||||
|
- name: Publish release
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: gh release edit ${{ github.ref_name }} --draft=false
|
run: gh release edit ${{ github.ref_name }} --draft=false
|
||||||
|
|||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -60,3 +60,5 @@ yarn-error.log*
|
|||||||
|
|
||||||
#Debug
|
#Debug
|
||||||
backend/cmd/__debug_*
|
backend/cmd/__debug_*
|
||||||
|
# Added by goreleaser init:
|
||||||
|
dist/
|
||||||
|
|||||||
226
.goreleaser.yaml
Normal file
226
.goreleaser.yaml
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
# yaml-language-server: $schema=https://goreleaser.com/static/schema-pro.json
|
||||||
|
# vim: set ts=2 sw=2 tw=0 fo=jcroql
|
||||||
|
version: 2
|
||||||
|
pro: true
|
||||||
|
|
||||||
|
project_name: pocket-id
|
||||||
|
|
||||||
|
before:
|
||||||
|
hooks:
|
||||||
|
- pnpm install --frozen-lockfile
|
||||||
|
- pnpm -C frontend build
|
||||||
|
|
||||||
|
builds:
|
||||||
|
- id: pocket-id
|
||||||
|
main: ./cmd
|
||||||
|
dir: backend
|
||||||
|
binary: pocket-id
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
- GOMAXPROCS=2
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
- darwin
|
||||||
|
- windows
|
||||||
|
- freebsd
|
||||||
|
- openbsd
|
||||||
|
goarch:
|
||||||
|
- amd64
|
||||||
|
- arm64
|
||||||
|
- "386"
|
||||||
|
- arm
|
||||||
|
goarm:
|
||||||
|
- "7"
|
||||||
|
goamd64:
|
||||||
|
- v1
|
||||||
|
go386:
|
||||||
|
- sse2
|
||||||
|
ignore:
|
||||||
|
- goos: darwin
|
||||||
|
goarch: "386"
|
||||||
|
- goos: darwin
|
||||||
|
goarch: arm
|
||||||
|
- goos: windows
|
||||||
|
goarch: "386"
|
||||||
|
- goos: windows
|
||||||
|
goarch: arm
|
||||||
|
- goos: freebsd
|
||||||
|
goarch: "386"
|
||||||
|
- goos: freebsd
|
||||||
|
goarch: arm
|
||||||
|
- goos: openbsd
|
||||||
|
goarch: "386"
|
||||||
|
- goos: openbsd
|
||||||
|
goarch: arm
|
||||||
|
ldflags:
|
||||||
|
- -w -s
|
||||||
|
- -buildid={{ .Version }}
|
||||||
|
- -X github.com/pocket-id/pocket-id/backend/internal/common.Version={{ .Version }}
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
- -p=2
|
||||||
|
mod_timestamp: "{{ .CommitTimestamp }}"
|
||||||
|
|
||||||
|
archives:
|
||||||
|
- id: default
|
||||||
|
ids:
|
||||||
|
- pocket-id
|
||||||
|
formats:
|
||||||
|
- binary
|
||||||
|
name_template: "{{ .Binary }}_{{ .Os }}_{{ .Arch }}{{ with .Arm }}v{{ . }}{{ end }}"
|
||||||
|
|
||||||
|
checksum:
|
||||||
|
name_template: checksums.txt
|
||||||
|
|
||||||
|
docker_digest:
|
||||||
|
name_template: digests.txt
|
||||||
|
|
||||||
|
dockers_v2:
|
||||||
|
- id: pocket-id
|
||||||
|
ids:
|
||||||
|
- pocket-id
|
||||||
|
dockerfile: docker/Dockerfile-prebuilt
|
||||||
|
images:
|
||||||
|
- "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/pocket-id"
|
||||||
|
tags:
|
||||||
|
- "{{ .Tag }}"
|
||||||
|
- "v{{ .Major }}"
|
||||||
|
- "v{{ .Major }}.{{ .Minor }}"
|
||||||
|
- "latest"
|
||||||
|
platforms:
|
||||||
|
- linux/amd64
|
||||||
|
- linux/arm64
|
||||||
|
labels:
|
||||||
|
"org.opencontainers.image.authors": "Pocket ID"
|
||||||
|
"org.opencontainers.image.url": "https://github.com/pocket-id/pocket-id"
|
||||||
|
"org.opencontainers.image.documentation": "https://github.com/pocket-id/pocket-id/blob/main/README.md"
|
||||||
|
"org.opencontainers.image.source": "https://github.com/pocket-id/pocket-id"
|
||||||
|
"org.opencontainers.image.version": "{{ .Version }}"
|
||||||
|
"org.opencontainers.image.revision": "{{ .FullCommit }}"
|
||||||
|
"org.opencontainers.image.licenses": "BSD-2-Clause"
|
||||||
|
"org.opencontainers.image.ref.name": "pocket-id"
|
||||||
|
"org.opencontainers.image.title": "Pocket ID"
|
||||||
|
disable: '{{ if index .Env "BUILD_NEXT" }}true{{ end }}'
|
||||||
|
sbom: true
|
||||||
|
extra_files:
|
||||||
|
- scripts/docker
|
||||||
|
|
||||||
|
- id: pocket-id-distroless
|
||||||
|
ids:
|
||||||
|
- pocket-id
|
||||||
|
dockerfile: docker/Dockerfile-distroless
|
||||||
|
images:
|
||||||
|
- "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/pocket-id"
|
||||||
|
tags:
|
||||||
|
- "{{ .Tag }}-distroless"
|
||||||
|
- "v{{ .Major }}-distroless"
|
||||||
|
- "v{{ .Major }}.{{ .Minor }}-distroless"
|
||||||
|
- "latest-distroless"
|
||||||
|
platforms:
|
||||||
|
- linux/amd64
|
||||||
|
- linux/arm64
|
||||||
|
labels:
|
||||||
|
"org.opencontainers.image.authors": "Pocket ID"
|
||||||
|
"org.opencontainers.image.url": "https://github.com/pocket-id/pocket-id"
|
||||||
|
"org.opencontainers.image.documentation": "https://github.com/pocket-id/pocket-id/blob/main/README.md"
|
||||||
|
"org.opencontainers.image.source": "https://github.com/pocket-id/pocket-id"
|
||||||
|
"org.opencontainers.image.version": "{{ .Version }}"
|
||||||
|
"org.opencontainers.image.revision": "{{ .FullCommit }}"
|
||||||
|
"org.opencontainers.image.licenses": "BSD-2-Clause"
|
||||||
|
"org.opencontainers.image.ref.name": "pocket-id"
|
||||||
|
"org.opencontainers.image.title": "Pocket ID"
|
||||||
|
disable: '{{ if index .Env "BUILD_NEXT" }}true{{ end }}'
|
||||||
|
sbom: true
|
||||||
|
|
||||||
|
- id: pocket-id-next
|
||||||
|
ids:
|
||||||
|
- pocket-id
|
||||||
|
dockerfile: docker/Dockerfile-prebuilt
|
||||||
|
images:
|
||||||
|
- "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/pocket-id"
|
||||||
|
tags:
|
||||||
|
- "next"
|
||||||
|
- "{{ .Tag }}"
|
||||||
|
platforms:
|
||||||
|
- linux/amd64
|
||||||
|
- linux/arm64
|
||||||
|
labels:
|
||||||
|
"org.opencontainers.image.authors": "Pocket ID"
|
||||||
|
"org.opencontainers.image.url": "https://github.com/pocket-id/pocket-id"
|
||||||
|
"org.opencontainers.image.documentation": "https://github.com/pocket-id/pocket-id/blob/main/README.md"
|
||||||
|
"org.opencontainers.image.source": "https://github.com/pocket-id/pocket-id"
|
||||||
|
"org.opencontainers.image.version": "{{ .Version }}"
|
||||||
|
"org.opencontainers.image.revision": "{{ .FullCommit }}"
|
||||||
|
"org.opencontainers.image.licenses": "BSD-2-Clause"
|
||||||
|
"org.opencontainers.image.ref.name": "pocket-id"
|
||||||
|
"org.opencontainers.image.title": "Pocket ID"
|
||||||
|
disable: '{{ if not (index .Env "BUILD_NEXT") }}true{{ end }}'
|
||||||
|
sbom: true
|
||||||
|
extra_files:
|
||||||
|
- scripts/docker
|
||||||
|
|
||||||
|
- id: pocket-id-next-distroless
|
||||||
|
ids:
|
||||||
|
- pocket-id
|
||||||
|
dockerfile: docker/Dockerfile-distroless
|
||||||
|
images:
|
||||||
|
- "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/pocket-id"
|
||||||
|
tags:
|
||||||
|
- "next-distroless"
|
||||||
|
- "{{ .Tag }}-distroless"
|
||||||
|
platforms:
|
||||||
|
- linux/amd64
|
||||||
|
- linux/arm64
|
||||||
|
labels:
|
||||||
|
"org.opencontainers.image.authors": "Pocket ID"
|
||||||
|
"org.opencontainers.image.url": "https://github.com/pocket-id/pocket-id"
|
||||||
|
"org.opencontainers.image.documentation": "https://github.com/pocket-id/pocket-id/blob/main/README.md"
|
||||||
|
"org.opencontainers.image.source": "https://github.com/pocket-id/pocket-id"
|
||||||
|
"org.opencontainers.image.version": "{{ .Version }}"
|
||||||
|
"org.opencontainers.image.revision": "{{ .FullCommit }}"
|
||||||
|
"org.opencontainers.image.licenses": "BSD-2-Clause"
|
||||||
|
"org.opencontainers.image.ref.name": "pocket-id"
|
||||||
|
"org.opencontainers.image.title": "Pocket ID"
|
||||||
|
disable: '{{ if not (index .Env "BUILD_NEXT") }}true{{ end }}'
|
||||||
|
sbom: true
|
||||||
|
|
||||||
|
notarize:
|
||||||
|
macos:
|
||||||
|
- enabled: '{{ isEnvSet "MACOS_SIGN_P12" }}'
|
||||||
|
ids:
|
||||||
|
- pocket-id
|
||||||
|
sign:
|
||||||
|
certificate: "{{ .Env.MACOS_SIGN_P12 }}"
|
||||||
|
password: "{{ .Env.MACOS_SIGN_PASSWORD }}"
|
||||||
|
notarize:
|
||||||
|
issuer_id: "{{ .Env.MACOS_NOTARY_ISSUER_ID }}"
|
||||||
|
key_id: "{{ .Env.MACOS_NOTARY_KEY_ID }}"
|
||||||
|
key: "{{ .Env.MACOS_NOTARY_KEY }}"
|
||||||
|
wait: true
|
||||||
|
timeout: 20m
|
||||||
|
|
||||||
|
changelog:
|
||||||
|
disable: true
|
||||||
|
|
||||||
|
announce:
|
||||||
|
discord:
|
||||||
|
enabled: true
|
||||||
|
message_template: "Pocket ID version {{ .Tag }} has been released! Checkout the changelog at {{ .ReleaseURL }}"
|
||||||
|
author: "GitHub Actions"
|
||||||
|
# Color code of the embed. You have to use decimal numeral system, not hexadecimal.
|
||||||
|
# color: "9320959"
|
||||||
|
icon_url: "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png"
|
||||||
|
|
||||||
|
release:
|
||||||
|
github:
|
||||||
|
owner: pocket-id
|
||||||
|
name: pocket-id
|
||||||
|
disable: '{{ if index .Env "SKIP_RELEASE" }}true{{ end }}'
|
||||||
|
draft: true
|
||||||
|
replace_existing_draft: false
|
||||||
|
use_existing_draft: true
|
||||||
|
replace_existing_artifacts: true
|
||||||
|
prerelease: auto
|
||||||
|
make_latest: true
|
||||||
|
mode: keep-existing
|
||||||
|
name_template: "{{ .Tag }}"
|
||||||
6
.vscode/settings.json
vendored
6
.vscode/settings.json
vendored
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"go.buildTags": "e2etest",
|
"go.buildTags": "e2etest",
|
||||||
"prettier.documentSelectors": ["**/*.svelte"],
|
"prettier.documentSelectors": ["**/*.svelte"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
# This Dockerfile embeds a pre-built binary for the given Linux architecture
|
# This Dockerfile embeds a pre-built binary for the given Linux architecture
|
||||||
# Binaries must be built using "./scripts/development/build-binaries.sh --docker-only"
|
# Binaries are supplied by GoReleaser.
|
||||||
|
|
||||||
FROM gcr.io/distroless/static-debian12:nonroot
|
FROM gcr.io/distroless/static-debian12:nonroot
|
||||||
|
|
||||||
# TARGETARCH can be "amd64" or "arm64"
|
# TARGETARCH can be "amd64" or "arm64"
|
||||||
ARG TARGETARCH
|
ARG TARGETARCH
|
||||||
|
ARG TARGETVARIANT
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY ./backend/.bin/pocket-id-linux-${TARGETARCH} /app/pocket-id
|
COPY linux/${TARGETARCH}/${TARGETVARIANT}/pocket-id /app/pocket-id
|
||||||
|
|
||||||
EXPOSE 1411
|
EXPOSE 1411
|
||||||
ENV APP_ENV=production
|
ENV APP_ENV=production
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
# This Dockerfile embeds a pre-built binary for the given Linux architecture
|
# This Dockerfile embeds a pre-built binary for the given Linux architecture
|
||||||
# Binaries must be built using "./scripts/development/build-binaries.sh --docker-only"
|
# Binaries are supplied by GoReleaser.
|
||||||
|
|
||||||
FROM alpine:3.24.1
|
FROM alpine:3.24.1
|
||||||
|
|
||||||
# TARGETARCH can be "amd64" or "arm64"
|
# TARGETARCH can be "amd64" or "arm64"
|
||||||
ARG TARGETARCH
|
ARG TARGETARCH
|
||||||
|
ARG TARGETVARIANT
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
RUN apk add --no-cache curl su-exec
|
RUN apk add --no-cache curl su-exec
|
||||||
|
|
||||||
COPY ./backend/.bin/pocket-id-linux-${TARGETARCH} /app/pocket-id
|
COPY linux/${TARGETARCH}/${TARGETVARIANT}/pocket-id /app/pocket-id
|
||||||
COPY ./scripts/docker /app/docker
|
COPY ./scripts/docker /app/docker
|
||||||
|
|
||||||
EXPOSE 1411
|
EXPOSE 1411
|
||||||
|
|||||||
@@ -1,80 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
cd backend
|
|
||||||
mkdir -p .bin
|
|
||||||
|
|
||||||
# Check for --docker-only flag
|
|
||||||
DOCKER_ONLY=false
|
|
||||||
for arg in "$@"; do
|
|
||||||
if [ "$arg" = "--docker-only" ]; then
|
|
||||||
DOCKER_ONLY=true
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Function to build for a specific platform
|
|
||||||
build_platform() {
|
|
||||||
target=$1
|
|
||||||
os=$2
|
|
||||||
arch=$3
|
|
||||||
arm_version=${4:-""}
|
|
||||||
# "sed" is used to remove leading or trailing whitespace characters
|
|
||||||
pocket_id_version=$(cat ../.version | sed 's/^\s*\|\s*$//g')
|
|
||||||
|
|
||||||
# Set the binary extension to exe for Windows
|
|
||||||
binary_ext=""
|
|
||||||
if [ "$os" = "windows" ]; then
|
|
||||||
binary_ext=".exe"
|
|
||||||
fi
|
|
||||||
|
|
||||||
output_dir=".bin/pocket-id-${target}${binary_ext}"
|
|
||||||
|
|
||||||
printf "Building %s/%s%s" "$os" "$arch" "$([ -n "$arm_version" ] && echo " GOARM=$arm_version" || echo "")... "
|
|
||||||
|
|
||||||
# Build environment variables
|
|
||||||
env_vars="CGO_ENABLED=0 GOOS=${os} GOARCH=${arch}"
|
|
||||||
if [ -n "$arm_version" ]; then
|
|
||||||
env_vars="${env_vars} GOARM=${arm_version}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Build the binary
|
|
||||||
eval "${env_vars} go build \
|
|
||||||
-ldflags='-X github.com/pocket-id/pocket-id/backend/internal/common.Version=${pocket_id_version} -buildid ${pocket_id_version} -s' \
|
|
||||||
-o \"${output_dir}\" \
|
|
||||||
-trimpath \
|
|
||||||
./cmd"
|
|
||||||
|
|
||||||
printf "Done\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "$DOCKER_ONLY" = true ]; then
|
|
||||||
echo "Building for Docker platforms only (arm64 and amd64)..."
|
|
||||||
build_platform "linux-amd64" "linux" "amd64" ""
|
|
||||||
build_platform "linux-arm64" "linux" "arm64" ""
|
|
||||||
else
|
|
||||||
echo "Building for all platforms..."
|
|
||||||
# linux builds
|
|
||||||
build_platform "linux-amd64" "linux" "amd64" ""
|
|
||||||
build_platform "linux-386" "linux" "386" ""
|
|
||||||
build_platform "linux-arm64" "linux" "arm64" ""
|
|
||||||
build_platform "linux-armv7" "linux" "arm" "7"
|
|
||||||
|
|
||||||
# macOS builds
|
|
||||||
build_platform "macos-x64" "darwin" "amd64" ""
|
|
||||||
build_platform "macos-arm64" "darwin" "arm64" ""
|
|
||||||
|
|
||||||
# Windows builds
|
|
||||||
build_platform "windows-x64" "windows" "amd64" ""
|
|
||||||
build_platform "windows-arm64" "windows" "arm64" ""
|
|
||||||
|
|
||||||
# FreeBSD builds
|
|
||||||
build_platform "freebsd-amd64" "freebsd" "amd64" ""
|
|
||||||
build_platform "freebsd-arm64" "freebsd" "arm64" ""
|
|
||||||
|
|
||||||
# OpenBSD builds
|
|
||||||
build_platform "openbsd-amd64" "openbsd" "amd64" ""
|
|
||||||
build_platform "openbsd-arm64" "openbsd" "arm64" ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Compilation done"
|
|
||||||
Reference in New Issue
Block a user