actions/steps/affected/action.yaml (80 lines of code) (raw):
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Find affected
description: Finds the affected packages.
inputs:
config-file:
description: Path to the custard config file.
required: true
head-sha:
description: The commit sha of the head where the changes live.
default: HEAD
main-sha:
description: The commit sha of the main branch to be compared to.
default: origin/main
paths:
description: Comma-separated package paths instead of git diff.
custard-version:
description: Custard version to install.
default: v0.2.1
go-version:
description: Go version to build the custard tools.
default: ^1.22.0
outputs:
paths:
description: The affected paths as a JSON list.
value: ${{ steps.custard.outputs.paths }}
num-paths:
description: The number of affected paths.
value: ${{ steps.custard.outputs.num-paths }}
ci-setups:
description: The CI setup configurations for the affected packages.
value: ${{ steps.custard.outputs.ci-setups }}
runs:
using: composite
steps:
- name: Setup Go
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5
with:
go-version: ${{ inputs.go-version }}
- name: Checkout Custard
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
repository: GoogleCloudPlatform/cloud-samples-tools
ref: ${{ inputs.custard-version }}
path: cloud-samples-tools
- name: Install Custard
shell: bash
run: go install ./cmd/custard
working-directory: cloud-samples-tools/custard
- name: Clean up the workspace
shell: bash
run: rm -rf cloud-samples-tools
# Find the affected packages.
- name: Checkout the commit history
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
ref: ${{ inputs.head-sha }}
fetch-depth: 0 # fetch the entire branch history to find diffs
- name: Get diffs from main and the PR
shell: bash
run: |
if [[ -n "$PATHS" ]]; then
# If paths are explicitly provided, use them.
echo "$PATHS" \
| sed 's/ *, */\n/g' \
| sed 's/$/\/diff/' \
| tee diffs.txt
else
# Otherwise, use git diff.
git --no-pager diff --name-only $HEAD $MAIN \
| tee diffs.txt
fi
env:
HEAD: ${{ inputs.head-sha }}
MAIN: ${{ inputs.main-sha }}
PATHS: ${{ inputs.paths }}
- name: Find affected packages
id: custard
shell: bash
run: |
PATHS=$(custard affected ${{ inputs.config-file }} diffs.txt paths.txt)
echo "paths=$PATHS" >> $GITHUB_OUTPUT
echo "num-paths=$(echo $PATHS | jq length)" >> $GITHUB_OUTPUT
cat paths.txt
echo "ci-setups=$(custard setup-files ${{ inputs.config-file }} paths.txt)" >> $GITHUB_OUTPUT