diff --git a/.github/workflows/build-next.yml b/.github/workflows/build-next.yml index 343a36d9..c21aefab 100644 --- a/.github/workflows/build-next.yml +++ b/.github/workflows/build-next.yml @@ -4,6 +4,7 @@ on: push: branches: - main + workflow_dispatch: concurrency: group: build-next-image @@ -20,117 +21,71 @@ jobs: build-next: runs-on: depot-ubuntu-latest - env: - CONTAINER_IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/pocket-id - steps: - name: Checkout code uses: actions/checkout@v6 + with: + fetch-depth: 0 - name: Setup pnpm uses: pnpm/action-setup@v5 + with: + run_install: false - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: 24 - cache: "pnpm" + cache: pnpm - name: Setup Go uses: actions/setup-go@v6 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 - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Container Image Metadata - id: meta - uses: docker/metadata-action@v5 + - name: Set Short Git Commit SHA + id: vars + run: echo "sha_short=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT" + + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v7 with: - images: ${{ env.CONTAINER_IMAGE_NAME }} - tags: | - type=raw,value=next - 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 + distribution: goreleaser-pro + version: "~> v2" + args: release --clean --skip=announce,validate --parallelism=4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BUILD_NEXT: "true" + SKIP_RELEASE: "true" + SKIP_CHANGELOG: "true" + GORELEASER_CURRENT_TAG: next-static-${{ steps.vars.outputs.sha_short }} + 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 }} - - name: Container Image Metadata - id: distroless-meta - uses: docker/metadata-action@v5 + - name: Binary attestation + uses: actions/attest@v4 with: - images: ${{ env.CONTAINER_IMAGE_NAME }} - 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 + subject-checksums: ./dist/checksums.txt - name: Container image attestation - uses: actions/attest-build-provenance@v2 + uses: actions/attest@v4 with: - subject-name: "${{ env.CONTAINER_IMAGE_NAME }}" - 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 + subject-checksums: ./dist/digests.txt diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 79bdd8dc..f43a626c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,151 +8,78 @@ on: permissions: contents: write packages: write - attestations: write id-token: write + attestations: write artifact-metadata: write jobs: - build: + release: runs-on: depot-ubuntu-24.04-16 - env: - CONTAINER_IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/pocket-id - steps: - name: Checkout code uses: actions/checkout@v6 + with: + fetch-depth: 0 - name: Setup pnpm uses: pnpm/action-setup@v5 - - - name: Set up Depot CLI - uses: depot/setup-action@v1 + with: + run_install: false - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: 24 - cache: "pnpm" + cache: pnpm - - uses: actions/setup-go@v6 + - name: Setup Go + uses: actions/setup-go@v6 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 - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io - username: ${{github.repository_owner}} - password: ${{secrets.GITHUB_TOKEN}} + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} - - name: Docker metadata - id: meta - uses: docker/metadata-action@v5 + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v7 with: - images: | - ${{ env.CONTAINER_IMAGE_NAME }} - 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 - 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 + distribution: goreleaser-pro + version: "~> v2" + args: release --clean --skip=validate --parallelism=4 env: 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: - runs-on: depot-ubuntu-latest - needs: [build] - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - name: Checkout code - uses: actions/checkout@v6 - - name: Mark release as published + - name: Binary attestation + uses: actions/attest@v4 + with: + subject-checksums: ./dist/checksums.txt + + - name: Container image attestation + uses: actions/attest@v4 + with: + subject-checksums: ./dist/digests.txt + + - name: Publish release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: gh release edit ${{ github.ref_name }} --draft=false diff --git a/.gitignore b/.gitignore index 7d3bbc73..951266bd 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,5 @@ yarn-error.log* #Debug backend/cmd/__debug_* +# Added by goreleaser init: +dist/ diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 00000000..67ec369e --- /dev/null +++ b/.goreleaser.yaml @@ -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 }}" diff --git a/.vscode/settings.json b/.vscode/settings.json index 4c68079f..5e688181 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,4 @@ { - "go.buildTags": "e2etest", - "prettier.documentSelectors": ["**/*.svelte"], -} \ No newline at end of file + "go.buildTags": "e2etest", + "prettier.documentSelectors": ["**/*.svelte"] +} diff --git a/docker/Dockerfile-distroless b/docker/Dockerfile-distroless index dfce2b74..d252de3c 100644 --- a/docker/Dockerfile-distroless +++ b/docker/Dockerfile-distroless @@ -1,14 +1,15 @@ # 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 # TARGETARCH can be "amd64" or "arm64" ARG TARGETARCH +ARG TARGETVARIANT WORKDIR /app -COPY ./backend/.bin/pocket-id-linux-${TARGETARCH} /app/pocket-id +COPY linux/${TARGETARCH}/${TARGETVARIANT}/pocket-id /app/pocket-id EXPOSE 1411 ENV APP_ENV=production diff --git a/docker/Dockerfile-prebuilt b/docker/Dockerfile-prebuilt index d0c37f63..f8599b93 100644 --- a/docker/Dockerfile-prebuilt +++ b/docker/Dockerfile-prebuilt @@ -1,16 +1,17 @@ # 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 # TARGETARCH can be "amd64" or "arm64" ARG TARGETARCH +ARG TARGETVARIANT WORKDIR /app 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 EXPOSE 1411 diff --git a/scripts/development/build-binaries.sh b/scripts/development/build-binaries.sh deleted file mode 100755 index 374fadd6..00000000 --- a/scripts/development/build-binaries.sh +++ /dev/null @@ -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"