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 [![Join the chat at https://gitter.im/OpenFeign/feign](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/OpenFeign/feign?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -[![CircleCI](https://circleci.com/gh/OpenFeign/feign/tree/master.svg?style=svg)](https://circleci.com/gh/OpenFeign/feign/tree/master) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.github.openfeign/feign-core/badge.png)](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} + +