Class Settings

java.lang.Object
com.example.adkspam.Settings

public final class Settings extends Object
Configuration read from environment variables. Mirrors settings.py in the Python ADK issue monitoring (spam detection) agent.

Values are exposed as accessor methods (read lazily on each call) rather than static final fields. This keeps the class loadable in unit tests and adk web agent loaders without a GITHUB_TOKEN present — only githubToken() throws when the token is actually required (i.e. right before a network call).

Required variables:

  • GITHUB_TOKEN — GitHub Personal Access Token (or the Actions built-in token) with issues:write permission. Required for both interactive and workflow modes.
  • GOOGLE_API_KEY — Gemini API key. Required for both modes (or set up Vertex AI credentials and GOOGLE_GENAI_USE_VERTEXAI=TRUE).

Optional variables:

  • OWNER — defaults to google.
  • REPO — defaults to adk-java.
  • MODEL — Gemini model used for moderation. Defaults to gemini-flash-latest (a Flash model favors latency/cost for this high-volume scan, matching the Python sample's gemini-2.5-flash). Overridable without a code change.
  • SPAM_LABEL_NAME — label applied to flagged issues. Defaults to spam.
  • BOT_NAME — GitHub handle of the official bot whose content is never scanned. Defaults to adk-bot.
  • BOT_ALERT_SIGNATURE — signature prefix the agent writes in its alert comment; also used as the idempotency marker so the agent never double-posts. Defaults to a fixed alert banner.
  • INITIAL_FULL_SCAN1/true audits every open issue; otherwise only issues updated in the last 24 hours are audited. Defaults to off (daily sweep).
  • ISSUE_SCAN_LIMIT — safety cap on how many open issues a single sweep processes. Defaults to 100.
  • INTERACTIVE1/true for interactive mode (asks for confirmation before flagging), 0/false for unattended workflow mode. Defaults to interactive when unset.
  • DRY_RUN1/true logs intended labels/comments without calling the GitHub mutation endpoints. Lets you verify the full pipeline (incl. Gemini) without modifying any real issue. Defaults to off.
  • EVENT_NAME — the GitHub event that triggered the workflow (issues, schedule, etc.). Drives single-issue vs. sweep behavior in SpamDetectionAgentRun.
  • ISSUE_NUMBER, ISSUE_TITLE, ISSUE_BODY — populated by the GitHub Actions workflow when the trigger is an issue event.
  • Method Details

    • githubToken

      public static String githubToken()
      Returns the GitHub token, throwing a clear error if it is not configured.
    • hasGithubToken

      public static boolean hasGithubToken()
      Returns true if a GITHUB_TOKEN is configured, without throwing.
    • owner

      public static String owner()
    • repo

      public static String repo()
    • model

      public static String model()
      Returns the Gemini model used for moderation. Defaults to gemini-flash-latest (a Flash model favors latency/cost for this high-volume scan) and is overridable via the MODEL environment variable, so it can be changed without editing source.
    • spamLabel

      public static String spamLabel()
    • botName

      public static String botName()
    • botAlertSignature

      public static String botAlertSignature()
    • isInitialFullScan

      public static boolean isInitialFullScan()
    • issueScanLimit

      public static int issueScanLimit()
    • eventName

      public static @Nullable String eventName()
    • issueNumber

      public static @Nullable String issueNumber()
    • issueTitle

      public static @Nullable String issueTitle()
    • issueBody

      public static @Nullable String issueBody()
    • isInteractive

      public static boolean isInteractive()
    • isDryRun

      public static boolean isDryRun()
    • parseNumberString

      public static int parseNumberString(@Nullable String value, int defaultValue)
      Parses a number from a string, falling back to defaultValue on null/blank/invalid input. Mirrors parse_number_string in the Python utils.