Build for Remote Workflow: latest-main #1745
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# We use a single workflow to build all packages because github.run_number is | |
# specific to each workflow. This ensures that each package has an | |
# OTC_BUILD_NUMBER that is greater than previous runs which allows package | |
# upgrades from one build to the next. | |
name: 'Build packages' | |
# Sets the name of the CI run based on whether the run was triggered with or | |
# without a workflow_id set. | |
run-name: > | |
${{ | |
inputs.workflow_id == '' && format('Build for Remote Workflow: latest-main') | |
|| | |
inputs.workflow_id != '' && format('Build for Remote Workflow: {0}', inputs.workflow_id) | |
}} | |
on: | |
push: | |
branches: | |
- 'main' | |
pull_request: | |
workflow_dispatch: | |
inputs: | |
workflow_id: | |
description: | | |
Workflow Run ID from the SumoLogic/sumologic-otel-collector repository | |
to download artifacts from. The artifacts for the specified workflow | |
must contain an otelcol-sumo binary for each platform that packages | |
are being built for. | |
required: false | |
type: string | |
release: | |
description: Publish draft release | |
type: boolean | |
required: false | |
default: false | |
jobs: | |
determine_workflow: | |
runs-on: ubuntu-latest | |
name: Determine workflow_id | |
outputs: | |
workflow_id: ${{ steps.workflow.outputs.id }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
# Determine the latest successful run of the "Dev builds" workflow for | |
# the "main" branch. This is skipped if inputs.workflow_id is set. | |
- name: Determine latest successful workflow run | |
id: latest-workflow | |
if: inputs.workflow_id == '' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
R="SumoLogic/sumologic-otel-collector" | |
WFN="Dev builds" | |
W=$(gh run list -R "$R" -w "$WFN" -s success -b main --json databaseId -q '.[0].databaseId') | |
echo "id=$W" >> "$GITHUB_OUTPUT" | |
- name: Set output workflow | |
id: workflow | |
run: | | |
echo "id=${{ inputs.workflow_id || steps.latest-workflow.outputs.id }}" >> $GITHUB_OUTPUT | |
- name: Output Remote Workflow URL | |
run: echo ::notice title=Remote Workflow URL::https://github.com/SumoLogic/sumologic-otel-collector/actions/runs/${{ steps.workflow.outputs.id }} | |
# Builds a package for each target in the matrix. The target must be an | |
# existing file name (without extension) in the targets directory when | |
# build_tool is cmake. | |
build_packages: | |
name: ${{ matrix.target }} | |
uses: ./.github/workflows/_reusable_build_package.yml | |
needs: | |
- determine_workflow | |
with: | |
otc_build_number: ${{ github.run_number }} | |
cmake_target: ${{ matrix.target }} | |
workflow_id: ${{ needs.determine_workflow.outputs.workflow_id }} | |
runs_on: ${{ matrix.runs_on }} | |
goarch: ${{ matrix.goarch }} | |
package_arch: ${{ matrix.package_arch }} | |
build_tool: ${{ matrix.build_tool }} | |
fips: ${{ matrix.fips || false }} | |
secrets: | |
apple_developer_certificate_p12_base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }} | |
apple_developer_certificate_password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }} | |
productbuild_identity_name: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_IDENTITY }} | |
gh_artifacts_token: ${{ secrets.GH_ARTIFACTS_TOKEN }} | |
microsoft_certificate: ${{ secrets.MICROSOFT_CERTIFICATE }} | |
microsoft_certificate_password: ${{ secrets.MICROSOFT_CERTIFICATE_PASSWORD }} | |
microsoft_certhash: ${{ secrets.MICROSOFT_CERTHASH }} | |
microsoft_certname: ${{ secrets.MICROSOFT_CERTNAME }} | |
microsoft_description: ${{ secrets.MICROSOFT_DESCRIPTION }} | |
gh_ci_token: ${{ secrets.GH_CI_TOKEN }} | |
packagecloud_token: ${{ secrets.PACKAGECLOUD_TOKEN }} | |
strategy: | |
matrix: | |
include: | |
- target: otc_linux_amd64_deb | |
runs_on: ubuntu-latest | |
build_tool: cmake | |
- target: otc_linux_amd64_rpm | |
runs_on: ubuntu-latest | |
build_tool: cmake | |
- target: otc_linux_arm64_deb | |
runs_on: ubuntu-latest | |
build_tool: cmake | |
- target: otc_linux_arm64_rpm | |
runs_on: ubuntu-latest | |
build_tool: cmake | |
- target: otc_darwin_amd64_productbuild | |
runs_on: macos-latest | |
build_tool: cmake | |
- target: otc_darwin_arm64_productbuild | |
runs_on: macos-latest | |
build_tool: cmake | |
- target: otc_windows_amd64_wix | |
runs_on: windows-2019 | |
goarch: amd64 | |
package_arch: x64 | |
build_tool: wix | |
# fips targets | |
- target: otc_fips_linux_amd64_deb | |
runs_on: ubuntu-latest | |
build_tool: cmake | |
- target: otc_fips_linux_amd64_rpm | |
runs_on: ubuntu-latest | |
build_tool: cmake | |
- target: otc_fips_linux_arm64_deb | |
runs_on: ubuntu-latest | |
build_tool: cmake | |
- target: otc_fips_linux_arm64_rpm | |
runs_on: ubuntu-latest | |
build_tool: cmake | |
- target: otc_fips_windows_amd64_wix | |
runs_on: windows-2019 | |
goarch: amd64 | |
package_arch: x64 | |
build_tool: wix | |
fips: true | |
install-script: | |
name: Store install script | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Store Linux install script as action artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: install.sh | |
path: ./install-script/install.sh | |
if-no-files-found: error | |
- name: Store Windows install script as action artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: install.ps1 | |
path: ./install-script/install.ps1 | |
if-no-files-found: error | |
publish_release: | |
name: Publish Release | |
runs-on: ubuntu-latest | |
needs: | |
- build_packages | |
permissions: | |
contents: write | |
if: inputs.release | |
env: | |
OTC_APP_VERSION: v${{ needs.build_packages.outputs.otc_version }}-sumo-${{ needs.build_packages.outputs.otc_sumo_version }} | |
RELEASE_TAG_NAME: v${{ needs.build_packages.outputs.otc_version }}-${{ github.run_number }} | |
steps: | |
- name: Download all packages stored as artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts/ | |
# Create the release tag separately to add a message to it | |
# NOTE: As per the github API, we need to create the tag object first, and then the git reference | |
- name: Create release tag | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const tagRequest = await github.rest.git.createTag({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
tag: '${{ env.RELEASE_TAG_NAME }}', | |
message: `App Version: ${{ env.OTC_APP_VERSION }}`, | |
object: context.sha, | |
type: 'commit', | |
tagger: { | |
name: "${{ github.actor }}", | |
email: "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com", | |
}, | |
}) | |
github.rest.git.createRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: 'refs/tags/${{ env.RELEASE_TAG_NAME }}', | |
sha: tagRequest.data.sha | |
}) | |
- uses: ncipollo/release-action@v1 | |
with: | |
name: v${{ needs.build_packages.outputs.otc_version }}-${{ github.run_number }} | |
commit: ${{ github.sha }} | |
tag: ${{ env.RELEASE_TAG_NAME }} | |
draft: true | |
generateReleaseNotes: true | |
prerelease: false | |
allowUpdates: true | |
omitBodyDuringUpdate: true | |
omitNameDuringUpdate: true | |
artifacts: "artifacts/*/*" | |
artifactErrorsFailBuild: true | |
replacesArtifacts: true | |
body: | | |
This release packages [${{ env.OTC_APP_VERSION }}](https://github.com/SumoLogic/sumologic-otel-collector/releases/tag/${{ env.OTC_APP_VERSION }}). | |
The changelog below is for the package itself, rather than the Sumo Logic Distribution for OpenTelemetry Collector. |