From df835c9f44b48b25a781c0a508fce3618a223341 Mon Sep 17 00:00:00 2001 From: jackgopack4 Date: Fri, 20 Sep 2024 13:53:17 -0400 Subject: [PATCH] create docker and update release workflows --- .github/workflows/builder-release.yaml | 34 +++++++- .github/workflows/builder-testbuild.yaml | 14 ++- .github/workflows/update-version.yaml | 65 ++++++++++++++ .gitignore | 2 + Makefile | 21 +++++ cmd/builder/.goreleaser.yml | 106 +++++++++++++++++++++++ cmd/builder/Dockerfile | 12 +++ cmd/builder/builder-config.yaml | 13 +++ 8 files changed, 265 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/update-version.yaml create mode 100644 cmd/builder/Dockerfile create mode 100644 cmd/builder/builder-config.yaml diff --git a/.github/workflows/builder-release.yaml b/.github/workflows/builder-release.yaml index ba8ea1de..0bfd7776 100644 --- a/.github/workflows/builder-release.yaml +++ b/.github/workflows/builder-release.yaml @@ -7,6 +7,12 @@ on: jobs: goreleaser: runs-on: ubuntu-latest + + permissions: + id-token: write + packages: write + contents: write + steps: - name: Checkout Releases Repo uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 @@ -27,10 +33,34 @@ jobs: repository: "open-telemetry/opentelemetry-collector" ref: ${{ github.ref_name }} path: ".core" + - name: Copy Dockerfile and builder-config.yaml + run: | + cp cmd/builder/Dockerfile .core/cmd/builder/Dockerfile + cp cmd/builder/builder-config.yaml .core/cmd/builder/builder-config.yaml + - uses: sigstore/cosign-installer@4959ce089c160fddf62f7b42464195ba1a56d382 # v3.6.0 + - uses: anchore/sbom-action/download-syft@61119d458adab75f756bc0b9e4bde25725f86a7a # v0.17.2 + - uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3.2.0 + with: + platforms: amd64, arm64,ppc64le + - uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1 - name: Setup Go uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2 with: go-version: ~1.23 + - 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 }} + - shell: bash + run: | + echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_ENV - name: Run GoReleaser uses: goreleaser/goreleaser-action@286f3b13b1b49da4ac219696163fb8c1c93e1200 # v6.0.0 with: @@ -39,4 +69,6 @@ jobs: args: release --clean -f cmd/builder/.goreleaser.yml env: GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GH_PAT }} + COSIGN_YES: true + SKIP_SIGNS: false diff --git a/.github/workflows/builder-testbuild.yaml b/.github/workflows/builder-testbuild.yaml index 7e6538fc..95e0e6df 100644 --- a/.github/workflows/builder-testbuild.yaml +++ b/.github/workflows/builder-testbuild.yaml @@ -36,6 +36,16 @@ jobs: fetch-depth: 0 repository: "open-telemetry/opentelemetry-collector" path: ".core" + - name: Copy Dockerfile and builder-config.yaml + run: | + cp cmd/builder/Dockerfile .core/cmd/builder/Dockerfile + cp cmd/builder/builder-config.yaml .core/cmd/builder/builder-config.yaml + - uses: sigstore/cosign-installer@4959ce089c160fddf62f7b42464195ba1a56d382 # v3.6.0 + - uses: anchore/sbom-action/download-syft@61119d458adab75f756bc0b9e4bde25725f86a7a # v0.17.2 + - uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3.2.0 + with: + platforms: amd64, arm64,ppc64le + - uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1 - name: Setup Go uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2 with: @@ -57,4 +67,6 @@ jobs: args: --snapshot --clean -f cmd/builder/.goreleaser.yml env: GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GH_PAT}} + COSIGN_YES: false + SKIP_SIGNS: true diff --git a/.github/workflows/update-version.yaml b/.github/workflows/update-version.yaml new file mode 100644 index 00000000..dfc1b420 --- /dev/null +++ b/.github/workflows/update-version.yaml @@ -0,0 +1,65 @@ +name: Update Version + +on: + workflow_dispatch: + inputs: + old_version: + description: 'Previous semantic version number (e.g., v0.109.0)' + required: true + new_version: + description: 'Next semantic version number (e.g., v0.110.0)' + required: true + +jobs: + update-version: + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN}} + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Strip 'v' from new version for OTELCOL_BUILDER_VERSION + uses: bhowell2/github-substring-action@latest + id: strip_new_version + with: + value: ${{ github.event.inputs.new_version }} + index_of_str: 'v' + - name: Strip 'v' from old version for OTELCOL_BUILDER_VERSION + uses: bhowell2/github-substring-action@latest + id: strip_old_version + with: + value: ${{ github.event.inputs.old_version }} + index_of_str: 'v' + + - name: Update version in Makefile + run: | + sed -i "s/OTELCOL_BUILDER_VERSION ?= ${{ steps.strip_old_version.outputs.substring }}/OTELCOL_BUILDER_VERSION ?= ${{ steps.strip_new_version.outputs.substring }}/g" Makefile + + - name: Update version in builder-config.yaml + run: | + sed -i "s/${{ github.event.inputs.old_version }}/${{ github.event.inputs.new_version }}/g" cmd/builder/builder-config.yaml + + - name: Update version in otelcol manifest.yaml + run: | + sed -i "s/${{ github.event.inputs.old_version }}/${{ github.event.inputs.new_version }}/g" distributions/otelcol/manifest.yaml + + - name: Update version in otelcol-contrib manifest.yaml + run: | + sed -i "s/${{ github.event.inputs.old_version }}/${{ github.event.inputs.new_version }}/g" distributions/otelcol-contrib/manifest.yaml + + - name: Update version in otelcol-k8s manifest.yaml + run: | + sed -i "s/${{ github.event.inputs.old_version }}/${{ github.event.inputs.new_version }}/g" distributions/otelcol-k8s/manifest.yaml + + - name: Commit changes and draft PR + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git checkout -b update-version-${{ github.event.inputs.new_version }} + git add Makefile cmd/builder/builder-config.yaml distributions/otelcol/manifest.yaml distributions/otelcol-contrib/manifest.yaml distributions/otelcol-k8s/manifest.yaml + git commit -m "Update version from ${{ github.event.inputs.old_version }} to ${{ github.event.inputs.new_version }}" + git push -u origin update-version-${{ github.event.inputs.new_version }} + gh pr create --title "[chore] Prepare release ${{ github.event.inputs.new_version }}" \ + --body "This PR updates the version from ${{ github.event.inputs.old_version }} to ${{ github.event.inputs.new_version }}" \ + --base main --head update-version-${{ github.event.inputs.new_version }} --draft diff --git a/.gitignore b/.gitignore index 00093749..0b869562 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ dist/ .generated-yaml/ .vscode .core +cmd/builder/output +cmd/builder/.secrets \ No newline at end of file diff --git a/Makefile b/Makefile index f473ae11..19cacf2b 100644 --- a/Makefile +++ b/Makefile @@ -73,3 +73,24 @@ push-tags: @git tag -a ${TAG} -s -m "Version ${TAG}" @echo "Pushing tag ${TAG}" @git push ${REMOTE} ${TAG} + +# Used for debug only +REMOTE?=git@github.com:open-telemetry/opentelemetry-collector-releases.git +.PHONY: delete-tags +delete-tags: + @[ "${TAG}" ] || ( echo ">> env var TAG is not set"; exit 1 ) + @echo "Deleting local tag ${TAG}" + @if [ -n "$$(git tag -l ${TAG})" ]; then \ + git tag -d ${TAG}; \ + fi + @if [ -n "$$(git tag -l cmd/builder/${TAG})" ]; then \ + git tag -d cmd/builder/${TAG}; \ + fi + @echo "Deleting remote tag ${TAG}" + @git push ${REMOTE} :refs/tags/${TAG} + @git push ${REMOTE} :refs/tags/cmd/builder/${TAG} + +# Used for debug only +REMOTE?=git@github.com:open-telemetry/opentelemetry-collector-releases.git +.PHONY: repeat-tags +repeat-tags: delete-tags push-tags \ No newline at end of file diff --git a/cmd/builder/.goreleaser.yml b/cmd/builder/.goreleaser.yml index 346da3b9..7930f553 100644 --- a/cmd/builder/.goreleaser.yml +++ b/cmd/builder/.goreleaser.yml @@ -4,6 +4,7 @@ before: monorepo: tag_prefix: cmd/builder/ dir: .core/cmd/builder +version: 2 builds: - flags: - -trimpath @@ -23,6 +24,86 @@ builds: - goos: windows goarch: arm64 binary: ocb +dockers: + - goos: linux + goarch: amd64 + dockerfile: Dockerfile + image_templates: + - johnpeterson785/opentelemetry-collector-builder:{{ .Version }}-amd64 + - johnpeterson785/opentelemetry-collector-builder:latest-amd64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:{{ .Version }}-amd64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:latest-amd64 + extra_files: + - builder-config.yaml + 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: + - johnpeterson785/opentelemetry-collector-builder:{{ .Version }}-arm64 + - johnpeterson785/opentelemetry-collector-builder:latest-arm64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:{{ .Version }}-arm64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:latest-arm64 + extra_files: + - builder-config.yaml + 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: + - johnpeterson785/opentelemetry-collector-builder:{{ .Version }}-ppc64le + - johnpeterson785/opentelemetry-collector-builder:latest-ppc64le + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:{{ .Version }}-ppc64le + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:latest-ppc64le + extra_files: + - builder-config.yaml + 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: johnpeterson785/opentelemetry-collector-builder:{{ .Version }} + image_templates: + - johnpeterson785/opentelemetry-collector-builder:{{ .Version }}-amd64 + - johnpeterson785/opentelemetry-collector-builder:{{ .Version }}-arm64 + - johnpeterson785/opentelemetry-collector-builder:{{ .Version }}-ppc64le + - name_template: johnpeterson785/opentelemetry-collector-builder:latest + image_templates: + - johnpeterson785/opentelemetry-collector-builder:latest-amd64 + - johnpeterson785/opentelemetry-collector-builder:latest-arm64 + - johnpeterson785/opentelemetry-collector-builder:latest-ppc64le + - name_template: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:{{ .Version }} + image_templates: + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:{{ .Version }}-amd64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:{{ .Version }}-arm64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:{{ .Version }}-ppc64le + - name_template: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:latest + image_templates: + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:latest-amd64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:latest-arm64 + - ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-builder:latest-ppc64le release: github: owner: open-telemetry @@ -37,3 +118,28 @@ 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 + \ No newline at end of file diff --git a/cmd/builder/Dockerfile b/cmd/builder/Dockerfile new file mode 100644 index 00000000..4ac84cfa --- /dev/null +++ b/cmd/builder/Dockerfile @@ -0,0 +1,12 @@ +FROM golang:alpine + +WORKDIR /build + +# Copy default builder config and ocb binary into the container +COPY builder-config.yaml /build/builder-config.yaml +COPY --chmod=755 ocb /build/ocb + +ENTRYPOINT [ "./ocb"] +# default arguments to use provided builder config file from documentation; +# replace if using a different file location or file name +CMD [ "--config", "builder-config.yaml" ] \ No newline at end of file diff --git a/cmd/builder/builder-config.yaml b/cmd/builder/builder-config.yaml new file mode 100644 index 00000000..6288f5e7 --- /dev/null +++ b/cmd/builder/builder-config.yaml @@ -0,0 +1,13 @@ +dist: + name: otelcol-dev + description: Basic OTel Collector distribution for Developers + output_path: ./otelcol-dev + otelcol_version: 0.109.0 +exporters: + - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.109.0 + # NOTE: Prior to v0.86.0 use the `loggingexporter` instead of `debugexporter`. + - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.109.0 +processors: + - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.109.0 +receivers: + - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.109.0