From 88a1ec8b9945ac5ca8e922c9b33dcaba8e9dc5b5 Mon Sep 17 00:00:00 2001 From: Alex Boten <223565+codeboten@users.noreply.github.com> Date: Fri, 7 Mar 2025 07:24:09 -0800 Subject: [PATCH] add build details for opampsupervisor (#858) * add build details for opampsupervisor This follows the pattern for releasing the builder. Fixes https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/24293 Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com> * update config Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com> * add changelog Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Evan Bradley <11745660+evan-bradley@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Moritz Wiesinger * remove sha_short Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com> * Update cmd/opampsupervisor/Dockerfile * dont bother testing on contrib changes Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com> * add contrib to gitignore Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com> * updated title Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com> --------- Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com> Co-authored-by: Evan Bradley <11745660+evan-bradley@users.noreply.github.com> Co-authored-by: Moritz Wiesinger --- ...codeboten_add-release-opampsupervisor.yaml | 26 ++++ .../workflows/opampsupervisor-release.yaml | 73 +++++++++ .../workflows/opampsupervisor-testbuild.yaml | 73 +++++++++ .gitignore | 1 + cmd/opampsupervisor/.goreleaser.yml | 144 ++++++++++++++++++ cmd/opampsupervisor/Dockerfile | 14 ++ 6 files changed, 331 insertions(+) create mode 100644 .chloggen/codeboten_add-release-opampsupervisor.yaml create mode 100644 .github/workflows/opampsupervisor-release.yaml create mode 100644 .github/workflows/opampsupervisor-testbuild.yaml create mode 100644 cmd/opampsupervisor/.goreleaser.yml create mode 100644 cmd/opampsupervisor/Dockerfile diff --git a/.chloggen/codeboten_add-release-opampsupervisor.yaml b/.chloggen/codeboten_add-release-opampsupervisor.yaml new file mode 100644 index 0000000..1db1b72 --- /dev/null +++ b/.chloggen/codeboten_add-release-opampsupervisor.yaml @@ -0,0 +1,26 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: new_component + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: opampsupervisor + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: publish binaries and container images for the OpAMP Supervisor + +# One or more tracking issues or pull requests related to the change +issues: [858] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [] + diff --git a/.github/workflows/opampsupervisor-release.yaml b/.github/workflows/opampsupervisor-release.yaml new file mode 100644 index 0000000..9949759 --- /dev/null +++ b/.github/workflows/opampsupervisor-release.yaml @@ -0,0 +1,73 @@ +name: Release OpAMP supervisor +on: + push: + tags: + - "v*" + +env: + # renovate: datasource=github-tags depName=goreleaser-pro packageName=goreleaser/goreleaser-pro + GORELEASER_PRO_VERSION: v2.7.0 + +jobs: + goreleaser: + runs-on: ubuntu-latest + + permissions: + id-token: write + packages: write + contents: write + + steps: + - name: Checkout Releases Repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 0 + - name: Push cmd/opampsupervisor Tag + run: | + tag="cmd/opampsupervisor/${{ github.ref_name }}" + message="Releasing OpAMP supervisor binaries for ${{ github.ref_name }}" + git config user.name "${GITHUB_ACTOR}" + git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" + git tag -a "${tag}" -m "${message}" + git push origin "${tag}" + - name: Checkout Contrib Repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 0 + repository: "open-telemetry/opentelemetry-collector-contrib" + ref: ${{ github.ref_name }} + path: ".contrib" + - name: Copy Dockerfile to Contrib Repo directory + run: cp cmd/opampsupervisor/Dockerfile .contrib/cmd/opampsupervisor/Dockerfile + - uses: sigstore/cosign-installer@d7d6bc7722e3daa8354c50bcb52f4837da5e9b6a # v3.8.1 + - uses: anchore/sbom-action/download-syft@f325610c9f50a54015d37c8d16cb3b0e2c8f4de0 # v0.18.0 + - uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 + with: + platforms: amd64, arm64,ppc64le + - uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0 + - name: Setup Go + uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 + with: + go-version: "~1.24" + - name: Log into Docker.io + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Login to GitHub Package Registry + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@90a3faa9d0182683851fbfa97ca1a2cb983bfca3 # v6.2.1 + with: + distribution: goreleaser-pro + version: ${{ env.GORELEASER_PRO_VERSION }} + args: release --clean -f cmd/opampsupervisor/.goreleaser.yml + env: + GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COSIGN_YES: true + SKIP_SIGNS: false diff --git a/.github/workflows/opampsupervisor-testbuild.yaml b/.github/workflows/opampsupervisor-testbuild.yaml new file mode 100644 index 0000000..c45e859 --- /dev/null +++ b/.github/workflows/opampsupervisor-testbuild.yaml @@ -0,0 +1,73 @@ +name: CI - OpAMP supervisor + +on: + merge_group: + push: + branches: [main] + paths: + - "cmd/**" + - ".github/**" + - "scripts/**" + - "Makefile" + - "go.mod" + - "go.sum" + pull_request: + branches: [main] + paths: + - "cmd/**" + - ".github/**" + - "scripts/**" + - "Makefile" + - "go.mod" + - "go.sum" + +env: + # renovate: datasource=github-tags depName=goreleaser-pro packageName=goreleaser/goreleaser-pro + GORELEASER_PRO_VERSION: v2.7.0 + +jobs: + check-goreleaser: + runs-on: ubuntu-latest + steps: + - name: Checkout Releases Repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 0 + - name: Checkout Core Repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 0 + repository: "open-telemetry/opentelemetry-collector-contrib" + path: ".contrib" + - name: Copy Dockerfile to Core Repo directory + run: cp cmd/opampsupervisor/Dockerfile .contrib/cmd/opampsupervisor/Dockerfile + - uses: sigstore/cosign-installer@d7d6bc7722e3daa8354c50bcb52f4837da5e9b6a # v3.8.1 + - uses: anchore/sbom-action/download-syft@f325610c9f50a54015d37c8d16cb3b0e2c8f4de0 # v0.18.0 + - uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 + with: + platforms: amd64, arm64,ppc64le + - uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0 + - name: Setup Go + uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 + with: + go-version: "~1.24" + - name: Check GoReleaser + uses: goreleaser/goreleaser-action@90a3faa9d0182683851fbfa97ca1a2cb983bfca3 # v6.2.1 + with: + distribution: goreleaser-pro + version: ${{ env.GORELEASER_PRO_VERSION }} + args: check --verbose -f cmd/opampsupervisor/.goreleaser.yml + env: + GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@90a3faa9d0182683851fbfa97ca1a2cb983bfca3 # v6.2.1 + with: + distribution: goreleaser-pro + version: ${{ env.GORELEASER_PRO_VERSION }} + args: --snapshot --clean -f cmd/opampsupervisor/.goreleaser.yml + env: + GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COSIGN_YES: false + SKIP_SIGNS: true diff --git a/.gitignore b/.gitignore index 671cf8e..00145c9 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ dist/ .generated-yaml/ .vscode .core +.contrib .tools diff --git a/cmd/opampsupervisor/.goreleaser.yml b/cmd/opampsupervisor/.goreleaser.yml new file mode 100644 index 0000000..adf64da --- /dev/null +++ b/cmd/opampsupervisor/.goreleaser.yml @@ -0,0 +1,144 @@ +before: + hooks: + - go mod download +monorepo: + tag_prefix: cmd/opampsupervisor/ + dir: .contrib/cmd/opampsupervisor +version: 2 +builds: + - flags: + - -trimpath + ldflags: + - -s -w -X github.com/open-telemetry/opentelemetry-collector-contrib/cmd/opampsupervisor/internal.version={{ .Version }} + env: + - CGO_ENABLED=0 + goos: + - linux + - windows + - darwin + goarch: + - amd64 + - arm64 + - ppc64le + ignore: + - goos: windows + goarch: arm64 + - goos: windows + goarch: ppc64le + - goos: darwin + goarch: ppc64le + binary: opampsupervisor +dockers: + - goos: linux + goarch: amd64 + dockerfile: Dockerfile + image_templates: + - otel/opentelemetry-collector-opampsupervisor:{{ .Version }}-amd64 + - otel/opentelemetry-collector-opampsupervisor:latest-amd64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:{{ .Version }}-amd64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:latest-amd64 + build_flag_templates: + - --pull + - --platform=linux/amd64 + - --label=org.opencontainers.image.created={{.Date}} + - --label=org.opencontainers.image.name={{.ProjectName}} + - --label=org.opencontainers.image.revision={{.FullCommit}} + - --label=org.opencontainers.image.version={{.Version}} + - --label=org.opencontainers.image.source={{.GitURL}} + - --label=org.opencontainers.image.licenses=Apache-2.0 + - goos: linux + goarch: arm64 + dockerfile: Dockerfile + image_templates: + - otel/opentelemetry-collector-opampsupervisor:{{ .Version }}-arm64 + - otel/opentelemetry-collector-opampsupervisor:latest-arm64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:{{ .Version }}-arm64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:latest-arm64 + build_flag_templates: + - --pull + - --platform=linux/arm64 + - --label=org.opencontainers.image.created={{.Date}} + - --label=org.opencontainers.image.name={{.ProjectName}} + - --label=org.opencontainers.image.revision={{.FullCommit}} + - --label=org.opencontainers.image.version={{.Version}} + - --label=org.opencontainers.image.source={{.GitURL}} + - --label=org.opencontainers.image.licenses=Apache-2.0 + - goos: linux + goarch: ppc64le + dockerfile: Dockerfile + image_templates: + - otel/opentelemetry-collector-opampsupervisor:{{ .Version }}-ppc64le + - otel/opentelemetry-collector-opampsupervisor:latest-ppc64le + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:{{ .Version }}-ppc64le + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:latest-ppc64le + build_flag_templates: + - --pull + - --platform=linux/ppc64le + - --label=org.opencontainers.image.created={{.Date}} + - --label=org.opencontainers.image.name={{.ProjectName}} + - --label=org.opencontainers.image.revision={{.FullCommit}} + - --label=org.opencontainers.image.version={{.Version}} + - --label=org.opencontainers.image.source={{.GitURL}} + - --label=org.opencontainers.image.licenses=Apache-2.0 + use: buildx +docker_manifests: + - name_template: otel/opentelemetry-collector-opampsupervisor:{{ .Version }} + image_templates: + - otel/opentelemetry-collector-opampsupervisor:{{ .Version }}-amd64 + - otel/opentelemetry-collector-opampsupervisor:{{ .Version }}-arm64 + - otel/opentelemetry-collector-opampsupervisor:{{ .Version }}-ppc64le + - name_template: otel/opentelemetry-collector-opampsupervisor:latest + image_templates: + - otel/opentelemetry-collector-opampsupervisor:latest-amd64 + - otel/opentelemetry-collector-opampsupervisor:latest-arm64 + - otel/opentelemetry-collector-opampsupervisor:latest-ppc64le + - name_template: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:{{ .Version }} + image_templates: + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:{{ .Version }}-amd64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:{{ .Version }}-arm64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:{{ .Version }}-ppc64le + - name_template: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:latest + image_templates: + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:latest-amd64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:latest-arm64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-opampsupervisor:latest-ppc64le +release: + github: + owner: open-telemetry + name: opentelemetry-collector-releases + header: | + ### Release of OpAMP supervisor artifacts +archives: + - formats: + - binary +checksum: + name_template: "checksums.txt" +snapshot: + version_template: "{{ .Tag }}-next" +changelog: + disable: true +signs: + - if: $SKIP_SIGNS != "true" + cmd: cosign + args: + - sign-blob + - --output-signature + - ${artifact}.sig + - --output-certificate + - ${artifact}.pem + - ${artifact} + signature: ${artifact}.sig + artifacts: all + certificate: ${artifact}.pem +docker_signs: + - if: $SKIP_SIGNS != "true" + args: + - sign + - ${artifact} + artifacts: all +sboms: + - id: archive + artifacts: archive + - id: package + artifacts: package + diff --git a/cmd/opampsupervisor/Dockerfile b/cmd/opampsupervisor/Dockerfile new file mode 100644 index 0000000..8c83843 --- /dev/null +++ b/cmd/opampsupervisor/Dockerfile @@ -0,0 +1,14 @@ +FROM alpine:3.20 +RUN apk --update add ca-certificates + +ARG SERVICE_NAME=opampsupervisor + +RUN addgroup --gid 10001 --system ${SERVICE_NAME} && \ + adduser --ingroup ${SERVICE_NAME} --shell /bin/false \ + --disabled-password --uid 10001 ${SERVICE_NAME} + +USER ${SERVICE_NAME} +WORKDIR /home/${SERVICE_NAME} + +COPY --chmod=755 opampsupervisor /usr/local/bin/opampsupervisor +ENTRYPOINT [ "opampsupervisor" ]