[chore][CICD] More reusable workflow organization #851
Workflow file for this run
This file contains hidden or 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
name: chef-test | |
# Only run tests if there are relevant changes | |
on: | |
push: | |
branches: | |
- main | |
paths: | |
- '.github/workflows/chef-test.yml' | |
- 'deployments/chef/**' | |
- '!**.md' | |
pull_request: | |
paths: | |
- '.github/workflows/chef-test.yml' | |
- 'deployments/chef/**' | |
- '!**.md' | |
schedule: | |
- cron: '0 0 * * 2,5' # Every Tuesday and Friday at midnight UTC | |
concurrency: | |
group: chef-test-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
env: | |
CHEF_VERSION: "22.12.1024" | |
CHEF_LICENSE: accept | |
jobs: | |
cross-compile: | |
needs: [ chef-lint-spec-test ] | |
strategy: | |
matrix: | |
SYS_BINARIES: [ "binaries-linux_amd64", "binaries-windows_amd64" ] | |
uses: ./.github/workflows/reusable-compile.yml | |
with: | |
SYS_BINARY: ${{ matrix.SYS_BINARIES }} | |
agent-bundle-linux: | |
strategy: | |
matrix: | |
ARCH: [ "amd64" ] | |
fail-fast: false | |
uses: ./.github/workflows/reusable-agent-bundle-linux.yml | |
with: | |
ARCH: ${{ matrix.ARCH }} | |
build-package: | |
needs: [ cross-compile, agent-bundle-linux ] | |
strategy: | |
matrix: | |
SYS_PACKAGE: [ "deb", "rpm" ] | |
ARCH: [ "amd64" ] | |
fail-fast: false | |
uses: ./.github/workflows/reusable-build-package.yml | |
with: | |
SYS_PACKAGE: ${{ matrix.SYS_PACKAGE }} | |
ARCH: ${{ matrix.ARCH }} | |
agent-bundle-windows: | |
needs: [ chef-lint-spec-test ] | |
strategy: | |
matrix: | |
OS: [ "windows-2025" ] | |
uses: ./.github/workflows/reusable-agent-bundle-windows.yml | |
with: | |
OS: ${{ matrix.OS }} | |
msi-custom-actions: | |
needs: [ chef-lint-spec-test ] | |
strategy: | |
matrix: | |
OS: [ "windows-2025" ] | |
uses: ./.github/workflows/reusable-msi-custom-actions.yml | |
with: | |
OS: ${{ matrix.OS }} | |
msi-build: | |
needs: [ cross-compile, agent-bundle-windows, msi-custom-actions ] | |
strategy: | |
matrix: | |
OS: [ "windows-2025" ] | |
uses: ./.github/workflows/reusable-msi-build.yml | |
with: | |
OS: ${{ matrix.OS }} | |
chef-lint-spec-test: | |
name: chef-lint-spec-test | |
runs-on: ubuntu-24.04 | |
defaults: | |
run: | |
working-directory: 'deployments/chef' | |
steps: | |
- name: Check out the codebase. | |
uses: actions/checkout@v4 | |
- name: lint | |
run: make lint | |
- name: Rake spec | |
run: | | |
make rake-spec | |
chef-kitchen-matrix: | |
runs-on: ubuntu-24.04 | |
defaults: | |
run: | |
working-directory: 'deployments/chef' | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Get linux distros and suites | |
id: get-linux-matrix | |
run: | | |
distros=$(yq '[.platforms[] | "\"" + (.name | sub("_", "-") | sub("\.", "")) + "\""] | join(", ")' kitchen.yml) | |
if [ -z "$distros" ]; then | |
echo "Failed to get platforms from kitchen.yml!" >&2 | |
exit 1 | |
fi | |
echo "matrix={'DISTRO': [${distros}]}" >> $GITHUB_OUTPUT | |
- name: Get windows distros and suites | |
id: get-win-matrix | |
run: | | |
distros=$(yq '[.platforms[] | "\"" + (.name | sub("_", "-") | sub("\.", "")) + "\""] | join(", ")' kitchen.windows.yml) | |
if [ -z "$distros" ]; then | |
echo "Failed to get platforms from kitchen.windows.yml!" >&2 | |
exit 1 | |
fi | |
suites=$(yq '[.suites[] | "\"" + (.name | sub("_", "-") | sub("\.", "")) + "\""] | join(", ")' kitchen.windows.yml) | |
if [ -z "$suites" ]; then | |
echo "Failed to get suites from kitchen.windows.yml!" >&2 | |
exit 1 | |
fi | |
echo "matrix={'DISTRO': [${distros}], 'SUITE': [${suites}]}" >> $GITHUB_OUTPUT | |
outputs: | |
linux-matrix: ${{ steps.get-linux-matrix.outputs.matrix }} | |
win-matrix: ${{ steps.get-win-matrix.outputs.matrix }} | |
chef-kitchen-linux: | |
runs-on: ubuntu-24.04 | |
needs: [ chef-lint-spec-test, chef-kitchen-matrix, build-package ] | |
defaults: | |
run: | |
working-directory: 'deployments/chef' | |
strategy: | |
matrix: ${{ fromJSON(needs.chef-kitchen-matrix.outputs.linux-matrix) }} | |
fail-fast: false | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
path: /tmp | |
# Chef doesn't have an easy way to get names of files from unarchived packages | |
# It's simpler to manually unarchive and move the built artifacts to the | |
# cookbook files directory here. The files/ dir under the Chef deployment is a special | |
# directory in Chef, used for copying files from the cookbook to the host running | |
# Chef. | |
# Cookbook files reference: https://docs.chef.io/files/ | |
- name: Extract artifacts | |
run: | | |
mkdir -p files | |
deb_path=$(find /tmp/deb-amd64-package/splunk-otel-collector*amd64.deb) | |
mv $deb_path ./files/soc.deb | |
rpm_path=$(find /tmp/rpm-amd64-package/splunk-otel-collector*x86_64.rpm) | |
mv $rpm_path ./files/soc.rpm | |
- name: Install chef | |
uses: actionshub/[email protected] | |
with: | |
version: ${{ env.CHEF_VERSION }} | |
# Install of fluentd is failing on Debian 11, so we disable it for that distro. | |
- name: Set `with_fluentd` to false on Debian 11 | |
if: matrix.DISTRO == 'debian-11' | |
run: | | |
yq eval '(.suites[] | select(.name=="custom_vars").attributes.splunk_otel_collector.with_fluentd) = false' -i kitchen.yml | |
- run: kitchen test ${{ matrix.DISTRO }} | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: ${{ matrix.DISTRO }} | |
path: deployments/chef/.kitchen/logs/* | |
chef-kitchen-windows: | |
runs-on: ${{ matrix.DISTRO }} | |
needs: [ chef-lint-spec-test, chef-kitchen-matrix, msi-build ] | |
defaults: | |
run: | |
working-directory: 'deployments/chef' | |
strategy: | |
matrix: ${{ fromJSON(needs.chef-kitchen-matrix.outputs.win-matrix) }} | |
fail-fast: false | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
path: /tmp | |
# Chef doesn't have an easy way to get names of files from unarchived packages | |
# It's simpler to unarchive and move the built artifacts manually to the | |
# cookbook files directory. The files/ dir under the Chef deployment is a special | |
# directory in Chef, used for copying files from the cookbook to the host running | |
# Chef. | |
# Cookbook files reference: https://docs.chef.io/files/ | |
- name: Extract artifacts | |
run: | | |
mkdir files | |
Get-ChildItem /tmp -Recurse -Include 'splunk-otel-collector*.msi' | Select FullName -OutVariable msiPath | |
mv $msiPath.FullName ./files/splunk-otel-collector.msi | |
- name: Install chef | |
uses: actionshub/[email protected] | |
with: | |
version: ${{ env.CHEF_VERSION }} | |
- name: Install kitchen-docker | |
run: chef gem install kitchen-docker -v 2.12.0 | |
- name: kitchen test ${{ matrix.SUITE }}-${{ matrix.DISTRO }} | |
run: | | |
kitchen test ${{ matrix.SUITE }}-${{ matrix.DISTRO }} | |
# For some reason, kitchen returns 0 here even if there are test failures, so check the log instead. | |
grep -q "No tests executed." .kitchen/logs/kitchen.log && exit 1 | |
grep -q "0 failures" .kitchen/logs/kitchen.log || exit 1 | |
shell: bash | |
env: | |
KITCHEN_YAML: kitchen.windows.yml | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: ${{ matrix.SUITE }}-${{ matrix.DISTRO }} | |
path: deployments/chef/.kitchen/logs/* |