Skip to content

Update smoke test latest versions #5

Update smoke test latest versions

Update smoke test latest versions #5

name: Update smoke test latest versions
on:
schedule:
- cron: "0 5 * * 0"
workflow_dispatch:
jobs:
update-smoke-test-latest-versions:
runs-on: ubuntu-latest
name: Update smoke test latest versions
env:
MIN_DEPENDENCY_AGE_HOURS: 48
permissions:
contents: read
id-token: write # Required for OIDC token federation
steps:
- uses: DataDog/dd-octo-sts-action@96a25462dbcb10ebf0bfd6e2ccc917d2ab235b9a # v1.0.4
id: octo-sts
with:
scope: DataDog/dd-trace-java
policy: self.update-smoke-test-latest-versions.create-pr
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
- name: Define branch name
id: define-branch
run: |
DATE=$(date +'%Y%m%d')
echo "branch=ci/update-smoke-test-latest-versions-${DATE}" >> "$GITHUB_OUTPUT"
- name: Read current pinned versions
id: current
run: |
gradle_props="dd-smoke-tests/gradle/src/test/resources/latest-tool-versions.properties"
maven_props="dd-smoke-tests/maven/src/test/resources/latest-tool-versions.properties"
get_prop() { grep "^$1=" "$2" 2>/dev/null | cut -d= -f2 || true; }
echo "gradle_version=$(get_prop gradle.version "$gradle_props")" >> "$GITHUB_OUTPUT"
echo "maven_version=$(get_prop maven.version "$maven_props")" >> "$GITHUB_OUTPUT"
echo "surefire_version=$(get_prop maven-surefire.version "$maven_props")" >> "$GITHUB_OUTPUT"
- name: Resolve latest eligible Gradle version
id: gradle
run: |
python3 .github/scripts/dependency_age.py select-gradle \
--min-age-hours "${MIN_DEPENDENCY_AGE_HOURS}" \
--current-version "${{ steps.current.outputs.gradle_version }}" \
--github-output "$GITHUB_OUTPUT"
- name: Resolve latest eligible stable Maven version
id: maven
run: |
python3 .github/scripts/dependency_age.py select-maven \
--group-id org.apache.maven \
--artifact-id apache-maven \
--prerelease-pattern alpha \
--prerelease-pattern beta \
--prerelease-pattern rc \
--min-age-hours "${MIN_DEPENDENCY_AGE_HOURS}" \
--current-version "${{ steps.current.outputs.maven_version }}" \
--github-output "$GITHUB_OUTPUT"
- name: Resolve latest eligible stable Maven Surefire version
id: surefire
run: |
python3 .github/scripts/dependency_age.py select-maven \
--group-id org.apache.maven.plugins \
--artifact-id maven-surefire-plugin \
--prerelease-pattern alpha \
--prerelease-pattern beta \
--min-age-hours "${MIN_DEPENDENCY_AGE_HOURS}" \
--current-version "${{ steps.current.outputs.surefire_version }}" \
--github-output "$GITHUB_OUTPUT"
- name: Update properties files
id: update
env:
GRADLE_VERSION: ${{ steps.gradle.outputs.version }}
GRADLE_PUBLISHED: ${{ steps.gradle.outputs.published_at }}
MAVEN_VERSION: ${{ steps.maven.outputs.version }}
MAVEN_PUBLISHED: ${{ steps.maven.outputs.published_at }}
SUREFIRE_VERSION: ${{ steps.surefire.outputs.version }}
SUREFIRE_PUBLISHED: ${{ steps.surefire.outputs.published_at }}
run: |
version_line() { if [ -n "$2" ]; then echo "$1 (published $2)"; else echo "$1 (unchanged)"; fi; }
echo "Writing latest eligible stable versions (>=${MIN_DEPENDENCY_AGE_HOURS}h old) to properties files:"
echo " Gradle: $(version_line "${GRADLE_VERSION}" "${GRADLE_PUBLISHED}")"
echo " Maven: $(version_line "${MAVEN_VERSION}" "${MAVEN_PUBLISHED}")"
echo " Maven Surefire: $(version_line "${SUREFIRE_VERSION}" "${SUREFIRE_PUBLISHED}")"
# Build version lines for PR body
echo "gradle_line=$(version_line "${GRADLE_VERSION}" "${GRADLE_PUBLISHED}")" >> "$GITHUB_OUTPUT"
echo "maven_line=$(version_line "${MAVEN_VERSION}" "${MAVEN_PUBLISHED}")" >> "$GITHUB_OUTPUT"
echo "surefire_line=$(version_line "${SUREFIRE_VERSION}" "${SUREFIRE_PUBLISHED}")" >> "$GITHUB_OUTPUT"
printf '%s\n' \
"# Pinned latest eligible stable versions (>=${MIN_DEPENDENCY_AGE_HOURS}h old) for CI Visibility Gradle smoke tests." \
"# Updated automatically by the update-smoke-test-latest-versions workflow." \
"gradle.version=${GRADLE_VERSION}" \
> dd-smoke-tests/gradle/src/test/resources/latest-tool-versions.properties
printf '%s\n' \
"# Pinned latest eligible stable versions (>=${MIN_DEPENDENCY_AGE_HOURS}h old) for CI Visibility Maven smoke tests." \
"# Updated automatically by the update-smoke-test-latest-versions workflow." \
"maven.version=${MAVEN_VERSION}" \
"maven-surefire.version=${SUREFIRE_VERSION}" \
> dd-smoke-tests/maven/src/test/resources/latest-tool-versions.properties
- name: Check for changes
id: check-changes
run: |
if [[ -z "$(git status -s)" ]]; then
echo "No changes detected — pinned versions are already on the latest eligible stable releases."
echo "has_changes=false" >> "$GITHUB_OUTPUT"
else
echo "Changes detected in the following files:"
git status -s
echo ""
echo "Diff:"
git diff
echo "has_changes=true" >> "$GITHUB_OUTPUT"
fi
- name: Configure git
if: steps.check-changes.outputs.has_changes == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- name: Create commit
if: steps.check-changes.outputs.has_changes == 'true'
run: |
git add dd-smoke-tests/gradle/src/test/resources/latest-tool-versions.properties \
dd-smoke-tests/maven/src/test/resources/latest-tool-versions.properties
git commit -m "chore: Update smoke test latest tool versions"
- name: Push changes
if: steps.check-changes.outputs.has_changes == 'true'
uses: DataDog/commit-headless@ad3668640012ec69186398f43d61923f6878bbbe # action/v3.2.0
with:
token: "${{ steps.octo-sts.outputs.token }}"
branch: "${{ steps.define-branch.outputs.branch }}"
head-sha: "${{ github.sha }}"
create-branch: true
command: push
- name: Create pull request
if: steps.check-changes.outputs.has_changes == 'true'
env:
GH_TOKEN: ${{ steps.octo-sts.outputs.token }}
run: |
gh pr create --title "Update smoke test latest tool versions" \
--base master \
--head ${{ steps.define-branch.outputs.branch }} \
--label "tag: dependencies" \
--label "tag: no release notes" \
--body "$(cat <<'EOF'
# What Does This Do
This PR updates the pinned latest eligible stable tool versions used by CI Visibility smoke tests.
Only releases at least ${{ env.MIN_DEPENDENCY_AGE_HOURS }} hours old are eligible.
- Gradle: ${{ steps.update.outputs.gradle_line }}
- Maven: ${{ steps.update.outputs.maven_line }}
- Maven Surefire: ${{ steps.update.outputs.surefire_line }}
# Motivation
Keep smoke tests running against the latest eligible stable versions of build tools without adopting releases in their first 48 hours.
# Contributor Checklist
- [ ] Verify smoke tests pass with the new versions
EOF
)"