From c8495d0b764ca75a4f16b52c9437c340dacf85df Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 9 Dec 2025 00:52:54 +0000 Subject: [PATCH 1/4] feat(generators): Add docker login step to CI workflows for wiremock Co-Authored-By: thomas@buildwithfern.com --- generators/csharp/base/src/asIs/github-ci.yml | 10 ++++++++++ generators/go/internal/writer/workflows/ci.yml | 10 ++++++++++ generators/php/base/src/asIs/github-ci.yml | 10 ++++++++++ .../src/fern_python/cli/abstract_generator.py | 18 ++++++++++++++++++ generators/rust/base/src/asIs/ci.yml | 12 +++++++++++- 5 files changed, 59 insertions(+), 1 deletion(-) diff --git a/generators/csharp/base/src/asIs/github-ci.yml b/generators/csharp/base/src/asIs/github-ci.yml index 3791f98c9e2c..29e710540f95 100644 --- a/generators/csharp/base/src/asIs/github-ci.yml +++ b/generators/csharp/base/src/asIs/github-ci.yml @@ -52,6 +52,16 @@ jobs: run: | dotnet tool restore + - name: Log in to Docker Hub + if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} + uses: docker/login-action@v3 + with: + username: ${{ env.DOCKER_USERNAME }} + password: ${{ env.DOCKER_PASSWORD }} + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + - name: Restore dependencies run: dotnet restore <%= testProjectFilePath %> diff --git a/generators/go/internal/writer/workflows/ci.yml b/generators/go/internal/writer/workflows/ci.yml index 56310d69624b..49758769b191 100644 --- a/generators/go/internal/writer/workflows/ci.yml +++ b/generators/go/internal/writer/workflows/ci.yml @@ -23,6 +23,16 @@ jobs: - name: Set up go uses: actions/setup-go@v4 + - name: Log in to Docker Hub + if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} + uses: docker/login-action@v3 + with: + username: ${{ env.DOCKER_USERNAME }} + password: ${{ env.DOCKER_PASSWORD }} + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + - name: Setup wiremock server run: | if [ -f wiremock/docker-compose.test.yml ]; then docker compose -f wiremock/docker-compose.test.yml down && docker compose -f wiremock/docker-compose.test.yml up -d; fi diff --git a/generators/php/base/src/asIs/github-ci.yml b/generators/php/base/src/asIs/github-ci.yml index ba5836ae6967..3f7c5a7a2f25 100644 --- a/generators/php/base/src/asIs/github-ci.yml +++ b/generators/php/base/src/asIs/github-ci.yml @@ -39,6 +39,16 @@ jobs: with: php-version: "8.1" + - name: Log in to Docker Hub + if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} + uses: docker/login-action@v3 + with: + username: ${{ env.DOCKER_USERNAME }} + password: ${{ env.DOCKER_PASSWORD }} + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + - name: Install tools run: | composer install diff --git a/generators/python/src/fern_python/cli/abstract_generator.py b/generators/python/src/fern_python/cli/abstract_generator.py index 8ac564d167a9..8d89887949e6 100644 --- a/generators/python/src/fern_python/cli/abstract_generator.py +++ b/generators/python/src/fern_python/cli/abstract_generator.py @@ -338,6 +338,15 @@ def _get_github_workflow_legacy(self, output_mode: GithubOutputMode, write_unit_ curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1 - name: Install dependencies run: poetry install + - name: Log in to Docker Hub + if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} + uses: docker/login-action@v3 + with: + username: ${{ env.DOCKER_USERNAME }} + password: ${{ env.DOCKER_PASSWORD }} + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} """ if write_unit_tests: workflow_yaml += """ @@ -423,6 +432,15 @@ def _get_github_workflow(self, output_mode: GithubOutputMode, write_unit_tests: curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1 - name: Install dependencies run: poetry install + - name: Log in to Docker Hub + if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} + uses: docker/login-action@v3 + with: + username: ${{ env.DOCKER_USERNAME }} + password: ${{ env.DOCKER_PASSWORD }} + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} """ if write_unit_tests: workflow_yaml += """ diff --git a/generators/rust/base/src/asIs/ci.yml b/generators/rust/base/src/asIs/ci.yml index 4ce05aaa991e..2a6309f126f0 100644 --- a/generators/rust/base/src/asIs/ci.yml +++ b/generators/rust/base/src/asIs/ci.yml @@ -39,6 +39,16 @@ jobs: - name: Set up Rust uses: actions-rust-lang/setup-rust-toolchain@v1 + - name: Log in to Docker Hub + if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} + uses: docker/login-action@v3 + with: + username: ${{ env.DOCKER_USERNAME }} + password: ${{ env.DOCKER_PASSWORD }} + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + - name: Test run: cargo test -{{PUBLISH_WORKFLOW}} \ No newline at end of file +{{PUBLISH_WORKFLOW}} From 89ed0de38a11503b91f88dc579b272c0df17872b Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 9 Dec 2025 00:56:17 +0000 Subject: [PATCH 2/4] chore: Update versions.yml for generators with docker login step Co-Authored-By: thomas@buildwithfern.com --- generators/csharp/sdk/versions.yml | 8 ++++++++ generators/go/sdk/versions.yml | 8 ++++++++ generators/php/sdk/versions.yml | 8 ++++++++ generators/python/sdk/versions.yml | 8 ++++++++ generators/rust/sdk/versions.yml | 8 ++++++++ 5 files changed, 40 insertions(+) diff --git a/generators/csharp/sdk/versions.yml b/generators/csharp/sdk/versions.yml index 2a471346bbc6..933cbe6cee87 100644 --- a/generators/csharp/sdk/versions.yml +++ b/generators/csharp/sdk/versions.yml @@ -1,4 +1,12 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json +- version: 2.11.3 + changelogEntry: + - summary: | + Add optional Docker Hub login step to generated CI workflow for wiremock tests to avoid rate limits. + type: chore + createdAt: "2025-12-09" + irVersion: 61 + - version: 2.11.2 changelogEntry: - summary: | diff --git a/generators/go/sdk/versions.yml b/generators/go/sdk/versions.yml index a3166cb4497a..dcd268e91fa5 100644 --- a/generators/go/sdk/versions.yml +++ b/generators/go/sdk/versions.yml @@ -1,5 +1,13 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json +- version: 1.18.5 + changelogEntry: + - summary: | + Add optional Docker Hub login step to generated CI workflow for wiremock tests to avoid rate limits. + type: chore + createdAt: "2025-12-09" + irVersion: 60 + - version: 1.18.4 changelogEntry: - summary: | diff --git a/generators/php/sdk/versions.yml b/generators/php/sdk/versions.yml index 3bdeb2da09c9..42ab631ed0a8 100644 --- a/generators/php/sdk/versions.yml +++ b/generators/php/sdk/versions.yml @@ -1,5 +1,13 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json +- version: 1.25.1 + changelogEntry: + - summary: | + Add optional Docker Hub login step to generated CI workflow for wiremock tests to avoid rate limits. + type: chore + createdAt: "2025-12-09" + irVersion: 62 + - version: 1.25.0 changelogEntry: - summary: | diff --git a/generators/python/sdk/versions.yml b/generators/python/sdk/versions.yml index 04752babeb10..de9263541b52 100644 --- a/generators/python/sdk/versions.yml +++ b/generators/python/sdk/versions.yml @@ -1,5 +1,13 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json # For unreleased changes, use unreleased.yml +- version: 4.43.1 + changelogEntry: + - summary: | + Add optional Docker Hub login step to generated CI workflow for wiremock tests to avoid rate limits. + type: chore + createdAt: "2025-12-09" + irVersion: 61 + - version: 4.43.0 changelogEntry: - summary: | diff --git a/generators/rust/sdk/versions.yml b/generators/rust/sdk/versions.yml index b4a36d379310..819fb57d01b2 100644 --- a/generators/rust/sdk/versions.yml +++ b/generators/rust/sdk/versions.yml @@ -1,5 +1,13 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json +- version: 0.13.5 + changelogEntry: + - summary: | + Add optional Docker Hub login step to generated CI workflow for wiremock tests to avoid rate limits. + type: chore + createdAt: "2025-12-09" + irVersion: 61 + - version: 0.13.4 createdAt: "2025-12-02" changelogEntry: From 3f1fb74a39d9803e02e7807cc4dcd3c90fad7999 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 9 Dec 2025 01:06:23 +0000 Subject: [PATCH 3/4] fix: Escape ${{ syntax in C# CI template for lodash template processing Co-Authored-By: thomas@buildwithfern.com --- generators/csharp/base/src/asIs/github-ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/generators/csharp/base/src/asIs/github-ci.yml b/generators/csharp/base/src/asIs/github-ci.yml index 29e710540f95..a9bbdae3376b 100644 --- a/generators/csharp/base/src/asIs/github-ci.yml +++ b/generators/csharp/base/src/asIs/github-ci.yml @@ -53,14 +53,14 @@ jobs: dotnet tool restore - name: Log in to Docker Hub - if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} + if: $\{{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} uses: docker/login-action@v3 with: - username: ${{ env.DOCKER_USERNAME }} - password: ${{ env.DOCKER_PASSWORD }} + username: $\{{ env.DOCKER_USERNAME }} + password: $\{{ env.DOCKER_PASSWORD }} env: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + DOCKER_USERNAME: $\{{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: $\{{ secrets.DOCKER_PASSWORD }} - name: Restore dependencies run: dotnet restore <%= testProjectFilePath %> From dfef9bd3950c65b9970c20c1b52932de4a0719c2 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 9 Dec 2025 01:31:33 +0000 Subject: [PATCH 4/4] chore(ci): Add docker login to seed workflow for wiremock-using SDKs Reverts generator CI template changes and instead adds Docker Hub login to the seed.yml workflow for SDKs that use WireMock containers in tests (go-sdk, python-sdk, php-sdk, rust-sdk, csharp-sdk). This addresses Docker Hub rate limiting issues by authenticating pulls in our internal seed tests, without modifying user-facing CI templates. Co-Authored-By: thomas@buildwithfern.com --- .github/workflows/seed.yml | 30 +++++++++++++++++++ generators/csharp/base/src/asIs/github-ci.yml | 10 ------- generators/csharp/sdk/versions.yml | 8 ----- .../go/internal/writer/workflows/ci.yml | 10 ------- generators/go/sdk/versions.yml | 8 ----- generators/php/base/src/asIs/github-ci.yml | 10 ------- generators/php/sdk/versions.yml | 8 ----- generators/python/sdk/versions.yml | 8 ----- .../src/fern_python/cli/abstract_generator.py | 18 ----------- generators/rust/base/src/asIs/ci.yml | 12 +------- generators/rust/sdk/versions.yml | 8 ----- 11 files changed, 31 insertions(+), 99 deletions(-) diff --git a/.github/workflows/seed.yml b/.github/workflows/seed.yml index 8bdbad256431..34f075a4a865 100644 --- a/.github/workflows/seed.yml +++ b/.github/workflows/seed.yml @@ -449,6 +449,12 @@ jobs: sparse-checkout: | .github/actions/run-seed-process + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: fernapi + password: ${{ secrets.FERN_API_DOCKERHUB_PASSWORD }} + - name: Run All Seed Tests uses: ./.github/actions/run-seed-process with: @@ -781,6 +787,12 @@ jobs: sparse-checkout: | .github/actions/run-seed-process + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: fernapi + password: ${{ secrets.FERN_API_DOCKERHUB_PASSWORD }} + - name: Run All Seed Tests uses: ./.github/actions/run-seed-process with: @@ -841,6 +853,12 @@ jobs: sparse-checkout: | .github/actions/run-seed-process + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: fernapi + password: ${{ secrets.FERN_API_DOCKERHUB_PASSWORD }} + - name: Run All Seed Tests uses: ./.github/actions/run-seed-process with: @@ -901,6 +919,12 @@ jobs: sparse-checkout: | .github/actions/run-seed-process + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: fernapi + password: ${{ secrets.FERN_API_DOCKERHUB_PASSWORD }} + - name: Run All Seed Tests uses: ./.github/actions/run-seed-process with: @@ -991,6 +1015,12 @@ jobs: sparse-checkout: | .github/actions/run-seed-process + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: fernapi + password: ${{ secrets.FERN_API_DOCKERHUB_PASSWORD }} + - name: Run All Seed Tests uses: ./.github/actions/run-seed-process with: diff --git a/generators/csharp/base/src/asIs/github-ci.yml b/generators/csharp/base/src/asIs/github-ci.yml index a9bbdae3376b..3791f98c9e2c 100644 --- a/generators/csharp/base/src/asIs/github-ci.yml +++ b/generators/csharp/base/src/asIs/github-ci.yml @@ -52,16 +52,6 @@ jobs: run: | dotnet tool restore - - name: Log in to Docker Hub - if: $\{{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} - uses: docker/login-action@v3 - with: - username: $\{{ env.DOCKER_USERNAME }} - password: $\{{ env.DOCKER_PASSWORD }} - env: - DOCKER_USERNAME: $\{{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: $\{{ secrets.DOCKER_PASSWORD }} - - name: Restore dependencies run: dotnet restore <%= testProjectFilePath %> diff --git a/generators/csharp/sdk/versions.yml b/generators/csharp/sdk/versions.yml index 933cbe6cee87..2a471346bbc6 100644 --- a/generators/csharp/sdk/versions.yml +++ b/generators/csharp/sdk/versions.yml @@ -1,12 +1,4 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json -- version: 2.11.3 - changelogEntry: - - summary: | - Add optional Docker Hub login step to generated CI workflow for wiremock tests to avoid rate limits. - type: chore - createdAt: "2025-12-09" - irVersion: 61 - - version: 2.11.2 changelogEntry: - summary: | diff --git a/generators/go/internal/writer/workflows/ci.yml b/generators/go/internal/writer/workflows/ci.yml index 49758769b191..56310d69624b 100644 --- a/generators/go/internal/writer/workflows/ci.yml +++ b/generators/go/internal/writer/workflows/ci.yml @@ -23,16 +23,6 @@ jobs: - name: Set up go uses: actions/setup-go@v4 - - name: Log in to Docker Hub - if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} - uses: docker/login-action@v3 - with: - username: ${{ env.DOCKER_USERNAME }} - password: ${{ env.DOCKER_PASSWORD }} - env: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - - name: Setup wiremock server run: | if [ -f wiremock/docker-compose.test.yml ]; then docker compose -f wiremock/docker-compose.test.yml down && docker compose -f wiremock/docker-compose.test.yml up -d; fi diff --git a/generators/go/sdk/versions.yml b/generators/go/sdk/versions.yml index dcd268e91fa5..a3166cb4497a 100644 --- a/generators/go/sdk/versions.yml +++ b/generators/go/sdk/versions.yml @@ -1,13 +1,5 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json -- version: 1.18.5 - changelogEntry: - - summary: | - Add optional Docker Hub login step to generated CI workflow for wiremock tests to avoid rate limits. - type: chore - createdAt: "2025-12-09" - irVersion: 60 - - version: 1.18.4 changelogEntry: - summary: | diff --git a/generators/php/base/src/asIs/github-ci.yml b/generators/php/base/src/asIs/github-ci.yml index 3f7c5a7a2f25..ba5836ae6967 100644 --- a/generators/php/base/src/asIs/github-ci.yml +++ b/generators/php/base/src/asIs/github-ci.yml @@ -39,16 +39,6 @@ jobs: with: php-version: "8.1" - - name: Log in to Docker Hub - if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} - uses: docker/login-action@v3 - with: - username: ${{ env.DOCKER_USERNAME }} - password: ${{ env.DOCKER_PASSWORD }} - env: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - - name: Install tools run: | composer install diff --git a/generators/php/sdk/versions.yml b/generators/php/sdk/versions.yml index 42ab631ed0a8..3bdeb2da09c9 100644 --- a/generators/php/sdk/versions.yml +++ b/generators/php/sdk/versions.yml @@ -1,13 +1,5 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json -- version: 1.25.1 - changelogEntry: - - summary: | - Add optional Docker Hub login step to generated CI workflow for wiremock tests to avoid rate limits. - type: chore - createdAt: "2025-12-09" - irVersion: 62 - - version: 1.25.0 changelogEntry: - summary: | diff --git a/generators/python/sdk/versions.yml b/generators/python/sdk/versions.yml index de9263541b52..04752babeb10 100644 --- a/generators/python/sdk/versions.yml +++ b/generators/python/sdk/versions.yml @@ -1,13 +1,5 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json # For unreleased changes, use unreleased.yml -- version: 4.43.1 - changelogEntry: - - summary: | - Add optional Docker Hub login step to generated CI workflow for wiremock tests to avoid rate limits. - type: chore - createdAt: "2025-12-09" - irVersion: 61 - - version: 4.43.0 changelogEntry: - summary: | diff --git a/generators/python/src/fern_python/cli/abstract_generator.py b/generators/python/src/fern_python/cli/abstract_generator.py index 8d89887949e6..8ac564d167a9 100644 --- a/generators/python/src/fern_python/cli/abstract_generator.py +++ b/generators/python/src/fern_python/cli/abstract_generator.py @@ -338,15 +338,6 @@ def _get_github_workflow_legacy(self, output_mode: GithubOutputMode, write_unit_ curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1 - name: Install dependencies run: poetry install - - name: Log in to Docker Hub - if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} - uses: docker/login-action@v3 - with: - username: ${{ env.DOCKER_USERNAME }} - password: ${{ env.DOCKER_PASSWORD }} - env: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} """ if write_unit_tests: workflow_yaml += """ @@ -432,15 +423,6 @@ def _get_github_workflow(self, output_mode: GithubOutputMode, write_unit_tests: curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1 - name: Install dependencies run: poetry install - - name: Log in to Docker Hub - if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} - uses: docker/login-action@v3 - with: - username: ${{ env.DOCKER_USERNAME }} - password: ${{ env.DOCKER_PASSWORD }} - env: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} """ if write_unit_tests: workflow_yaml += """ diff --git a/generators/rust/base/src/asIs/ci.yml b/generators/rust/base/src/asIs/ci.yml index 2a6309f126f0..4ce05aaa991e 100644 --- a/generators/rust/base/src/asIs/ci.yml +++ b/generators/rust/base/src/asIs/ci.yml @@ -39,16 +39,6 @@ jobs: - name: Set up Rust uses: actions-rust-lang/setup-rust-toolchain@v1 - - name: Log in to Docker Hub - if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} - uses: docker/login-action@v3 - with: - username: ${{ env.DOCKER_USERNAME }} - password: ${{ env.DOCKER_PASSWORD }} - env: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - - name: Test run: cargo test -{{PUBLISH_WORKFLOW}} +{{PUBLISH_WORKFLOW}} \ No newline at end of file diff --git a/generators/rust/sdk/versions.yml b/generators/rust/sdk/versions.yml index 819fb57d01b2..b4a36d379310 100644 --- a/generators/rust/sdk/versions.yml +++ b/generators/rust/sdk/versions.yml @@ -1,13 +1,5 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json -- version: 0.13.5 - changelogEntry: - - summary: | - Add optional Docker Hub login step to generated CI workflow for wiremock tests to avoid rate limits. - type: chore - createdAt: "2025-12-09" - irVersion: 61 - - version: 0.13.4 createdAt: "2025-12-02" changelogEntry: