Skip to content

feat(source-ashby): add metadata-driven smoke-test scenario and 1Password CI creds - #77129

Open
Aaron ("AJ") Steers (aaronsteers) wants to merge 3 commits into
masterfrom
devin/1777332749-ashby-smoketest-and-ci-creds
Open

Aaron ("AJ") Steers (aaronsteers) wants to merge 3 commits into
masterfrom
devin/1777332749-ashby-smoketest-and-ci-creds

Conversation

@aaronsteers

Copy link
Copy Markdown
Member

What

First concrete consumer of the new metadata.yaml smoke-test dialect (proposed in airbytehq/airbyte-connector-models#42 and consumed in airbytehq/airbyte-python-cdk#999) plus the CI plumbing that exposes 1Password-backed credentials to the connector test jobs.

Two changes, intentionally combined per request:

  1. airbyte-integrations/connectors/source-ashby/metadata.yaml — adds a smokeTests suite with one default scenario:

    - suite: smokeTests
      scenarios:
        - name: default
          configSettings:
            api_key: "${secret-ref:ashby/test-credentials-api_key/api_key}"
            start_date: "${relative-date:-P30D}"

    The secret-ref sigil uses the literal 1Password section name (test-credentials-api_key) — no prefix-stripping. The relative-date sigil renders to an RFC 3339 timestamp anchored at today's UTC midnight (e.g. 2026-03-22T00:00:00Z).

  2. .github/workflows/connector-ci-checks.yml — adds three env vars to both jvm-connectors-test and non-jvm-connectors-test jobs:

    AIRBYTE_TEST_CREDS_PROVIDER: 1pass
    AIRBYTE_TEST_CREDS_1PASS_VAULT_NAME: ${{ vars.AIRBYTE_TEST_CREDS_1PASS_VAULT_NAME || 'connector-integration-test-creds' }}
    OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}

    The vault name is overridable via repo vars and falls back to the existing default. These env vars are required only when a ${secret-ref:...} sigil actually appears in configSettings; legacy GSM-fetched connectors are unaffected.

How

  • metadata.yaml — additive; the existing connectorTestSuitesOptions already lists unitTests, this just appends smokeTests. No spec, dockerImageTag, or other connector-runtime fields are touched.
  • connector-ci-checks.yml — env vars are added alongside the existing GCP_GSM_CREDENTIALS / GCP_PROJECT_ID block, with an inline comment explaining the smokeTests opt-in semantics. Missing org-level secrets resolve to empty strings, which is fine — the CDK only validates the provider env vars when a sigil is actually present.

Review guide

  1. airbyte-integrations/connectors/source-ashby/metadata.yaml — confirm 3-segment sigil shape and literal section name.
  2. .github/workflows/connector-ci-checks.yml — two near-identical env blocks (jvm + non-jvm jobs).

User Impact

None today. This PR is structurally complete but functionally inert until two follow-ups land:

Once those land, airbyte-ci connectors test --name=source-ashby will auto-discover the smoke-test scenario, fetch creds from 1Password (vault connector-integration-test-creds, item ashby, section test-credentials-api_key), and run a check/spec/read against a fresh start_date = today - 30 days configuration.

Legacy GSM-based credential fetching for any other connector is not affected by this change.

Can this PR be safely reverted and rolled back?

  • YES 💚

The metadata.yaml addition is additive (no existing scenarios consume it yet). The workflow env vars only matter for connectors that opt in via a smokeTests block, so reverting just removes plumbing that nothing in production reads today.

Link to Devin session: https://app.devin.ai/sessions/5c2ccf537b70486b9e6fbc974d26063e
Requested by: Aaron ("AJ") Steers (@aaronsteers)

…word CI creds

Adds the first concrete consumer of the metadata.yaml smoke-test dialect:

* source-ashby/metadata.yaml grows a smokeTests suite with one default scenario whose configSettings reference the literal 1Password section name (no prefix-stripping):

    api_key:    ${secret-ref:ashby/test-credentials-api_key/api_key}

    start_date: ${relative-date:-P30D}

* connector-ci-checks.yml exposes AIRBYTE_TEST_CREDS_PROVIDER, AIRBYTE_TEST_CREDS_1PASS_VAULT_NAME, and OP_SERVICE_ACCOUNT_TOKEN to both jvm-connectors-test and non-jvm-connectors-test jobs. The vault name is overridable via repository vars and falls back to the existing 'connector-integration-test-creds' default. The provider/vault env vars are required only when a ${secret-ref:...} sigil is actually present, so legacy connectors that fetch from GSM are unaffected.

Functional resolution of the new sigils requires the airbyte-python-cdk #999 scenario loader and the airbyte-ops-mcp per-section .env.<section> writer to land first; this PR sets up the CI and metadata shape so those follow-ups can ship without further monorepo changes.
@devin-ai-integration

Copy link
Copy Markdown
Contributor

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@github-actions

Copy link
Copy Markdown
Contributor

👋 Greetings, Airbyte Team Member!

Here are some helpful tips and reminders for your convenience.

💡 Show Tips and Tricks

PR Slash Commands

Airbyte Maintainers (that's you!) can execute the following slash commands on your PR:

  • 🛠️ Quick Fixes
    • /format-fix - Fixes most formatting issues.
    • /bump-version - Bumps connector versions, scraping changelog description from the PR title.
      • Bump types: patch (default), minor, major, major_rc, rc, promote.
      • The rc type is a smart default: applies minor_rc if stable, or bumps the RC number if already RC.
      • The promote type strips the RC suffix to finalize a release.
      • Example: /bump-version type=rc or /bump-version type=minor
    • /bump-progressive-rollout-version - Alias for /bump-version type=rc. Bumps with an RC suffix and enables progressive rollout.
  • ❇️ AI Testing and Review (internal link: AI-SDLC Docs):
    • /ai-prove-fix - Runs prerelease readiness checks, including testing against customer connections.
    • /ai-canary-prerelease - Rolls out prerelease to 5-10 connections for canary testing.
    • /ai-review - AI-powered PR review for connector safety and quality gates.
  • 🚀 Connector Releases:
    • /publish-connectors-prerelease - Publishes pre-release connector builds (tagged as {version}-preview.{git-sha}) for all modified connectors in the PR.
  • ☕️ JVM connectors:
    • /update-connector-cdk-version connector=<CONNECTOR_NAME> - Updates the specified connector to the latest CDK version.
      Example: /update-connector-cdk-version connector=destination-bigquery
  • 🐍 Python connectors:
    • /poe connector source-example lock - Run the Poe lock task on the source-example connector, committing the results back to the branch.
    • /poe source example lock - Alias for /poe connector source-example lock.
    • /poe source example use-cdk-branch my/branch - Pin the source-example CDK reference to the branch name specified.
    • /poe source example use-cdk-latest - Update the source-example CDK dependency to the latest available version.
  • ⚙️ Admin commands:
    • /force-merge reason="<REASON>" - Force merges the PR using admin privileges, bypassing CI checks. Requires a reason.
      Example: /force-merge reason="CI is flaky, tests pass locally"
📚 Show Repo Guidance

Helpful Resources

📝 Edit this welcome message.

@github-actions

github-actions Bot commented Apr 27, 2026 •

Copy link
Copy Markdown
Contributor

source-ashby Connector Test Results

0 tests   0 ✅  0s ⏱️
0 suites  0 💤
0 files    0 ❌

Results for commit 6e46be5.

♻️ This comment has been updated with latest results.

Comment thread .github/workflows/connector-ci-checks.yml
…orks

Per review feedback: main repo doesn't ship a default smoke-test
provider; forks opt in by setting `AIRBYTE_TEST_CREDS_PROVIDER` and
`OP_SERVICE_ACCOUNT_TOKEN` themselves. Vault name fallback stays so
forks can override via repository vars without changing the workflow.
# are present; legacy GSM-fetched connectors are unaffected.
AIRBYTE_TEST_CREDS_PROVIDER: 1pass
AIRBYTE_TEST_CREDS_1PASS_VAULT_NAME: ${{ vars.AIRBYTE_TEST_CREDS_1PASS_VAULT_NAME || 'connector-integration-test-creds' }}
OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here and above, let's rename OP_SERVICE_ACCOUNT_TOKEN to AIRBYTE_TEST_CREDS_1PASS_SERVICE_TOKEN

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 6e46be5 — renamed at both call sites and updated the comment to reflect the new name.

Note for downstream wiring: the underlying op CLI reads OP_SERVICE_ACCOUNT_TOKEN natively, so the OPS CLI consumer (which is what actually shells out to op) will need to read AIRBYTE_TEST_CREDS_1PASS_SERVICE_TOKEN and re-export it as OP_SERVICE_ACCOUNT_TOKEN for the subprocess. I'll handle that translation in the OPS CLI follow-up PR so this naming convention stays clean at the workflow boundary.


Devin session

Per review feedback: rename to `AIRBYTE_TEST_CREDS_1PASS_SERVICE_TOKEN`
to keep all smoke-test creds env vars in the same `AIRBYTE_TEST_CREDS_1PASS_*`
namespace. The downstream consumer (OPS CLI) is responsible for translating
this to `OP_SERVICE_ACCOUNT_TOKEN` for the underlying `op` invocation.
@aaronsteers
Aaron ("AJ") Steers (aaronsteers) marked this pull request as ready for review April 28, 2026 00:00

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 2 additional findings.

Open in Devin Review

@devin-ai-integration

Copy link
Copy Markdown
Contributor

↪️ Triggering /ai-review per Hands-Free AI Triage Project triage next step.

Reason: PR is ready for review with no prior AI review on file.

Devin session

@octavia-bot

octavia-bot Bot commented Apr 28, 2026 •

Copy link
Copy Markdown
Contributor

AI PR Review starting...

Reviewing PR for connector safety and quality.
View playbook

✅ Devin AI session created successfully!

@devin-ai-integration

devin-ai-integration Bot commented Apr 28, 2026 •

Copy link
Copy Markdown
Contributor

AI PR Review Report

Review Action: REQUEST CHANGES
Risk Level: 2 — CI workflow adds 1Password service-token env vars to test jobs; metadata.yaml adds additive smoke-test config with no runtime behavior change.

Gate Status
PR Hygiene PASS
Code Hygiene PASS
Test Coverage PASS
Code Security PASS
Per-Record Performance PASS
Breaking Dependencies PASS
Backwards Compatibility PASS
Forwards Compatibility PASS
Behavioral Changes PASS
Out-of-Scope Changes PASS
CI Checks FAIL
Live / E2E Tests PASS
🔧 Remediation Required

Required Actions

CI Checks (FAIL)

Both Test source-ashby Connector check-runs failed with:

airbyte-ops: command not found
Process completed with exit code 127.

This failure occurs at the airbyte-ops secrets fetch source-ashby step. The airbyte-ops CLI is not available in the CI runner environment. The connector has zero unit tests (test results show 0 tests, 0 suites, 0 files), so the actual test execution was never reached.

Note: This appears to be a pre-existing CI infrastructure issue, not caused by this PR's changes. The airbyte-ops tool is missing from the runner regardless of these changes.

Condition Remediation
airbyte-ops CLI not available in CI runner This may require CI infrastructure changes to install airbyte-ops before the secrets-fetch step, or the secrets-fetch step needs to gracefully handle the missing tool for connectors with no tests. Consider coordinating with CI maintainers.

📋 PR Details

Connector & PR Info

Connector(s): source-ashby
PR: #77129
HEAD SHA: 6e46be5e453482f05767a1cf10b62e659b942d19
Session: https://app.devin.ai/sessions/4b07d31ec5d34ac88de1ab39ee7210a6

Risk Level

Level: 2 — Low
Rationale: CI workflow exposes 1Password service-token env var (AIRBYTE_TEST_CREDS_1PASS_SERVICE_TOKEN) to test jobs across both JVM and non-JVM matrices; metadata.yaml adds purely additive smoke-test configuration under connectorTestSuitesOptions with no runtime behavior change. The PR is explicitly "functionally inert" until follow-up CDK and ops-mcp changes land.

Risk Level is reported for downstream consumers (e.g. auto-merge policy, reviewer routing). It does not change the review action — APPROVE here means "no blocking objection," not "safe to merge unattended."

Review Action Details

REQUEST CHANGES — Submitted PR review requesting changes due to the failing Test source-ashby Connector CI checks. The failures are infrastructure-level (airbyte-ops: command not found) rather than code-level, and likely pre-existing. Human maintainers may choose to override this assessment if the CI failure is a known infrastructure issue.

Note: The bot submits APPROVE whenever all enforced gates PASS, regardless of what the PR changes. APPROVE is a quality signal, not a merge authorization; any auto-merge behavior is governed by separate policy reading decision and risk_level from the metrics marker.

🔍 Gate Evaluation Details

Gate-by-Gate Analysis

Gate Status Enforced? Details
PR Hygiene PASS Yes Description present (3506 chars raw), metadata-only change exempt from changelog, all peer feedback resolved
Code Hygiene PASS WARNING Exempt — metadata-only change (connectorTestSuitesOptions), no source code modified
Test Coverage PASS Yes Exempt — no behavioral change indicators matched for source code; only metadata test-config and CI workflow changes
Code Security PASS Yes No changed files match security-sensitive path patterns; no security keywords (allowedHosts, connectorBuildOptions, dockerRepository) in metadata.yaml diff hunks
Per-Record Performance PASS WARNING No record processing code changed
Breaking Dependencies PASS WARNING No dependency files changed
Backwards Compatibility PASS Warning (elevates Risk Level) Additive-only change to connectorTestSuitesOptions; no spec/stream/schema changes
Forwards Compatibility PASS Warning (elevates Risk Level) No state/cursor/pagination/transformation keywords in diff hunks
Behavioral Changes PASS Warning (elevates Risk Level) No operational risk keywords (rate_limit, retry, backoff, timeout, error_handler) in diff hunks
Out-of-Scope Changes PASS Skip PR contains connector files (metadata.yaml); .github/workflows/ change noted but does not make entire PR out-of-scope
CI Checks FAIL Yes Test source-ashby Connector failed x2 with airbyte-ops: command not found (exit code 127); Connector CI Checks Summary failed as aggregation
Live / E2E Tests PASS Yes No validation required — metadata test-configuration and CI workflow changes only; no bug-fix, API handling, discovery, or sync behavior changes detected

PR Hygiene — Evidence:

  • PR Body Length (raw): 3506
  • PR Body Length (after stripping): >3000 (substantial content)
  • PR Body Length (visible content): >2000 (detailed What/How/Review guide/User Impact sections)
  • PR Body Preview: ## What\n\nFirst concrete consumer of the new metadata.yaml smoke-test dialect...
  • Docs Changelog: Exempt (metadata-only change — connectorTestSuitesOptions addition, no functional connector code)
  • Peer Feedback: 2 inline comments from Aaron ("AJ") Steers (@aaronsteers), both [Resolved] with replies

CI Checks — Evidence:

  • Lint source-ashby Connector (73297648103): ✅ PASS
  • Lint source-ashby Connector (73297525786): ✅ PASS
  • Build and Verify Artifacts (source-ashby) (73297648101): ✅ PASS
  • Test source-ashby Connector (73297648116): ❌ FAIL — airbyte-ops: command not found (exit code 127)
  • Test source-ashby Connector (73297525795): ❌ FAIL — airbyte-ops: command not found (exit code 127)
  • Connector CI Checks Summary (73297807710): ❌ FAIL (aggregation)
  • source-ashby Pre-Release Checks (73297648114): ❌ FAIL (excluded from CI Checks — evaluated by Live / E2E Tests gate)
  • Test results: 0 tests, 0 suites, 0 files — connector has no unit tests
  • Failure is at airbyte-ops secrets fetch source-ashby step, before any tests run

Notable: CI workflow changes
The .github/workflows/connector-ci-checks.yml file adds AIRBYTE_TEST_CREDS_1PASS_SERVICE_TOKEN (from secrets.AIRBYTE_TEST_CREDS_1PASS_SERVICE_TOKEN) and AIRBYTE_TEST_CREDS_1PASS_VAULT_NAME to both jvm-connectors-test and non-jvm-connectors-test jobs. While this doesn't match the deterministic security gate patterns (which focus on connector-level auth files), it does expose a secret to CI jobs and merits human review.

📚 Evidence Consulted

Evidence

  • Changed files: 2 files
    • .github/workflows/connector-ci-checks.yml — CI env var additions (1Password credentials plumbing)
    • airbyte-integrations/connectors/source-ashby/metadata.yaml — additive smokeTests suite
  • CI checks: 36 passed, 4 failed, 0 pending, 12 skipped
    • Core failures: Test source-ashby Connector x2 (airbyte-ops: command not found)
    • Pre-release failure: source-ashby Pre-Release Checks (excluded from CI Checks gate)
  • PR labels: connectors/source/ashby
  • PR description: Present (3506 chars)
  • Existing bot reviews: No REQUEST CHANGES or APPROVE reviews for HEAD SHA 6e46be5e; only COMMENTED reviews
❓ How to Respond

Providing Context or Justification

You can add explanations that the bot will see on the next review:

Option 1: PR Description (recommended)
Add a section to your PR description:

## AI PR Review Justification

### CI Checks
[Your explanation here]

Option 2: PR Comment
Add a comment starting with:

AI PR Review Justification:
[Your explanation here]

After adding your response, re-run /ai-review to have the bot evaluate it.

Note: The CI Checks failure appears to be an infrastructure issue (airbyte-ops CLI not installed) rather than a code issue. If this is a known pre-existing failure for source-ashby, a maintainer can override this assessment.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants