diff --git a/.circleci/config.yml b/.circleci/config.yml
deleted file mode 100644
index d1c8c0ac51..0000000000
--- a/.circleci/config.yml
+++ /dev/null
@@ -1,140 +0,0 @@
-#
-# Copyright 2012-2020 The Feign Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
-# in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed under the License
-# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-# or implied. See the License for the specific language governing permissions and limitations under
-# the License.
-#
-
-# common executors
-executors:
- java:
- docker:
- - image: velo/toolchains-4-ci-builds:with-21
-
-# common commands
-commands:
- resolve-dependencies:
- description: 'Download and prepare all dependencies'
- steps:
- - run:
- name: 'Resolving Dependencies'
- command: |
- ./mvnw -ntp dependency:resolve-plugins go-offline:resolve-dependencies -DskipTests=true -B
- verify-formatting:
- steps:
- - run:
- name: 'Verify formatting'
- command: |
- scripts/no-git-changes.sh
- configure-gpg:
- steps:
- - run:
- name: 'Configure GPG keys'
- command: |
- echo -e "$GPG_KEY" | gpg --batch --no-tty --import --yes
- nexus-deploy:
- steps:
- - run:
- name: 'Deploy Core Modules Sonatype'
- command: |
- ./mvnw -ntp -nsu -s .circleci/settings.xml -P release -pl -:feign-benchmark -DskipTests=true deploy
-
-# our job defaults
-defaults: &defaults
- working_directory: ~/feign
- environment:
- # Customize the JVM maximum heap limit
- MAVEN_OPTS: -Xmx3200m
-
-# branch filters
-master-only: &master-only
- branches:
- only: master
-
-tags-only: &tags-only
- branches:
- ignore: /.*/
- tags:
- only: /.*/
-
-all-branches: &all-branches
- branches:
- ignore: master
- tags:
- ignore: /.*/
-
-version: 2.1
-
-jobs:
- test:
- executor:
- name: java
- <<: *defaults
- steps:
- - checkout
- - restore_cache:
- keys:
- - feign-dependencies-v2-{{ checksum "pom.xml" }}
- - feign-dependencies-v2-
- - resolve-dependencies
- - save_cache:
- paths:
- - ~/.m2/repository
- key: feign-dependencies-v2-{{ checksum "pom.xml" }}
- - run:
- name: 'Test'
- command: |
- ./mvnw -ntp -B verify
- - verify-formatting
-
- deploy:
- executor:
- name: java
- <<: *defaults
- steps:
- - checkout
- - restore_cache:
- keys:
- - feign-dependencies-v2-{{ checksum "pom.xml" }}
- - feign-dependencies-v2-
- - resolve-dependencies
- - configure-gpg
- - nexus-deploy
-
-workflows:
- version: 2
- build:
- jobs:
- - test:
- name: 'pr-build'
- filters:
- <<: *all-branches
-
- snapshot:
- jobs:
- - test:
- name: 'snapshot'
- filters:
- <<: *master-only
- - deploy:
- name: 'deploy snapshot'
- requires:
- - 'snapshot'
- context: Sonatype
- filters:
- <<: *master-only
-
- release:
- jobs:
- - deploy:
- name: 'release to maven central'
- context: Sonatype
- filters:
- <<: *tags-only
diff --git a/.circleci/settings.xml b/.github/files/settings.xml
similarity index 100%
rename from .circleci/settings.xml
rename to .github/files/settings.xml
diff --git a/.github/files/toolchains.xml b/.github/files/toolchains.xml
new file mode 100644
index 0000000000..7fb26e061e
--- /dev/null
+++ b/.github/files/toolchains.xml
@@ -0,0 +1,53 @@
+
+
+
+ jdk
+
+ 1.8
+
+
+ /home/runner/.sdkman/candidates/java/8.0.382-tem
+
+
+
+ jdk
+
+ 11
+
+
+ /home/runner/.sdkman/candidates/java/11.0.22-tem
+
+
+
+ jdk
+
+ 17
+
+
+ /home/runner/.sdkman/candidates/java/17.0.10-tem
+
+
+
+ jdk
+
+ 21
+
+
+ /home/runner/.sdkman/candidates/java/21.0.2-tem
+
+
+
\ No newline at end of file
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000000..120780560e
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,92 @@
+#
+# Copyright 2012-2020 The Feign Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+# in compliance with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software distributed under the License
+# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+# or implied. See the License for the specific language governing permissions and limitations under
+# the License.
+#
+name: Build
+
+on:
+ push:
+ branches:
+ - master
+ tags:
+ - '*' # Runs on all new tags
+ pull_request:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ timeout-minutes: 30
+ env:
+ # Customize the JVM maximum heap limit
+ MAVEN_OPTS: -Xmx3200m
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.event.pull_request.head.ref }}
+ repository: ${{ github.event.pull_request.head.repo.full_name }}
+
+ - name: Cache local Maven repository
+ uses: actions/cache@v3
+ continue-on-error: true
+ with:
+ path: ~/.m2
+ key: ${{ runner.os }}-maven-${{ matrix.language }} ${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-${{ matrix.language }}
+ ${{ runner.os }}-maven-
+
+ - name: Cache SDKMAN JDKs
+ uses: actions/cache@v4
+ with:
+ path: ~/.sdkman
+ key: sdkman-java-${{ runner.os }}-${{ hashFiles('~/.m2/toolchains.xml') }}
+ restore-keys: sdkman-java-${{ runner.os }}-
+
+ - name: Install SDKMAN!
+ run: |
+ if [ ! -d "$HOME/.sdkman" ]; then
+ curl -s "https://get.sdkman.io" | bash
+ fi
+ source "$HOME/.sdkman/bin/sdkman-init.sh"
+
+ - name: Install JDKs (8, 11, 17, 21)
+ run: |
+ source "$HOME/.sdkman/bin/sdkman-init.sh"
+ jdk_versions=("8.0.382-tem" "11.0.22-tem" "17.0.10-tem" "21.0.2-tem")
+ for jdk_version in "${jdk_versions[@]}"; do
+ if [ ! -d "$HOME/.sdkman/candidates/java/$jdk_version" ]; then
+ yes n | sdk install java "$jdk_version"
+ fi
+ done
+ sdk default java 21.0.2-tem
+
+ - name: Configure Maven Toolchain
+ run: |
+ mkdir -p ~/.m2
+ cp .github/files/toolchains.xml ~/.m2/toolchains.xml
+
+ - name: Download dependencies only
+ run: ./mvnw -ntp -B org.apache.maven.plugins:maven-dependency-plugin:3.8.1:go-offline de.qaware.maven:go-offline-maven-plugin:1.2.8:resolve-dependencies -fn
+
+ - name: Build
+ run: ./mvnw -ntp -B clean install
+
+ - name: Verify formatting
+ run: scripts/no-git-changes.sh
+
+ - name: Nexus deploy
+ if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')
+ run: |
+ cp .github/files/settings.xml ~/.m2/settings.xml
+ echo -e "$GPG_KEY" | gpg --batch --no-tty --import --yes
+ ./mvnw -ntp -nsu -P release -pl -:feign-benchmark -DskipTests=true deploy
diff --git a/.github/workflows/comment-pr.yml b/.github/workflows/comment-pr.yml
deleted file mode 100644
index 4aac84804a..0000000000
--- a/.github/workflows/comment-pr.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-# Description: This workflow is triggered when the `receive-pr` workflow completes to post suggestions on the PR.
-# Since this pull request has write permissions on the target repo, we should **NOT** execute any untrusted code.
-# https://securitylab.github.com/research/github-actions-preventing-pwn-requests/
----
-name: comment-pr
-
-on:
- workflow_run:
- workflows: ["receive-pr"]
- types:
- - completed
-
-jobs:
- post-suggestions:
- # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow-based-on-the-conclusion-of-another-workflow
- if: ${{ github.event.workflow_run.conclusion == 'success' }}
- runs-on: ubuntu-latest
- env:
- # https://docs.github.com/en/actions/reference/authentication-in-a-workflow#permissions-for-the-github_token
- ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- timeout-minutes: 10
- steps:
- - uses: actions/checkout@v4
- with:
- ref: ${{github.event.workflow_run.head_branch}}
- repository: ${{github.event.workflow_run.head_repository.full_name}}
-
- # Download the patch
- - uses: actions/download-artifact@v4
- with:
- name: patch
- github-token: ${{ secrets.GITHUB_TOKEN }}
- run-id: ${{ github.event.workflow_run.id }}
- - name: Apply patch
- run: |
- git apply git-diff.patch --allow-empty
- rm git-diff.patch
-
- # Download the PR number
- - uses: actions/download-artifact@v4
- with:
- name: pr_number
- github-token: ${{ secrets.GITHUB_TOKEN }}
- run-id: ${{ github.event.workflow_run.id }}
- - name: Read pr_number.txt
- run: |
- PR_NUMBER=$(cat pr_number.txt)
- echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_ENV
- rm pr_number.txt
-
- # Post suggestions as a comment on the PR
- - uses: googleapis/code-suggester@v4
- with:
- command: review
- pull_number: ${{ env.PR_NUMBER }}
- git_dir: '.'
diff --git a/.github/workflows/receive-pr.yml b/.github/workflows/receive-pr.yml
deleted file mode 100644
index 684c5cdea8..0000000000
--- a/.github/workflows/receive-pr.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-# Description: This workflow runs OpenRewrite recipes against opened pull request and upload the patch.
-# Since this pull request receives untrusted code, we should **NOT** have any secrets in the environment.
-# https://securitylab.github.com/research/github-actions-preventing-pwn-requests/
----
-name: receive-pr
-
-on:
- pull_request:
- types: [opened, synchronize]
- branches:
- - master
-
-concurrency:
- group: '${{ github.workflow }} @ ${{ github.ref }}'
- cancel-in-progress: true
-
-jobs:
- upload-patch:
- runs-on: ubuntu-latest
- timeout-minutes: 10
- steps:
- - uses: actions/checkout@v4
- with:
- ref: ${{github.event.pull_request.head.ref}}
- repository: ${{github.event.pull_request.head.repo.full_name}}
- - uses: actions/setup-java@v4
- with:
- java-version: '21'
- distribution: 'temurin'
- cache: 'maven'
- - name: Setup Develocity
- uses: gradle/develocity-actions/setup-maven@v1.2
- with:
- add-pr-comment: false
- develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
-
- # Capture the PR number
- # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow
- - name: Create pr_number.txt
- run: echo "${{ github.event.number }}" > pr_number.txt
- - uses: actions/upload-artifact@v4
- with:
- name: pr_number
- path: pr_number.txt
- - name: Remove pr_number.txt
- run: rm -f pr_number.txt
-
- # Execute recipes
- - name: Apply OpenRewrite recipes
- run: ./mvnw -Dtoolchain.skip=true -Dlicense.skip=true -DskipTests=true -P openrewrite clean install
-
- # Capture the diff
- - name: Create patch
- run: |
- git diff | tee git-diff.patch
- - uses: actions/upload-artifact@v4
- with:
- name: patch
- path: git-diff.patch
diff --git a/README.md b/README.md
index a2a1466564..3474f34e9d 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
# Feign simplifies the process of writing Java HTTP clients
[](https://gitter.im/OpenFeign/feign?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-[](https://circleci.com/gh/OpenFeign/feign/tree/master)
[](https://search.maven.org/artifact/io.github.openfeign/feign-core/)
Feign is a Java to HTTP client binder inspired by [Retrofit](https://github.com/square/retrofit), [JAXRS-2.0](https://jax-rs-spec.java.net/nonav/2.0/apidocs/index.html), and [WebSocket](http://www.oracle.com/technetwork/articles/java/jsr356-1937161.html). Feign's first goal was reducing the complexity of binding [Denominator](https://github.com/Netflix/Denominator) uniformly to HTTP APIs regardless of [ReSTfulness](http://www.slideshare.net/adrianfcole/99problems).
diff --git a/pom.xml b/pom.xml
index b19d0fb65c..1b39445ccd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -525,6 +525,13 @@
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit5.version}
+
+