Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
f424e04
Performance improvements
May 2, 2026
8f20d56
chore: Update the MCP SDK version to 1.1.2
google-genai-bot May 5, 2026
582cf7c
fix: Account for nulls in EventActions and State
google-genai-bot May 8, 2026
509c4aa
feat: Add SkillSource interface and implementations for loading skills
google-genai-bot May 9, 2026
d837ef0
feat: Refactor BigQueryAgentAnalyticsPlugin for async in preparation …
google-genai-bot May 11, 2026
8574fc5
fix: upgrade Mockito and JaCoCo for Java 25 compatibility
carlossg May 12, 2026
aad6375
Merge pull request #1195 from carlossg:fix/java25-asm-compatibility
copybara-github May 13, 2026
c6debc3
chore(deps): bump org.apache.httpcomponents.client5:httpclient5
dependabot[bot] Apr 29, 2026
5af998c
Merge pull request #1171 from google:dependabot/maven/maven-e7f4454574
copybara-github May 13, 2026
9529c1a
feat: Add ChatCompletionsHTTPClient and support for non-streaming req…
google-genai-bot May 13, 2026
44feab9
chore(main): release 1.3.0
adk-java-releases-bot May 13, 2026
484d375
Merge pull request #1168 from google:release-please--branches--main
copybara-github May 15, 2026
1fb905a
chore(main): release 1.3.1-SNAPSHOT
adk-java-releases-bot May 15, 2026
3e496e4
Merge pull request #1197 from google:release-please--branches--main
copybara-github May 15, 2026
b4791ef
fix: Suppress empty-text-only chunks from streaming responses while p…
google-genai-bot May 19, 2026
384a0c5
feat: Add streaming support for ChatCompletionsHTTPClient
google-genai-bot May 20, 2026
69638df
fix: revert "Suppress empty-text-only chunks from streaming responses…
damianmomotgoogle May 21, 2026
6ad2043
fix: Resolve IllegalArgumentException for text MIME types in LangChai…
hemasekhar-p May 6, 2026
8375408
Merge pull request #1185 from hemasekhar-p:fix-langchain4j-mimetype
copybara-github May 22, 2026
83a4b71
feat: Add tools and toolset to use SkillSource in ADK agents
google-genai-bot May 22, 2026
a1d2c1c
feat: Add GcsOffloader for asynchronously uploading content to Google…
google-genai-bot May 22, 2026
5bad20a
feat: Add GcsOffloader for asynchronously uploading content to Google…
google-genai-bot May 23, 2026
5ee51fd
feat: Add tools and toolset to use SkillSource in ADK agents
google-genai-bot May 23, 2026
cc3b9ce
feat: Add telemetry and metrics recording capabilities
google-genai-bot May 25, 2026
8bccc3b
fix: inject Dev UI tracer into core engine for embedded telemetry
hemasekhar-p May 5, 2026
de85300
fix(dev): restrict default CORS origins and WebSocket allowed origins…
g0w6y May 26, 2026
e76c14c
Merge pull request #1183 from hemasekhar-p:adk-ui-trace-fix
copybara-github May 26, 2026
ae13073
feat: Introduce max span limit to ApiServerSpanExporter
damianmomotgoogle May 26, 2026
020499b
fix: run tools concurrently in PARALLEL ToolExecutionMode
damianmomotgoogle May 26, 2026
fe88217
fix: adjust default ToolExecutionMode to SEQUENTIAL as it was actual …
damianmomotgoogle May 26, 2026
d3e7f31
fix: introduce PARALLEL_SUBSCRIBE ToolExecutionMode; restore previous…
damianmomotgoogle May 26, 2026
a0c4b7b
fix(mcp): honor custom URL sub-paths in StreamableHttpServerParameters
damianmomotgoogle May 27, 2026
49ff63b
docs: clarify LlmAgent composition for workflow agents
damianmomotgoogle May 27, 2026
198b2fb
feat: Add tools and toolset to use SkillSource in ADK agents
google-genai-bot May 27, 2026
f1155ec
fix: pre-merge stateDelta before onUserMessageCallback in Runner
damianmomotgoogle May 28, 2026
e6fe9aa
feat: refactor OpenTelemetry (OTel) instrumentation within the ADK co…
google-genai-bot May 28, 2026
d608909
fix: route HITL confirmation back to originating sub-agent in workflo…
damianmomotgoogle May 28, 2026
51c9d1a
feat: Add GcsOffloader for asynchronously uploading content to Google…
google-genai-bot May 29, 2026
1685a4e
feat: Add JSON cycle detection
google-genai-bot May 29, 2026
3a0a8ca
chore(main): release 1.4.0
adk-java-releases-bot May 29, 2026
1e6d3e2
Merge pull request #1205 from google:release-please--branches--main
copybara-github Jun 1, 2026
2606962
chore(main): release 1.4.1-SNAPSHOT
adk-java-releases-bot Jun 1, 2026
f8555a0
Merge pull request #1238 from google:release-please--branches--main
copybara-github Jun 1, 2026
29d3203
fix:SkillMdPath should be public
google-genai-bot Jun 1, 2026
9a06dd3
feat: support optional types in function tool parameters
google-genai-bot Jun 1, 2026
0a40557
fix: wait for the Runner to persist a step's events before the ADK fl…
damianmomotgoogle Jun 3, 2026
ec93f50
feat: Enhance BigQuery Agent Analytics Plugin with new event types
google-genai-bot Jun 8, 2026
bd7cd00
ADK changes
google-genai-bot Jun 10, 2026
aaedcaf
fix: Bypass redundant getSession read in ADK Runner
google-genai-bot Jun 10, 2026
3abcf4f
feat: bump google-genai dependency to 1.58.0
kvmilos Jun 11, 2026
a60c246
fix: convert unsupported artifact MIME types to text
1wos Jun 11, 2026
bfee8be
Merge pull request #1212 from 1wos:codex/adk-java-load-artifacts-mime…
copybara-github Jun 12, 2026
fb9274e
feat: add avatar config support to the live streaming flow
kvmilos Jun 12, 2026
987ef4e
fix: stop dropping the latest event(s) in VertexAiSessionService.getS…
kvmilos Jun 12, 2026
e12baa2
perf: filter session events server-side by afterTimestamp in VertexAi…
kvmilos Jun 15, 2026
287987a
feat: Add thought signature support for chat completions
google-genai-bot Jun 15, 2026
e69adb3
ADK changes
google-genai-bot Jun 16, 2026
792d2f4
feat: add GitHub release-docs analyzer (Java)
damianmomotgoogle Jun 18, 2026
fc480ec
fix: initialize event ID when creating compaction events
google-genai-bot Jun 18, 2026
2c1b7ab
ADK changes
google-genai-bot Jun 18, 2026
3ec8fde
fix: Enable Jackson serialization for ToolConfig
hemasekhar-p Jun 18, 2026
436b802
feat: Update token usage reporting to include thoughts and cache tokens
google-genai-bot Jun 20, 2026
bd29429
chore(main): release 1.5.0
adk-java-releases-bot Jun 20, 2026
f18b23d
Merge pull request #1239 from google:release-please--branches--main
copybara-github Jun 22, 2026
9a8aeb9
chore(main): release 1.5.1-SNAPSHOT
adk-java-releases-bot Jun 22, 2026
3737885
Merge pull request #1291 from google:release-please--branches--main
copybara-github Jun 22, 2026
fa94438
feat: Add ADK Java Issue Triaging Agent sample
google-genai-bot Jun 22, 2026
f14f644
feat: Add ADK PR Triaging Agent for google/adk-java
google-genai-bot Jun 23, 2026
d0e9588
Fix RxJava tracing context propagation
r4inee Jun 9, 2026
df73784
feat: Add chat-completions API support to ApigeeLlm
google-genai-bot Jun 23, 2026
b6bd2dd
feat: Adds the ADK Stale Issue Auditor sample
google-genai-bot Jun 24, 2026
3573b0e
chore: Add Java 25 to GitHub CI validation matrix.
damianmomotgoogle Jun 24, 2026
f76c5f9
fix: map token usage metadata for Anthropic Claude model
hemasekhar-p Jun 12, 2026
a6d41cf
fix(core): allow Long values to match INTEGER schema type
google-genai-bot Jun 25, 2026
456234f
fix: Use existing secrets and built-in token in ADK docs release anal…
damianmomotgoogle Jun 25, 2026
fd45dda
feat: Add ADK Issue Monitoring (Spam Detection) Agent sample for Java
google-genai-bot Jun 25, 2026
9831733
refactor: Extract shared GitHubTools into its own sample module
damianmomotgoogle Jun 25, 2026
bc32948
fix: widen Integer to Long in castValue() for boxed Long parameter
jjhz Jun 20, 2026
784dd98
Enforce strict JSON Schema compliance to prevent OpenAI 400 Bad Reque…
svetanis Jun 13, 2026
a27cfee
Merge pull request #1261 from hemasekhar-p:claude-token-usage-fix
copybara-github Jun 26, 2026
407478b
feat: advance SequentialAgent to later sub-agents after a HITL resume…
damianmomotgoogle Jun 26, 2026
2818c95
Merge pull request #1266 from svetanis:fix-openai-json-schema-compliance
copybara-github Jun 26, 2026
f70c972
chore(dev): refresh bundled adk-web dev UI to the ADK Python v1 (1.34…
damianmomotgoogle Jun 26, 2026
3f6665b
feat: Updated Spring AI to 2.0.0, ECJ, build works with Java 25
ddobrin Jun 25, 2026
37bb5e6
fix(gemini): align streaming function-call handling with ADK Python
damianmomotgoogle Jun 26, 2026
d3068c5
Merge pull request #1298 from ddobrin:spring-update
copybara-github Jun 26, 2026
587073a
feat: Add ClassPathSkillSource to load skills from the Java classpath
google-genai-bot Jun 26, 2026
71f6929
fix: map ChatResponse usage metadata to LlmResponse
hemasekhar-p Apr 27, 2026
d0edd41
fix:Make stale issue workflow configurable for dry runs
google-genai-bot Jun 29, 2026
d667db8
fix: Move @JsonCreator inside LiveRequest Builder
hemasekhar-p Jun 17, 2026
9d3eae1
Merge pull request #1288 from hemasekhar-p:toolconfig-json-issue-fix
copybara-github Jun 29, 2026
a558c50
Merge pull request #1161 from hemasekhar-p:springai-metadata-missing-fix
copybara-github Jun 29, 2026
cefd978
ci: validate conventional commit PR titles
damianmomotgoogle Jun 29, 2026
07a2ec9
fix: scope ADK Java docs release analyzer to a single language
damianmomotgoogle Jun 29, 2026
1cde379
Merge pull request #1253 from r4inee:ssu/fix-rxjava-tracing-context
copybara-github Jun 29, 2026
4225b07
fix: Make dry_run configurable for ADK Java PR triage, spam detection…
google-genai-bot Jun 29, 2026
cb73317
fix(dev): use localhost port wildcard for default CORS/WebSocket origins
g0w6y Jun 29, 2026
a6cb87a
fix: ignore usage-only responses outside bidi
r4inee Jun 9, 2026
551cfb0
Merge pull request #1254 from r4inee:ssu/fix-code-exec-usage-only-event
copybara-github Jun 30, 2026
4e72002
Merge pull request #1290 from jjhz:fix/function-tool-boxed-long-cast
copybara-github Jun 30, 2026
8ed64ea
fix: Resolve NPE when McpTool description is null
hemasekhar-p Jun 17, 2026
e255192
fix: Safely handle empty model in GoogleSearchTool request processor
hemasekhar-p Jun 30, 2026
ce6af87
Merge pull request #1286 from hemasekhar-p:googlesearch-tool-issue-fix
copybara-github Jun 30, 2026
b130a60
Merge pull request #1281 from hemasekhar-p:liverequest-json-issue-fix
copybara-github Jul 1, 2026
bead3da
Merge pull request #1287 from hemasekhar-p:mcp-npe-with-no-descriptio…
copybara-github Jul 1, 2026
5029081
fix(dev): keep '*' CORS default, drive WebSocket origins from config,…
g0w6y Jul 1, 2026
9b046b6
fix: use daemon threads in OkHttp dispatchers to allow graceful JVM s…
svetanis Jun 13, 2026
1ce89b9
refactor: Removing unused methods in Instrumentation and Tracing
google-genai-bot Jul 2, 2026
ec6c45d
Merge pull request #1268 from svetanis:fix/graceful-jvm-shutdown
copybara-github Jul 2, 2026
6834b36
ADK changes
google-genai-bot Jul 3, 2026
c2b087c
Merge pull request #1222 from g0w6y:fix/dev-server-wildcard-cors-webs…
copybara-github Jul 3, 2026
d1b1d92
fix: prevent cross-user session data disclosure in VertexAiSessionSer…
Jul 3, 2026
6dd4594
fix(flows): end invocation on a deferred long-running tool call
damianmomotgoogle Jul 3, 2026
b8be90d
fix: preserve non-text output in streaming responses
Jul 3, 2026
9d06760
ADK changes
google-genai-bot Jul 6, 2026
55392f6
fix(skills): prevent path traversal in LocalSkillSource
adilburaksen Jul 6, 2026
bd243e6
Merge pull request #1331 from adilburaksen:fix/local-skill-source-pat…
copybara-github Jul 6, 2026
1b9b395
feat(flows): add RunConfig.groupFunctionResponsesInHistory to group f…
damianmomotgoogle Jul 6, 2026
e6b3517
test: bump GeminiApiIntegrationTest to gemini-flash-latest
damianmomotgoogle Jul 7, 2026
fe6c683
fix: subscribe to appendEvent Single in runLive
google-genai-bot Jul 7, 2026
3eb9e49
chore(main): release 1.6.0
adk-java-releases-bot Jul 7, 2026
4159258
chore(main): release 1.6.1-SNAPSHOT
adk-java-releases-bot Jul 7, 2026
6a1ce6e
Merge pull request #1292 from google:release-please--branches--main
copybara-github Jul 7, 2026
7a4113e
fix(agents): warn when AgentTool config_path escapes agent base direc…
adilburaksen Jun 2, 2026
5c3d328
fix: preserve provider ChatOptions type to prevent ClassCastException
MiloszSobczyk Jul 9, 2026
66fa921
fix(mcp): guard empty tool parameters in `adkToMcpToolType`
MiloszSobczyk Jul 9, 2026
c685ece
feat: BQAA Java preview-readiness fixes (redaction, table bootstrap, …
google-genai-bot Jul 9, 2026
285547b
feat: Propagate A2A metadata to RunConfig for request-scoped access
google-genai-bot Jul 9, 2026
08f4fdc
Merge pull request #1218 from adilburaksen:fix/config-path-traversal
copybara-github Jul 10, 2026
fc95ce7
feat(flows): enable forced FC reordering based on gemini-3 model name
damianmomotgoogle Jul 10, 2026
760c8da
fix: fix Claude MCP tool `inputSchema` by falling back to `parameters…
MiloszSobczyk Jul 10, 2026
3a5959f
Performance improvements
May 2, 2026
b0b5f0d
test: add regression test for findAgentToRun backward scan
Jul 10, 2026
7a1180d
Merge branch 'feat/performance-improvements' of https://github.com/om…
Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 85 additions & 0 deletions .github/workflows/analyze-releases-for-adk-docs-updates.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: Analyze New Release for ADK Docs Updates

on:
# Runs on every new release.
release:
types: [published]
# Manual trigger for testing and retrying.
workflow_dispatch:
inputs:
start_tag:
description: 'Older release tag (base), e.g. v0.1.0'
required: false
type: string
end_tag:
description: 'Newer release tag (head), e.g. v0.2.0'
required: false
type: string
dry_run:
description: 'Dry run: preview only. Set to false to actually create the issue and PRs.'
required: false
default: true
type: boolean

jobs:
analyze-new-release-for-adk-docs-updates:
runs-on: ubuntu-latest
# Dry-run reads only (this repo + the public docs repo) and skips writes, so
# the built-in GITHUB_TOKEN suffices. For --no-dry-run, use a PAT with write
# access to the docs repo.
permissions:
contents: read

steps:
- name: Checkout repository
uses: actions/checkout@v6

- name: Set up Java
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '17'

- name: Cache Maven packages
uses: actions/cache@v5
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-

- name: Run the ADK Docs Release Analyzer
env:
# Built-in token is enough for dry-run (read-only). For --no-dry-run, use a
# PAT with docs-repo write access, e.g. ${{ secrets.ADK_TRIAGE_AGENT }}.
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
GOOGLE_GENAI_USE_VERTEXAI: '0'
DOC_OWNER: 'google'
CODE_OWNER: 'google'
DOC_REPO: 'adk-docs'
CODE_REPO: 'adk-java'
ANALYZER_START_TAG: ${{ github.event.inputs.start_tag }}
ANALYZER_END_TAG: ${{ github.event.inputs.end_tag }}
# Defaults to dry-run (preview only). Flip to false via manual dispatch
# to actually create the issue and PRs.
ANALYZER_DRY_RUN: ${{ github.event.inputs.dry_run || 'true' }}
shell: bash
run: |
set -euo pipefail
if [[ "${ANALYZER_DRY_RUN}" == "false" ]]; then
args="--no-dry-run"
else
args="--dry-run"
fi
if [[ -n "${ANALYZER_START_TAG:-}" ]]; then
args="${args} --start-tag ${ANALYZER_START_TAG}"
fi
if [[ -n "${ANALYZER_END_TAG:-}" ]]; then
args="${args} --end-tag ${ANALYZER_END_TAG}"
fi
# Install ADK libs + sample, then run exec:java scoped to this module
# (exec:java with -am would also run on the parent, which has no mainClass).
./mvnw -B -q -pl contrib/samples/github/adkreleasedocs -am install -DskipTests
./mvnw -B -q -pl contrib/samples/github/adkreleasedocs exec:java \
-Dexec.args="${args}"
31 changes: 31 additions & 0 deletions .github/workflows/pr-title-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Validates that the PR title is a Conventional Commit. Pull requests are
# squash-merged into a single commit (see pr-commit-check.yml), so the PR title
# becomes the commit message release-please parses for versioning and changelog
# generation.
name: PR Title Check

on:
pull_request:
types: [opened, edited, synchronize, reopened]

permissions:
contents: read

jobs:
check-pr-title:
runs-on: ubuntu-latest
steps:
- name: Validate Conventional Commit title
env:
PR_TITLE: ${{ github.event.pull_request.title }}
run: |
pattern='^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\([a-zA-Z0-9][a-zA-Z0-9/]*[a-zA-Z0-9]\))?!?:.*[^.[:space:]]$'
if [[ "$PR_TITLE" =~ $pattern ]]; then
echo "PR title is a valid Conventional Commit: $PR_TITLE"
else
echo "::error::Invalid PR title: \"$PR_TITLE\""
echo "Expected: <type>[(scope)][!]: <description>"
echo "Allowed types: build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test"
echo "The description must not be empty and must not end with a period."
exit 1
fi
94 changes: 94 additions & 0 deletions .github/workflows/pr-triage-adk-java.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Triages newly-opened (and reopened/edited) adk-java pull requests with the ADK
# PR Triaging Agent sample under contrib/samples/github/adkprtriaging. The agent
# labels the PR and, when it falls short of the contribution guidelines, posts a
# single comment asking the author for the missing context.
#
# Required repository secrets:
# - GOOGLE_API_KEY : Gemini API key (or wire up Vertex AI credentials and
# set GOOGLE_GENAI_USE_VERTEXAI=TRUE).
# Labeling/commenting uses the built-in GITHUB_TOKEN (no secret to manage); the
# `permissions:` block below grants it the `pull-requests: write` scope it needs.
# Swap in a PAT only if you specifically want triage actions attributed to a
# distinct bot identity.
#
# Security note: this workflow uses `pull_request_target`, so it runs with the
# base repository's token/secrets. It deliberately relies on the DEFAULT checkout
# (the base branch) and never checks out the PR head, so untrusted PR code is
# never executed — the agent only reads the PR through the GitHub API. The agent
# additionally treats the PR title/body/diff as untrusted data, binds its writes
# to the triggering PR number and a fixed label allowlist, and pins writes to
# this repository (see the sample's README for the full threat model).
name: ADK PR Triaging Agent

on:
pull_request_target:
types: [opened, reopened, edited]
workflow_dispatch:
inputs:
pr_number:
description: 'The pull request number to triage'
required: true
type: 'string'
dry_run:
description: 'Dry run: preview only. Set to false to actually create the issue and PRs.'
required: false
default: true
type: boolean

# Serialize runs that touch the same PR so a re-trigger (e.g. an "edited" event)
# can't race an in-flight run on the same PR (which, with label appends, could
# duplicate labels or comments).
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.inputs.pr_number }}
cancel-in-progress: false

jobs:
agent-triage-pull-request:
runs-on: ubuntu-latest
# Only run on the upstream repo, for newly-opened/reopened/edited PRs or a
# manual dispatch.
if: >-
github.repository == 'google/adk-java' && (
github.event_name == 'workflow_dispatch' ||
github.event.action == 'opened' ||
github.event.action == 'reopened' ||
github.event.action == 'edited'
)
permissions:
pull-requests: write
contents: read

steps:
# Default checkout: the base branch (trusted code), NOT the PR head.
- name: Checkout repository
uses: actions/checkout@v6

- name: Set up Java
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '17'
cache: maven

- name: Run PR Triaging Agent
env:
# Built-in token scoped by the `permissions:` block above. Replace with a
# PAT (e.g. ${{ secrets.ADK_TRIAGE_AGENT }}) only if you need a distinct
# bot identity for the label/comment actions.
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
GOOGLE_GENAI_USE_VERTEXAI: '0'
OWNER: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
INTERACTIVE: '0'
# Defaults to a dry run (logs intended labels/comments without writing).
# Verify the pipeline, then set DRY_RUN to '0' to go live.
DRY_RUN: ${{ github.event.inputs.dry_run || 'true' }}
EVENT_NAME: ${{ github.event_name }}
PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number || github.event.inputs.pr_number }}
run: |
# Install the ADK libs + this sample, then run exec:java scoped to this
# module (exec:java with -am would also run on the parent/core modules,
# which have no mainClass).
./mvnw -B -q -pl contrib/samples/github/adkprtriaging -am install -DskipTests
./mvnw -B -q -pl contrib/samples/github/adkprtriaging exec:java
94 changes: 94 additions & 0 deletions .github/workflows/spam-detection-adk-java-issues.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Scans adk-java issues for spam/promotional content with the ADK Issue
# Monitoring (Spam Detection) Agent sample under
# contrib/samples/github/adkspam.
#
# Required repository secrets:
# - GOOGLE_API_KEY : Gemini API key (or wire up Vertex AI credentials and
# set GOOGLE_GENAI_USE_VERTEXAI=TRUE).
# Labeling/commenting uses the built-in GITHUB_TOKEN (no secret to manage); the
# `permissions:` block below grants it the `issues: write` scope it needs. Swap
# in a PAT only if you specifically want the spam label/alert comment attributed
# to a distinct bot identity.
#
# NOTE: the `spam` label (or whatever SPAM_LABEL_NAME is set to) must already
# exist in the repository's labels; the agent applies it but does not create it.
name: ADK Issue Monitoring (Spam Detection) Agent

on:
issues:
types: [opened]
schedule:
# Run daily at 06:00 UTC, matching the Python issue-monitor workflow.
- cron: '0 6 * * *'
workflow_dispatch:
inputs:
full_scan:
description: 'Audit ALL open issues (not just those updated in the last 24h).'
required: false
default: false
type: boolean
dry_run:
description: 'Dry run: preview only. Set to false to actually create the issue and PRs.'
required: false
default: true
type: boolean

# Serialize runs that touch the same issue so the scheduled sweep can't race a
# per-issue run on that issue.
concurrency:
group: ${{ github.workflow }}-${{ github.event.issue.number || github.ref }}
cancel-in-progress: false

jobs:
agent-scan-issues:
runs-on: ubuntu-latest
# Only run on the upstream repo, for newly-opened issues, the scheduled
# sweep, or a manual dispatch.
if: >-
github.repository == 'google/adk-java' && (
github.event_name == 'schedule' ||
github.event_name == 'workflow_dispatch' ||
github.event.action == 'opened'
)
permissions:
issues: write
contents: read

steps:
- name: Checkout repository
uses: actions/checkout@v6

- name: Set up Java
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '17'
cache: maven

- name: Run Spam Detection Agent
env:
# Built-in token scoped by the `permissions:` block above. Replace with a
# PAT (e.g. ${{ secrets.ADK_TRIAGE_AGENT }}) only if you need a distinct
# bot identity for the label/comment actions.
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
GOOGLE_GENAI_USE_VERTEXAI: '0'
OWNER: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
INTERACTIVE: '0'
# Defaults to a dry run (logs intended labels/comments without writing).
# Verify the pipeline, then set DRY_RUN to '0' to go live.
DRY_RUN: ${{ github.event.inputs.dry_run || 'true' }}
EVENT_NAME: ${{ github.event_name }}
ISSUE_NUMBER: ${{ github.event.issue.number }}
ISSUE_TITLE: ${{ github.event.issue.title }}
ISSUE_BODY: ${{ github.event.issue.body }}
# Mapped to the manual-dispatch checkbox. On the daily schedule this is
# empty, so only issues updated in the last 24h are audited.
INITIAL_FULL_SCAN: ${{ github.event.inputs.full_scan }}
run: |
# Install the ADK libs + this sample, then run exec:java scoped to this
# module (exec:java with -am would also run on the parent/core modules,
# which have no mainClass).
./mvnw -B -q -pl contrib/samples/github/adkspam -am install -DskipTests
./mvnw -B -q -pl contrib/samples/github/adkspam exec:java
85 changes: 85 additions & 0 deletions .github/workflows/stale-adk-java-issues.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Audits stale adk-java issues with the ADK Stale Issue Auditor sample under
# contrib/samples/github/adkstale.
#
# Required repository secrets:
# - GOOGLE_API_KEY : Gemini API key (or wire up Vertex AI credentials and
# set GOOGLE_GENAI_USE_VERTEXAI=TRUE).
# Commenting/labelling/closing uses the built-in GITHUB_TOKEN (no secret to
# manage); the `permissions:` block below grants it the `issues: write` scope it
# needs. Swap in a PAT only if you specifically want stale actions attributed to
# a distinct bot identity.
#
# Prerequisite: the `stale` label (and, if used, `request clarification`) must
# exist in the repository; GitHub will not auto-create labels when the agent
# applies them.
name: ADK Stale Issue Auditor

on:
schedule:
# Run daily at 06:00 UTC.
- cron: '0 6 * * *'
workflow_dispatch:
inputs:
dry_run:
description: 'Dry run: preview only. Set to false to actually create the issue and PRs.'
required: false
default: true
type: boolean

# Serialize runs so an in-flight daily sweep can't overlap a manual dispatch and
# act on the same issues twice.
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: false

jobs:
agent-audit-stale-issues:
runs-on: ubuntu-latest
# Only run on the upstream repo, on the daily schedule or a manual dispatch.
if: >-
github.repository == 'google/adk-java' && (
github.event_name == 'schedule' ||
github.event_name == 'workflow_dispatch'
)
permissions:
issues: write
contents: read

steps:
- name: Checkout repository
uses: actions/checkout@v6

- name: Set up Java
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '17'
cache: maven

- name: Run Stale Issue Auditor
env:
# Built-in token scoped by the `permissions:` block above. Replace with a
# PAT (e.g. ${{ secrets.ADK_STALE_AGENT }}) only if you need a distinct
# bot identity for the comment/label/close actions.
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
GOOGLE_GENAI_USE_VERTEXAI: '0'
OWNER: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
INTERACTIVE: '0'
# Defaults to a dry run (logs intended comments/labels/closures without
# writing). Flip to false via manual dispatch to actually mark as stale.
DRY_RUN: ${{ github.event.inputs.dry_run || 'true' }}
EVENT_NAME: ${{ github.event_name }}
# Max number of stale-candidate issues to audit per run.
ISSUE_COUNT_TO_PROCESS: '20'
# Optional: comma-separated GitHub handles to treat as maintainers when
# the token cannot list push-access collaborators. Stored as a repo
# variable rather than committed to source.
MAINTAINERS: ${{ vars.ADK_MAINTAINERS }}
run: |
# Install the ADK libs + this sample, then run exec:java scoped to this
# module (exec:java with -am would also run on the parent/core modules,
# which have no mainClass).
./mvnw -B -q -pl contrib/samples/github/adkstale -am install -DskipTests
./mvnw -B -q -pl contrib/samples/github/adkstale exec:java
Loading
Loading