From a41e6b319e870e8a545bb50fd9d9a8346297e083 Mon Sep 17 00:00:00 2001 From: Roberto Perez Alcolea Date: Wed, 3 Mar 2021 16:20:27 -0800 Subject: [PATCH 01/67] Upgrade nebula.netflixoss to replace bintray publication and update TravisCi secrets --- .gitignore | 2 ++ .travis.yml | 10 ++++++---- build.gradle | 4 ++-- buildViaTravis.sh | 8 +++++--- gradle/wrapper/gradle-wrapper.properties | 2 +- installViaTravis.sh | 17 ++++------------- secrets/signing-key.enc | Bin 0 -> 6800 bytes 7 files changed, 20 insertions(+), 23 deletions(-) create mode 100644 secrets/signing-key.enc diff --git a/.gitignore b/.gitignore index 6a85b5a3..707e3f36 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,5 @@ atlassian-ide-plugin.xml .settings .metadata +# publishing secrets +secrets/signing-key diff --git a/.travis.yml b/.travis.yml index fcad80f7..29c01ad0 100755 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,9 @@ cache: - "$HOME/.gradle/caches/" env: global: - - secure: iiM3vM0du9afTc+GaB7Yisx2Tll6uIewOIHAeyM14X4b/sJFSa7uP0kw6BcLw153KqaXj6hLuYS/xAZS91RwAkCyUxVFh5WgAYcUqkynmYcyVrfRTW2ZGpcgMtCUL2ZC00ROxDsYOmYZvW3mS3KirDSi4Exzpu/rqKBlgNlGpAfT2k9Rq0bpw4wbI5mOmO2ZbEw8cihi+ECo+Vs4uIdazNVP0Ra9CvBATviLSFrTZlTHoNiqTxN6a+2Lk7Lg7sAuVrh+oODl3Tez3LYQ23/GbC3uNiKb3CfmDQgZNP6QiSGZ2AnYwIASkCpffycndQpRww4CkHrbc9yDrpOV8xS97PW0/QjhuphPv694hApZxmJTaDQlUuWC05nMXPVhu4t7qhjalVD/8L+Gh03CN1ma5zsMY13gWk4cPPkPbIXgeAev8JYtvo3SDCA7D4Ti48PVwomxcKa2gkvZHVkArzNzAbHqQPB/enxbmdugLU6x0LCQvCynxcLmXLJOBKnrTfA5N/Upt1yWtZMNOt2eFxd0S26WQXM8+Q6x33hoDN3aV2hdtALgxq8+8qUVeynkltJZozeyPTOiXakOh6PwjiP15zsBnYKpM77FByWj7rIHoTcrXPY7OHKm3CvhaXlgg0btlA+uYuZlMWT3SlRUnOSrwvz8vhEs8ewivOiddhWl5fQ= - - secure: t3TDEBk6+vK10rItQMrzX6A/MbMByKInZVLmwxJHOjxk/q1rqpircDgwthvJk1qLhak/TqJN7CCZJ3Aax7owLWe3anMRzr0RHHpGPSc2gyv9SKBOrIqMlHer4mA08msDXCakaF1yqFamLmc0G0pqT9blWXZjqaX6Ow0bCsQHrlg+e4LBYGAbILlalOxUTwgtdBo05WOwSaFzInUKRe7nL17aM1zA42DZaPQWMUdky9a4jogk0jQ5OHUJtk+Db4QXKyX0Xf2OKUx99Le/7VGGYtP9F/PVm3u8Um5dteXzAPzaqSTOOdhQrjLtkHMOu1/dn/JpvCc4iiNBsy1yXX037jR19m2+hkPqm9x6e39uiUx0OZ4hVCVWEK2H6xiYXrIneyh9C7f5m6ppuDuLTWKRfBW1ZjRRav6qsSdXiieVQHZ3Cy0XwCKImxwYg8+WiHGyoJeGAWLecWJ66hT90uRNVyfy4Tr2eCByGDFM42BKhdlUwN6A52rDIeSL1l+DG5ZAGgzfEazstnPbe6K3bhUsRtaCXst90rdakV+zymoHOvcUW2/Exaib6ozp8UOJd+ZnK0i4RaFwkTdLwY4YE631ZOPRKA7mDIRWLsoFj0UnpZe28BK/L+vFSz1av2Ild/n9eeNCsIPX7/S+Pv2VEKpnz91mlR/+0xSre4gyX1knbzI= - - secure: FThW2CPBT9YnbsaJu4v4/N1YiVCxBI/3ZYlMO6zfeAalBBjhSwhovhK0wYTsJd+Qb+QxyLX935q2EQfjsXpbMayII0w0ONlFcQBHmAt9xDcaGBOrLYEmn7SlgaSQXa0OgP9JEOuVnY77G46CQ4OupkvexKfKKgfEgurhqV+9nwbPqUm3KGEBdXft9b1a32GvUbSOtIH9LzeXIFcQaVYv+z6rgX7exXy0jc/vefWbpr0e6AyavGHs8bf4T0kgxYDyBgITmQSf1el0oAKxn/UZV4vXH8efdI/mzYM6DAj8s0QryZqqUFlapE4yz6KSy6MQrSbH3WTp4qqXoTECVHVl4e+EP5o4NBNpv2MJr20EtBV31PrSdtaD5yIx0x5P0haa08KubgEzfXVWIBKLIWZLC93GhQsCzGPt1M8u3dHgSMdNJiD3VuWrpF5PYD1vlb1zzDXk9sAgKDO0X2SN9DYn7+O78BnARQNlndp4K+t954dl3NfnTtrDuHnxSDXnCVkZuEHwkD0bSDxh3duypiqaBYD9mgx4wffiQMAQEA/l1UgKGIUNtjRGhZeFDBXdnJ64qOqZ+oKAmL538zvJI85R0NgUbQQJKNnc3d8k3lsy2qOy3hQgglEIUKKf7OoRTIqOcCQf/qSEEwQUsLk4Vqu4REDznQKvm0wU6eEWaeNrW1E= - - secure: EHMFNebGZ22YIIw+pMTZMOaAS0LXnAAG2/zV3Lk0t5EQPqgxpoWIZd9JFAt5yQPBk6IxD+rbAhd8D6QA0RNxfdN1LQBdZkAL+m7I8XGftDIQTecaGxZpjmw0OwC+gBz6p7sFHlkNw54DO5dh+waW5ro3yd0dvNHRDzUzD7VNq41joKFqTSnKdZMiBDGBgbvPBG6MrNldl1Cpl5LhtGDmSdG2DSKuKJAuWUhwOC0ZJGruFHhJO/iHef6RwQR3BTBKqsiH4KeN5lit+UetmYZOhswJIghRpCIcgBNG7V873agKeAf1WbHB0OlQw/FqIzLfs51SHF+8easL2Jrcuk+T4Ritct6CE826Cp4JILn6NUpOWLMpS/1pyr39IFwmRO+pTDhaZ6Ff7jXztx4QY1nZi1hhDy/VvOzeeGy2PiYdUO88dq5lW2sfjvv6BUvrRR7DAiMDen+KxogDpf3jDQJ8etsVqRY28ln3Ewu+I6cW4+AGZ45+Lbg2LwJBiTIqfQa8kHmg2j0TWPk7L8EgVFveZWGlxdhnmco7obZ3J5UhrDSczLR667LfitDdDX49nEsYhM3mF0W28Bf1n6RzRO8ujZZItt5WEKQSTRqs6+5LrX0uGbQy2AQzxGB+SSOxk+zEIcIuQrmZ4U5ZLPSkmo1USdRvd19zHLuBBs0uGPHh4zM= + - secure: vZY8TDBuPceiSIY3dNuMZUTBTiV5UWGx6+h/lgXDHXeh2cNvmYByHVz5GAZGVQxkHH0myFYivVtR4IQHB+0vpGVGDmE6iMUlVh7GUwRt8PWavTdR90qUr+1WSx1SMEdu9ge/94BiJUJhyAlIY9N7wHAdSv6J0I3otIOenHk5QqBi7OG9i/BhgroV5eBZhS1dqJBPOGbRAUwl8yi9Xr1ECwm3nmPIOZUh14wMw4gKRMG0PadXmSJV0NbjWxYtHp6TNQ1q+zLWUEjQ4H+z/YgoswumzY6XSqQ1+p1vAQAfBTcgI3ICqYu3KunRCJLE5SyjRl6Tg+ZCQG4Kf9dNXFyC4xFrV2g/QekfsqlJAA5Co8dlPnstqVRTTGTYv5PYUGkNnPvh40AOQhGSbhRuh1hIYOm1YY0Sv4Bggf41hTqT90qnUUei8Uqi6Wt8DHjDrjP11C824fsWnpxTTgH/wb50yLnROjkrwf9NNPg1B6Br504zt6eQIzYIIouxPME+hE13Cl/u88Qxca5BiQF6xJ5qJeU9/INRaivZCUPrkckmkFOvGrr+73EGWXvJSvyWGUi7+n4MSVddXslmeVas5mcqucQh2ED/M5rTZatqIpTs65wdvZD1R+sCUdyR3aY2kaL7YjfX1DcF10IeZBpxmbKSM2aUuK1Lzz2Lcx4i5Z9X16o= + - secure: AnPI3Ze1nYUbyUgMugLyhP0muE6Ox/kSzpjI5vL2g2zIUbtBVHqkAenLmqHYOxfwFJLSgwBcqHACUhuDE+Kmu+E9ATehUaOflc+WtKiyYqaMnuZxEx9TIxmXoGyRv+QMQEv0328xzzEp/W9HAT3Z9DiqFFDdfSRkB5q+4GRM2Jr4BNjoKs7Iv3sNA+Yg0Sl85JpVw7yxPoS/puuXMq+Q0sz8fW77yLiLH6fogXp1auWkMd0QenkQZJqveYf2Djm56lixxFeyn28BO0qkHzpiJO349mdSoZ3RwdhtYyIrCVphs7IpELpdlcy5Xgh0muCJ+UPLflTQJDqfHJTy3tNkp8MCCW8q0LqYtH3uckVSlFbiKKnQ1ciHCzQN8qm3Oyzt3uNnNlmBM38SfuPmfvh5gbyZ0ouJjp5WBn/Jeb6JdpZPSODQYU4Um8ofIJplx3fSSZ4gzQY0K0UBeHL7LuETszikqwjfEPDz5giYRtQ04pxEgX5CyZAjlh/l2TOwozNiiumP0GEVghnuEAI33N/lhaofrmQXhbiv7LZ0PqtlorAxPLRs5ajXmzlMttxqGE6p3yM/dRUg6Cf/mLH7gxJMpqH3Gz7/V0fYgKJ6tiVtODDyi2ouRfTxuB5+LEs437Z4+963GsCmvmeCTwYkMewnoXnLwyLEzIwqN8cxcWH/26w= + - secure: xHs6fSqelyP71XsKzz9rh6XW7nmL0yMm+fyzxtiVAZL/YGdcCNn1BmVG1ek3+o5dAPuIv/+z/eoKOFXNrFCa0wpeBa/shoVCIc/UqUJ+urjgC8SRhiEqff6TAeC7v+ot8CtG3P0Ijq7Q3UEneuDK0sGsg829tL6b+X42mc+N+6y7K1g+/a8OenXufivXCcgevVUK3zcYlDkCXyDXCE6cMWQGBE6thpLGfk4NqBMtnfXysjVp0Jp7nOBCxY9xWqsd9YcNPR+XMYanZKqP8S3HqH4diK5neuJSzcuPFWSn9UK/uoHEbAeYA/8ZuKFnjpqgnQWeiHa5eu29LB3P4K5fEsb7FwqzFam+EjpgMDy/coxeQkArTWOdHe5Y/iT2U75WT9jRBFy+cKLYpfNZ0cPoHXIclP75MHXAPR3Bqg8TTuIkboPdDXRiCzm0N8L+m8yMXClxHJw/6DEtxhUD4jVYurMdobQELTNUJTV1FksipRBIOr4XmPHkbGNowC6NfFRyayY/ME1s/xfBQzeE1M1FgE3pJMuYy4u1AyWTpu+rcRGVNvL88Qa7GAxJbrllRLl+GSbqvh9iaUbMzgK5237ndQgQVCeN53NjXmJE3l7qNSkBZXCD4npB8wiLQHeIKqqjKibDgyarWhoOb3JRBc9rg3FcJombaMM7QEWdCDdt02g= + - secure: w2n84UZ1Ou77t4t0rvmsIbtryIomojxMaFEGRncQa+9C5tQD+/vMkW9d0ZyPAa+QG2M5QFhnXqtcE4oMIepdvh9URnBGxRJoKd0nsz15V00vG48DYL9MfoLqm9mi/9vCql7o38YSS1nWYrm4V227sR2xmDJCbey3zGSFXwUHalH8XR0lAKwdV5JEE/yp6b+MKSnZYapum/VQsNevDtYoWny2QzLsoU3buENszf7VLjCMCm0kXvV6/aZpqUYJXycwc37KH21Qc01dd1kKaEil5fGR5sCdTdmQTWN/eGlylbRMafMLMyZLN6XjBUhlsM+h4270sNvqJiMscyfa53e6iTqYabjjv/iQug1Aws9LIZRHA4PHJvZcLgt5PN0Lp9eLXThoyvtdStXRJVvz6beTtZe9qBq4gbigGJc/G9CVIVTUNYWr8xm9f1uiyvPvPkQ5RJNnnva218jAIW+CKkz2Eb6S7qhZeyorCfOq3IynvXJDofMH7CPGCsScQCNQdi6s3ut77HUaspFwsu4dRzRfJf8npYh5VrG06HSe2FxWu80fDf5qQKqrAl5mdPHduW3wGsColqiFYvVKcOhq38R1hBj2CnwDPXDXbl/YYpF/KrZV/DH5ZY5Qqoecx4jFsDPelP0vvAuoXQwUoq48e0RSRdjsQr+KPsrkcvYlSfgX4r0= + - secure: f4ZpqHxdyQLyCHh0eKXxt+R7CvsBuWR1MPhsd+YLb0VJ7B5ruysgm1pSMQSDXAYbE51P/sdodIqnZ4h8uJgzU2/10Qnn3RZgfkehTqexirlqMTGHYDZiWQCAbzZ+A6pHJGTv82x0iwMK7iFBnlpi+QUGoOh3lqftL9pIL1p/o5fIB4ksL70ICFSMbV7j1e6j34XcNPB4aH5f+iyWoFRcviH/TbUMXOdqK9jxiWpCcMOZYHY0W+mMOFthB29/vpwulJfWTFCGXeywO+hmKxRiSQ/WABCTPzIyaYvAtA/K6k+k6gQpaFASFfq4nKD0Y0Ri3si7yqUmRV/CSlG2nakw8gLHRLtBHbmtK21+PY78fUSKjuK9Qi2WVxymoHnHoshIzVJ4idjRjZjrAQzjJiP8g7zk07iiTpkPpfBk6swYFiM49zcU/IsZPKiqnqqCZKM0K0ZTANFaRe/vZvVd6t+akuW9xWs+r7+mMxnYNrFQPhRuWkGrG8ekXXLXx76Ajf9QIxM8hf8QgiEBJZ9XAE/0PKaa3/x0ODWJLJEg5fe8G+yi0A3B8ltGa+3pLji1esWgbYFl4exOTmeyaRoBJMge1GL8TjV5Cmaxto1VTxfa7OLPkCJg9DsWaQAkUKN6TclN7R5OV+1NvNujj0pmFsEjk510qznCIryPsLlVyvQwdyk= + - secure: Ey9s4F1UxpbU0Zf4dve9pgEY8rPfE1QQXipGoWynqpWT9YmfOTqHm5E44USyBDrXaucv6JmkR2/a00+RYKfJY/oOCzAjuiGRdCuBebsyRO5MkTVd/3DgeCtPwK0thPRKVF/SV+nKdT1XV4MzBF8ANnHQ/WJLUSxIuVg9560ssxoMLkkeq+TpA7L7rqhlHOdwEO2ECUCiI9lb6P2+YfeXK/6QGI8vFtB0Gju9XDYt9Twje8PTvGBB5sdeVSbgPN+dzzvJOMLbv7Zp6Bzv9fG4T0BeX1za8h0Agfzr3jFxnJEvcEf5GplTFBGymcoqWwJeMRJAU5AowDJxJIjZdF8Dts8DlXf3IcytruFor8WD3De12XmEu13VDvtu6VkMlWlA/RSet/ZSSBNLBLIkE4IJHfXZwIIYwwjdlI/tD7sNf+jQdtr3vOMTo6lpx22bd5mIQt0LhrKtjA64aexB93d/UTYySfsP2oPXjL+wwvRJnTiwSCIO4SXoSwuGJ1ayvKawRlPY9Qalu+pbJ+H2vUEbCJPmeD/hjF816zcNVrkiyz0XPNMt3bx+7Hqss/Zu1gJ6o7pGvJr70E2jTB8WAlma4MbDMxitMd6MRnX8VvgYKyT79V6LzcaAErnJKoEADImiqmFmio6u1mUeGNyO+ZVVKuDywfnVEFxmltsfc8+p+f0= diff --git a/build.gradle b/build.gradle index 5fe762ee..034820c7 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { } plugins { - id 'nebula.netflixoss' version '6.1.0' + id 'nebula.netflixoss' version '9.1.0' } // Establish version and status @@ -19,7 +19,7 @@ subprojects { group = "com.netflix.${githubProjectName}" repositories { - jcenter() + mavenCentral() maven { url 'https://jitpack.io' } } } diff --git a/buildViaTravis.sh b/buildViaTravis.sh index 879e34c6..36b9f97b 100755 --- a/buildViaTravis.sh +++ b/buildViaTravis.sh @@ -6,18 +6,20 @@ if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then ./gradlew build elif [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_TAG" == "" ]; then echo -e 'Build Branch with Snapshot => Branch ['$TRAVIS_BRANCH']' - ./gradlew -Prelease.travisci=true -PbintrayUser="${bintrayUser}" -PbintrayKey="${bintrayKey}" -PsonatypeUsername="${sonatypeUsername}" -PsonatypePassword="${sonatypePassword}" build snapshot --info --stacktrace + ./gradlew -Prelease.travisci=true -PnetflixOss.username="$NETFLIX_OSS_REPO_USERNAME" -PnetflixOss.password="$NETFLIX_OSS_REPO_PASSWORD" -Psonatype.signingPassword="$NETFLIX_OSS_SIGNING_PASSWORD" build snapshot elif [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_TAG" != "" ]; then echo -e 'Build Branch for Release => Branch ['$TRAVIS_BRANCH'] Tag ['$TRAVIS_TAG']' case "$TRAVIS_TAG" in *-rc\.*) - ./gradlew -Prelease.travisci=true -Prelease.useLastTag=true -PbintrayUser="${bintrayUser}" -PbintrayKey="${bintrayKey}" -PsonatypeUsername="${sonatypeUsername}" -PsonatypePassword="${sonatypePassword}" candidate --info --stacktrace + ./gradlew -Prelease.travisci=true -PnetflixOss.username="$NETFLIX_OSS_REPO_USERNAME" -PnetflixOss.password="$NETFLIX_OSS_REPO_PASSWORD" -Psonatype.signingPassword="$NETFLIX_OSS_SIGNING_PASSWORD" -Prelease.useLastTag=true candidate ;; *) - ./gradlew -Prelease.travisci=true -Prelease.useLastTag=true -PbintrayUser="${bintrayUser}" -PbintrayKey="${bintrayKey}" -PsonatypeUsername="${sonatypeUsername}" -PsonatypePassword="${sonatypePassword}" final --info --stacktrace + ./gradlew -Prelease.travisci=true -PnetflixOss.username="$NETFLIX_OSS_REPO_USERNAME" -PnetflixOss.password="$NETFLIX_OSS_REPO_PASSWORD" -Psonatype.username="$NETFLIX_OSS_SONATYPE_USERNAME" -Psonatype.password="$NETFLIX_OSS_SONATYPE_PASSWORD" -Psonatype.signingPassword="$NETFLIX_OSS_SIGNING_PASSWORD" -Prelease.useLastTag=true final ;; esac else echo -e 'WARN: Should not be here => Branch ['$TRAVIS_BRANCH'] Tag ['$TRAVIS_TAG'] Pull Request ['$TRAVIS_PULL_REQUEST']' ./gradlew build fi + + diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 290541c7..442d9132 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/installViaTravis.sh b/installViaTravis.sh index 4395f4f2..82cf1b88 100755 --- a/installViaTravis.sh +++ b/installViaTravis.sh @@ -1,16 +1,7 @@ #!/bin/bash -# This script will build dyno project. +# This script will build the project. -if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then - echo -e "Assemble Pull Request #$TRAVIS_PULL_REQUEST => Branch [$TRAVIS_BRANCH]" - ./gradlew assemble -elif [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_TAG" == "" ]; then - echo -e 'Assemble Branch with Snapshot => Branch ['$TRAVIS_BRANCH']' - ./gradlew -Prelease.travisci=true assemble -elif [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_TAG" != "" ]; then - echo -e 'Assemble Branch for Release => Branch ['$TRAVIS_BRANCH'] Tag ['$TRAVIS_TAG']' - ./gradlew -Prelease.travisci=true assemble -else - echo -e 'WARN: Should not be here => Branch ['$TRAVIS_BRANCH'] Tag ['$TRAVIS_TAG'] Pull Request ['$TRAVIS_PULL_REQUEST']' - ./gradlew assemble +if [ "$TRAVIS_SECURE_ENV_VARS" = "true" ]; then + echo "Decrypting publishing credentials" + openssl aes-256-cbc -k "$NETFLIX_OSS_SIGNING_FILE_PASSWORD" -in secrets/signing-key.enc -out secrets/signing-key -d fi diff --git a/secrets/signing-key.enc b/secrets/signing-key.enc new file mode 100644 index 0000000000000000000000000000000000000000..ab62c93edb6e054b68570ab482f23ab36206e4a6 GIT binary patch literal 6800 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 literal 0 HcmV?d00001 From 3f2f850d6909a0dc4723be243b172858f7847474 Mon Sep 17 00:00:00 2001 From: Roberto Perez Alcolea Date: Thu, 18 Mar 2021 14:26:37 -0700 Subject: [PATCH 02/67] Replace JCenter with Maven Central --- build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 034820c7..29d2072e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,9 @@ buildscript { repositories { - jcenter() + mavenCentral() + maven { + url = 'https://plugins.gradle.org/m2' + } } dependencies { classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.2' From 2dc46155d019ed119423d155719c9b8094c3c2f1 Mon Sep 17 00:00:00 2001 From: Roberto Perez Alcolea Date: Tue, 20 Apr 2021 17:08:23 -0700 Subject: [PATCH 03/67] Rotate publishing credentials --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 29c01ad0..3733481d 100755 --- a/.travis.yml +++ b/.travis.yml @@ -9,9 +9,9 @@ cache: - "$HOME/.gradle/caches/" env: global: - - secure: vZY8TDBuPceiSIY3dNuMZUTBTiV5UWGx6+h/lgXDHXeh2cNvmYByHVz5GAZGVQxkHH0myFYivVtR4IQHB+0vpGVGDmE6iMUlVh7GUwRt8PWavTdR90qUr+1WSx1SMEdu9ge/94BiJUJhyAlIY9N7wHAdSv6J0I3otIOenHk5QqBi7OG9i/BhgroV5eBZhS1dqJBPOGbRAUwl8yi9Xr1ECwm3nmPIOZUh14wMw4gKRMG0PadXmSJV0NbjWxYtHp6TNQ1q+zLWUEjQ4H+z/YgoswumzY6XSqQ1+p1vAQAfBTcgI3ICqYu3KunRCJLE5SyjRl6Tg+ZCQG4Kf9dNXFyC4xFrV2g/QekfsqlJAA5Co8dlPnstqVRTTGTYv5PYUGkNnPvh40AOQhGSbhRuh1hIYOm1YY0Sv4Bggf41hTqT90qnUUei8Uqi6Wt8DHjDrjP11C824fsWnpxTTgH/wb50yLnROjkrwf9NNPg1B6Br504zt6eQIzYIIouxPME+hE13Cl/u88Qxca5BiQF6xJ5qJeU9/INRaivZCUPrkckmkFOvGrr+73EGWXvJSvyWGUi7+n4MSVddXslmeVas5mcqucQh2ED/M5rTZatqIpTs65wdvZD1R+sCUdyR3aY2kaL7YjfX1DcF10IeZBpxmbKSM2aUuK1Lzz2Lcx4i5Z9X16o= - - secure: AnPI3Ze1nYUbyUgMugLyhP0muE6Ox/kSzpjI5vL2g2zIUbtBVHqkAenLmqHYOxfwFJLSgwBcqHACUhuDE+Kmu+E9ATehUaOflc+WtKiyYqaMnuZxEx9TIxmXoGyRv+QMQEv0328xzzEp/W9HAT3Z9DiqFFDdfSRkB5q+4GRM2Jr4BNjoKs7Iv3sNA+Yg0Sl85JpVw7yxPoS/puuXMq+Q0sz8fW77yLiLH6fogXp1auWkMd0QenkQZJqveYf2Djm56lixxFeyn28BO0qkHzpiJO349mdSoZ3RwdhtYyIrCVphs7IpELpdlcy5Xgh0muCJ+UPLflTQJDqfHJTy3tNkp8MCCW8q0LqYtH3uckVSlFbiKKnQ1ciHCzQN8qm3Oyzt3uNnNlmBM38SfuPmfvh5gbyZ0ouJjp5WBn/Jeb6JdpZPSODQYU4Um8ofIJplx3fSSZ4gzQY0K0UBeHL7LuETszikqwjfEPDz5giYRtQ04pxEgX5CyZAjlh/l2TOwozNiiumP0GEVghnuEAI33N/lhaofrmQXhbiv7LZ0PqtlorAxPLRs5ajXmzlMttxqGE6p3yM/dRUg6Cf/mLH7gxJMpqH3Gz7/V0fYgKJ6tiVtODDyi2ouRfTxuB5+LEs437Z4+963GsCmvmeCTwYkMewnoXnLwyLEzIwqN8cxcWH/26w= - - secure: xHs6fSqelyP71XsKzz9rh6XW7nmL0yMm+fyzxtiVAZL/YGdcCNn1BmVG1ek3+o5dAPuIv/+z/eoKOFXNrFCa0wpeBa/shoVCIc/UqUJ+urjgC8SRhiEqff6TAeC7v+ot8CtG3P0Ijq7Q3UEneuDK0sGsg829tL6b+X42mc+N+6y7K1g+/a8OenXufivXCcgevVUK3zcYlDkCXyDXCE6cMWQGBE6thpLGfk4NqBMtnfXysjVp0Jp7nOBCxY9xWqsd9YcNPR+XMYanZKqP8S3HqH4diK5neuJSzcuPFWSn9UK/uoHEbAeYA/8ZuKFnjpqgnQWeiHa5eu29LB3P4K5fEsb7FwqzFam+EjpgMDy/coxeQkArTWOdHe5Y/iT2U75WT9jRBFy+cKLYpfNZ0cPoHXIclP75MHXAPR3Bqg8TTuIkboPdDXRiCzm0N8L+m8yMXClxHJw/6DEtxhUD4jVYurMdobQELTNUJTV1FksipRBIOr4XmPHkbGNowC6NfFRyayY/ME1s/xfBQzeE1M1FgE3pJMuYy4u1AyWTpu+rcRGVNvL88Qa7GAxJbrllRLl+GSbqvh9iaUbMzgK5237ndQgQVCeN53NjXmJE3l7qNSkBZXCD4npB8wiLQHeIKqqjKibDgyarWhoOb3JRBc9rg3FcJombaMM7QEWdCDdt02g= - - secure: w2n84UZ1Ou77t4t0rvmsIbtryIomojxMaFEGRncQa+9C5tQD+/vMkW9d0ZyPAa+QG2M5QFhnXqtcE4oMIepdvh9URnBGxRJoKd0nsz15V00vG48DYL9MfoLqm9mi/9vCql7o38YSS1nWYrm4V227sR2xmDJCbey3zGSFXwUHalH8XR0lAKwdV5JEE/yp6b+MKSnZYapum/VQsNevDtYoWny2QzLsoU3buENszf7VLjCMCm0kXvV6/aZpqUYJXycwc37KH21Qc01dd1kKaEil5fGR5sCdTdmQTWN/eGlylbRMafMLMyZLN6XjBUhlsM+h4270sNvqJiMscyfa53e6iTqYabjjv/iQug1Aws9LIZRHA4PHJvZcLgt5PN0Lp9eLXThoyvtdStXRJVvz6beTtZe9qBq4gbigGJc/G9CVIVTUNYWr8xm9f1uiyvPvPkQ5RJNnnva218jAIW+CKkz2Eb6S7qhZeyorCfOq3IynvXJDofMH7CPGCsScQCNQdi6s3ut77HUaspFwsu4dRzRfJf8npYh5VrG06HSe2FxWu80fDf5qQKqrAl5mdPHduW3wGsColqiFYvVKcOhq38R1hBj2CnwDPXDXbl/YYpF/KrZV/DH5ZY5Qqoecx4jFsDPelP0vvAuoXQwUoq48e0RSRdjsQr+KPsrkcvYlSfgX4r0= - - secure: f4ZpqHxdyQLyCHh0eKXxt+R7CvsBuWR1MPhsd+YLb0VJ7B5ruysgm1pSMQSDXAYbE51P/sdodIqnZ4h8uJgzU2/10Qnn3RZgfkehTqexirlqMTGHYDZiWQCAbzZ+A6pHJGTv82x0iwMK7iFBnlpi+QUGoOh3lqftL9pIL1p/o5fIB4ksL70ICFSMbV7j1e6j34XcNPB4aH5f+iyWoFRcviH/TbUMXOdqK9jxiWpCcMOZYHY0W+mMOFthB29/vpwulJfWTFCGXeywO+hmKxRiSQ/WABCTPzIyaYvAtA/K6k+k6gQpaFASFfq4nKD0Y0Ri3si7yqUmRV/CSlG2nakw8gLHRLtBHbmtK21+PY78fUSKjuK9Qi2WVxymoHnHoshIzVJ4idjRjZjrAQzjJiP8g7zk07iiTpkPpfBk6swYFiM49zcU/IsZPKiqnqqCZKM0K0ZTANFaRe/vZvVd6t+akuW9xWs+r7+mMxnYNrFQPhRuWkGrG8ekXXLXx76Ajf9QIxM8hf8QgiEBJZ9XAE/0PKaa3/x0ODWJLJEg5fe8G+yi0A3B8ltGa+3pLji1esWgbYFl4exOTmeyaRoBJMge1GL8TjV5Cmaxto1VTxfa7OLPkCJg9DsWaQAkUKN6TclN7R5OV+1NvNujj0pmFsEjk510qznCIryPsLlVyvQwdyk= - - secure: Ey9s4F1UxpbU0Zf4dve9pgEY8rPfE1QQXipGoWynqpWT9YmfOTqHm5E44USyBDrXaucv6JmkR2/a00+RYKfJY/oOCzAjuiGRdCuBebsyRO5MkTVd/3DgeCtPwK0thPRKVF/SV+nKdT1XV4MzBF8ANnHQ/WJLUSxIuVg9560ssxoMLkkeq+TpA7L7rqhlHOdwEO2ECUCiI9lb6P2+YfeXK/6QGI8vFtB0Gju9XDYt9Twje8PTvGBB5sdeVSbgPN+dzzvJOMLbv7Zp6Bzv9fG4T0BeX1za8h0Agfzr3jFxnJEvcEf5GplTFBGymcoqWwJeMRJAU5AowDJxJIjZdF8Dts8DlXf3IcytruFor8WD3De12XmEu13VDvtu6VkMlWlA/RSet/ZSSBNLBLIkE4IJHfXZwIIYwwjdlI/tD7sNf+jQdtr3vOMTo6lpx22bd5mIQt0LhrKtjA64aexB93d/UTYySfsP2oPXjL+wwvRJnTiwSCIO4SXoSwuGJ1ayvKawRlPY9Qalu+pbJ+H2vUEbCJPmeD/hjF816zcNVrkiyz0XPNMt3bx+7Hqss/Zu1gJ6o7pGvJr70E2jTB8WAlma4MbDMxitMd6MRnX8VvgYKyT79V6LzcaAErnJKoEADImiqmFmio6u1mUeGNyO+ZVVKuDywfnVEFxmltsfc8+p+f0= + - secure: N+LrIuQEX0ytV2EkXXT7YV6kY06/K+diQ0UiNEozxA1LY9jOZ8pfscjz/z3DefTHVpYh1TEYW3D6xG2u/JJM45bZ83+JFC2vIoVmPg6Q/NNzqkDFgHTWgW78pWlfuhUjg/TMPRuoRAn+3FUcy+LRiUb1yoInGnLhvVdiQmo5qJjZ1NuWQSNU+20tBy4eEkVogco6aZlAtIbG4i5n+G7PDE1d4zs2mMfTyiUbTSDOUnMlOjBE6yKlS3/XjbXwNMPip9bEBMvsQ4wP0dtDlCQ+kn0Ud2OHaurRpxWBsiEB8OU4KWBmzw8mZmHqMvzfNgz3Nvgm4Z9W+1xSWF/6fafOuRsfaWxVB+/sBQENryIVIi9J6Z8iEegX4zj97PTknTg6fmBvkH8ABi6pR4Cq4X9lhaLqoO3ED/ujdvrLyU/nCs0emC9jPZtcf8BzmRk1CvxlixHfNFXqD8c06mX9Ro/GGhGMdm1w/0hwXaIq97h7CcVr7SKyiiQAOmoJaL8Q0xaxLJyKULXMby5BqZYHgeXOGV8uce3ZfiRECPTPf1ljkTCrs269bn8+KfSiTclkn5W1bYJQ/tIqRJe+1u3FdRDH8mexAn832ZkW9ofGLTil32DwX0YPvFI8Z4JLMg1mmhru9gBtQ3pptrypgTLqjAtqzIt9gJpfOVW115WW86CKxHE= + - secure: ZLqK3FI00WRkYY4mj1feA1J1rJwuU6LXWBjE7D1jqzFhIELdvNeR4CAnjfT3eRecP7cWueM0mb9mQPkpvy0Kw2/v4loD1FND42Z3fWsUMP+P4GbOVdzhz29BXb4LBRnzjA7LwlbDT0aXt9I22qOM9YkasyTKXmqz54sNecKM2iXzFywKqpR2W38Z3gEDbJ3H9Q6IqHNr/tXpR/X2GJUhiuE8ncKY0+KU424FrpXbES5uwNGP0W2BmcxsGOIDlQCmfC/7eUrsVtymSggJzP4PKcD5zSE5n90DP1xxWLQt2KloOOkJYYvL1iH5CjTUDOCwa6dm039DWHsI6SxAjXqaHlOvTRyZvfyVYF9ttSsyoyhdrZnGlKMu8fM7aD7ZUE+hBWuERPsvsX3nnRA43blMWxIRAQaFVIPArHTNild3rkSV3yO1ieh0axC3EYKfg2VcCkEz6cDqLcV3KU3Uot4e9KcAQtJ590QcoD/PENY5SZyPqiJSbP4ftIpT3JiItlKB/IbTHeHr8pxqB+I2f9G55iWjx64nScclwMwzmVAhJhfT2iQ3I0Kol+zmAZvIi5accCsMdkLIs1nsVOFi7qv647xXfniwfRx0kYhU0dw5twAZ9JozFCwqo7akKX6uCNwBrEXH2WJkAuB0nHUYXxexgAEF0hbgK3aZ0C9ioxddhc8= + - secure: rIapKZNZf0TEATf6Z54h4RJTxt1A+J2rlSDEofdsEe2Y+XbRVHsPpdra5/K736I4INtWEu/HoAOBtSc8CsQZxUqsNWrNuRqxaEOIqtTpSJnqCSLqYB8oxOZa7yVS2gM0SdINGt8+OuuSAlsQuy7AGimgap+5S9uX53BrveFic1z40rre5gzWJuYIq/NwVPGezHeAARmpwZCpGalIEA55zNdG92c/4LmCgSMtpM8T4g3lRxP+5Pu+7+3n1XccepLSqO61SpL8BaW2Png+Y5BQICDzMwNKG4QPfA6ERn2piS841ugvghxNyW71Fsh1s9SltzMmvfq9ihmLfGc2vn7mKBgAgrxvsdOuFJyDJ+y9IXxAp9ZElOYYfLFh9Vr+Z6s7Lu45Vk63giNe2y8s6C8PvU8EmCT5bW3S0F7ZI6304EZUOLLI0LUvpEZH7S9BGgJntXG9zWmV2sAsV5si3G91yMUjIv5ROgcWXSGgNnrumxuuLq2y2Hkl0+yEDvRPxkFwhLx9WXIF63OipEzOAfERvhIfD4b82hYfAAXMRM6MHFS9NCX20/elSaVDRyHOPY4Yk15BAE66wVjCl2gfDVUe98vuIXkJluBVN+xgl2Q61eS6OKbd0lXUapRhvh4CMimUs6SZmrl1aWsPc9V1M9CsGCPBWDtvNAuWunTzmAfweAE= + - secure: MK9DO0+2Yzp2Ty6/J4/VBwg0Sw61IykLexOr4SFpUqN2MROZXeCFHLWtWuNU91i93GalWguSPWpo/MysBF/8VNPFwdbVRUsoLkyr2Dm/Psq+x1/9TlfueSkrjVz8/5h0eM8y+dWD3tn6QpT5cw3g0ITl21jWRe7paHk3jUlSlBKDC4CBpKM3r1p7duZSBATXjNsvxa+hyP1wc8aa3R9ygkPb0YJaeG1+YXWqsqANgEbE02S0nNHIqCNWzboH3FNZVx6LC9bxQgUKWwm9b2RM4AKiqWYPkpWMPRSeIRMzAcfY8WBsTtEZAzzxIoR9Y8RrQJcCou37iLDjB4DMEcgnDB+/eYuW2X7uIicRSOCtw7kt4K5rzlMsnMEUl6wW0ZON8WWbB07CxCzbvTQbnKi5zmn34ofzVm/nAuqbQq5/pS9ktS+PZS3WHRrl0k9fYNLYRyZXM7qZTaiBuudJCZ8j62hQeTibTH9hNiiwdMRtplGxra43ya/zK8oxDGhvf4MoRNTkkMMi77VbB5XH2f/6o9OKmQO6OLBJNQT0l41i3+I5bj7H6Lgb6G0VMLMD7E7n67KVjC0u2LOuKp6g8E3pG5qr6u1xLRW+kvVv/UHHkM+AT1X8ztvPnP5jeyRsvHHliboygO0P1nnJUDbJ/8MZWEmD9bEhWawluBvgQI3xwbI= + - secure: TGsZUgSJzWZQRn5SD2dNOw/R6VoS8avVJXU4/3srqYO5dd/kMPGDZ0cO+YPqd9kR4V7snUw/83VaWAf8VUVOF6OgSiaIepqx/T3+jP3KLBB7eTEHAg9abyIO40ChpLP0x5pKCemzo+1tc4wfMocdE5LAZDZjX56j5R+mOPUU0kxldePM5j2u+BXDNAPzcJBR4/8K1YZJgH8SIwhXjJMtFLZgjLlbHnPpvL7IttcijtHlwLxVHfr95a5+RdUKAG7xfzIYSFFE/JMsPVu64wLRVzUMTBbHKqc3RIaMGGr2ywXrAmNFYXWbyuxgEIu7erebAzLORyucB0ahWO1dS/KZWvhFsPOR03t2REJpT4kb27pVlgUrJujXSLCigAbf/iC//pxKgWVdN+ujvroHsN7i/MLxni0h8Tvrmp44U2bjca8UgVRUZVEUjH5ywx52uICTpiN7nxSSiEikfkKOAKyuzao6jrCSG4jXy8Yel2aZOzXD0HhYw7j/gDkADnW4ASgDEy1+H1yKBk9vwA52bi1ewx+jeh0Yz0mJvsS1DbMv1bsMyQ1nB9u7VZosSPplyVm5rc8GRSY/1sLDL1LTaCwxaEA9049H6wfW6FZPQy7+2xSpMXagJaUyZiMM2qOdQ9Q0QFXB+kyrYUkU5RWZf7d1+bP0zIqdBlh4pyhoe1koG+0= + - secure: AqDdnI0DELcuamIzykos+pvF7Lb3n3dKmgy90Cfq7jGHZtLAl3EE7ShV8bSR6Djn/zqkf1mMwLu+6b+TsuTHa+89ACMvD2Tviu4+l8MqMx+fRmIeq6XPzhBCAjx9g3hKwo3RSxno7oSojL1VZVP7O26nIAS4PitOPjWUQZHg7fh2xEC65ZKUjl3cllrRFvHRdWS7EsB4s8Qq9AwtUuAgP03d+Rq6UOnpqozImnl908y/hB6DsJXr6GIG6tYJyuGiRgiDHujly7W826yJWS1oqpTOuGu9nHDJDCrsLXqI2iMOpJOpv93lRN4cYysO8qaecRMj/emVK+Xm6kajpLryuGqE4lI9q61vS3ucd7PvNcPlqpSnZqsXyhJ2Z2CyS44DfEsUu8JtTAj4aS906Ce3f33MgIGyTKUZEKU3QltMptFz5VUxLg63UwkApJnzBhbOUUUTZtxNtkXfvgvkA4PaTOdQtm9mp6ZrgXJjuVR14jWtru6PGs/3CQTMt1OhxTFXE4yOa/ZL5oIgdUxH4b3Xam+nh/enYZXyXft6tOY5Z2hKb54OJwctFBqybe3w7ohAaMTDXYweTcUWUu0++yLxGSV0cMyYuEAwTB9wtVR1b3kt3WLzEz2gJrFdWsgM+zaSFeeLZ1LtMjWqLFPUzzjkGtrWMdwr7cRLNSENNdfpYfY= From 0ab85413a32096ccc33a1eacd2bd88b5afa90bff Mon Sep 17 00:00:00 2001 From: epot Date: Tue, 8 Jun 2021 09:13:29 +0200 Subject: [PATCH 04/67] Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9be89ae9..d7444309 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ In this example a GRPC server is configured with a single adaptive limiter that // Create and configure a server builder ServerBuilder builder = ...; -builder.addService(ServerInterceptor.intercept(service, +builder.addService(ServerInterceptors.intercept(service, ConcurrencyLimitServerInterceptor.newBuilder( new GrpcServerLimiterBuilder() .partitionByHeader(GROUP_HEADER) From 1325b241bd682b330ac338385061151934b4a719 Mon Sep 17 00:00:00 2001 From: Jacob Territo Date: Wed, 23 Jun 2021 20:56:47 -0700 Subject: [PATCH 05/67] Corrected Error Message for Deprecated Gauge --- .../java/com/netflix/concurrency/limits/MetricRegistry.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/concurrency-limits-core/src/main/java/com/netflix/concurrency/limits/MetricRegistry.java b/concurrency-limits-core/src/main/java/com/netflix/concurrency/limits/MetricRegistry.java index e01b1b78..bb68f64a 100644 --- a/concurrency-limits-core/src/main/java/com/netflix/concurrency/limits/MetricRegistry.java +++ b/concurrency-limits-core/src/main/java/com/netflix/concurrency/limits/MetricRegistry.java @@ -59,7 +59,7 @@ default SampleListener distribution(String id, String... tagNameValuePairs) { */ @Deprecated default void registerGauge(String id, Supplier supplier, String... tagNameValuePairs) { - throw new UnsupportedOperationException("registerDistribution is deprecated"); + throw new UnsupportedOperationException("registerGauge is deprecated"); } /** From 2b382fa627f34e51e4bd20e37bcd55ac35e117eb Mon Sep 17 00:00:00 2001 From: Roberto Perez Alcolea Date: Mon, 16 Aug 2021 22:46:54 -0700 Subject: [PATCH 06/67] rotate TravisCI secrets --- .travis.yml | 12 ++++++------ secrets/signing-key.enc | Bin 6800 -> 6800 bytes 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3733481d..0af4d6ea 100755 --- a/.travis.yml +++ b/.travis.yml @@ -9,9 +9,9 @@ cache: - "$HOME/.gradle/caches/" env: global: - - secure: N+LrIuQEX0ytV2EkXXT7YV6kY06/K+diQ0UiNEozxA1LY9jOZ8pfscjz/z3DefTHVpYh1TEYW3D6xG2u/JJM45bZ83+JFC2vIoVmPg6Q/NNzqkDFgHTWgW78pWlfuhUjg/TMPRuoRAn+3FUcy+LRiUb1yoInGnLhvVdiQmo5qJjZ1NuWQSNU+20tBy4eEkVogco6aZlAtIbG4i5n+G7PDE1d4zs2mMfTyiUbTSDOUnMlOjBE6yKlS3/XjbXwNMPip9bEBMvsQ4wP0dtDlCQ+kn0Ud2OHaurRpxWBsiEB8OU4KWBmzw8mZmHqMvzfNgz3Nvgm4Z9W+1xSWF/6fafOuRsfaWxVB+/sBQENryIVIi9J6Z8iEegX4zj97PTknTg6fmBvkH8ABi6pR4Cq4X9lhaLqoO3ED/ujdvrLyU/nCs0emC9jPZtcf8BzmRk1CvxlixHfNFXqD8c06mX9Ro/GGhGMdm1w/0hwXaIq97h7CcVr7SKyiiQAOmoJaL8Q0xaxLJyKULXMby5BqZYHgeXOGV8uce3ZfiRECPTPf1ljkTCrs269bn8+KfSiTclkn5W1bYJQ/tIqRJe+1u3FdRDH8mexAn832ZkW9ofGLTil32DwX0YPvFI8Z4JLMg1mmhru9gBtQ3pptrypgTLqjAtqzIt9gJpfOVW115WW86CKxHE= - - secure: ZLqK3FI00WRkYY4mj1feA1J1rJwuU6LXWBjE7D1jqzFhIELdvNeR4CAnjfT3eRecP7cWueM0mb9mQPkpvy0Kw2/v4loD1FND42Z3fWsUMP+P4GbOVdzhz29BXb4LBRnzjA7LwlbDT0aXt9I22qOM9YkasyTKXmqz54sNecKM2iXzFywKqpR2W38Z3gEDbJ3H9Q6IqHNr/tXpR/X2GJUhiuE8ncKY0+KU424FrpXbES5uwNGP0W2BmcxsGOIDlQCmfC/7eUrsVtymSggJzP4PKcD5zSE5n90DP1xxWLQt2KloOOkJYYvL1iH5CjTUDOCwa6dm039DWHsI6SxAjXqaHlOvTRyZvfyVYF9ttSsyoyhdrZnGlKMu8fM7aD7ZUE+hBWuERPsvsX3nnRA43blMWxIRAQaFVIPArHTNild3rkSV3yO1ieh0axC3EYKfg2VcCkEz6cDqLcV3KU3Uot4e9KcAQtJ590QcoD/PENY5SZyPqiJSbP4ftIpT3JiItlKB/IbTHeHr8pxqB+I2f9G55iWjx64nScclwMwzmVAhJhfT2iQ3I0Kol+zmAZvIi5accCsMdkLIs1nsVOFi7qv647xXfniwfRx0kYhU0dw5twAZ9JozFCwqo7akKX6uCNwBrEXH2WJkAuB0nHUYXxexgAEF0hbgK3aZ0C9ioxddhc8= - - secure: rIapKZNZf0TEATf6Z54h4RJTxt1A+J2rlSDEofdsEe2Y+XbRVHsPpdra5/K736I4INtWEu/HoAOBtSc8CsQZxUqsNWrNuRqxaEOIqtTpSJnqCSLqYB8oxOZa7yVS2gM0SdINGt8+OuuSAlsQuy7AGimgap+5S9uX53BrveFic1z40rre5gzWJuYIq/NwVPGezHeAARmpwZCpGalIEA55zNdG92c/4LmCgSMtpM8T4g3lRxP+5Pu+7+3n1XccepLSqO61SpL8BaW2Png+Y5BQICDzMwNKG4QPfA6ERn2piS841ugvghxNyW71Fsh1s9SltzMmvfq9ihmLfGc2vn7mKBgAgrxvsdOuFJyDJ+y9IXxAp9ZElOYYfLFh9Vr+Z6s7Lu45Vk63giNe2y8s6C8PvU8EmCT5bW3S0F7ZI6304EZUOLLI0LUvpEZH7S9BGgJntXG9zWmV2sAsV5si3G91yMUjIv5ROgcWXSGgNnrumxuuLq2y2Hkl0+yEDvRPxkFwhLx9WXIF63OipEzOAfERvhIfD4b82hYfAAXMRM6MHFS9NCX20/elSaVDRyHOPY4Yk15BAE66wVjCl2gfDVUe98vuIXkJluBVN+xgl2Q61eS6OKbd0lXUapRhvh4CMimUs6SZmrl1aWsPc9V1M9CsGCPBWDtvNAuWunTzmAfweAE= - - secure: MK9DO0+2Yzp2Ty6/J4/VBwg0Sw61IykLexOr4SFpUqN2MROZXeCFHLWtWuNU91i93GalWguSPWpo/MysBF/8VNPFwdbVRUsoLkyr2Dm/Psq+x1/9TlfueSkrjVz8/5h0eM8y+dWD3tn6QpT5cw3g0ITl21jWRe7paHk3jUlSlBKDC4CBpKM3r1p7duZSBATXjNsvxa+hyP1wc8aa3R9ygkPb0YJaeG1+YXWqsqANgEbE02S0nNHIqCNWzboH3FNZVx6LC9bxQgUKWwm9b2RM4AKiqWYPkpWMPRSeIRMzAcfY8WBsTtEZAzzxIoR9Y8RrQJcCou37iLDjB4DMEcgnDB+/eYuW2X7uIicRSOCtw7kt4K5rzlMsnMEUl6wW0ZON8WWbB07CxCzbvTQbnKi5zmn34ofzVm/nAuqbQq5/pS9ktS+PZS3WHRrl0k9fYNLYRyZXM7qZTaiBuudJCZ8j62hQeTibTH9hNiiwdMRtplGxra43ya/zK8oxDGhvf4MoRNTkkMMi77VbB5XH2f/6o9OKmQO6OLBJNQT0l41i3+I5bj7H6Lgb6G0VMLMD7E7n67KVjC0u2LOuKp6g8E3pG5qr6u1xLRW+kvVv/UHHkM+AT1X8ztvPnP5jeyRsvHHliboygO0P1nnJUDbJ/8MZWEmD9bEhWawluBvgQI3xwbI= - - secure: TGsZUgSJzWZQRn5SD2dNOw/R6VoS8avVJXU4/3srqYO5dd/kMPGDZ0cO+YPqd9kR4V7snUw/83VaWAf8VUVOF6OgSiaIepqx/T3+jP3KLBB7eTEHAg9abyIO40ChpLP0x5pKCemzo+1tc4wfMocdE5LAZDZjX56j5R+mOPUU0kxldePM5j2u+BXDNAPzcJBR4/8K1YZJgH8SIwhXjJMtFLZgjLlbHnPpvL7IttcijtHlwLxVHfr95a5+RdUKAG7xfzIYSFFE/JMsPVu64wLRVzUMTBbHKqc3RIaMGGr2ywXrAmNFYXWbyuxgEIu7erebAzLORyucB0ahWO1dS/KZWvhFsPOR03t2REJpT4kb27pVlgUrJujXSLCigAbf/iC//pxKgWVdN+ujvroHsN7i/MLxni0h8Tvrmp44U2bjca8UgVRUZVEUjH5ywx52uICTpiN7nxSSiEikfkKOAKyuzao6jrCSG4jXy8Yel2aZOzXD0HhYw7j/gDkADnW4ASgDEy1+H1yKBk9vwA52bi1ewx+jeh0Yz0mJvsS1DbMv1bsMyQ1nB9u7VZosSPplyVm5rc8GRSY/1sLDL1LTaCwxaEA9049H6wfW6FZPQy7+2xSpMXagJaUyZiMM2qOdQ9Q0QFXB+kyrYUkU5RWZf7d1+bP0zIqdBlh4pyhoe1koG+0= - - secure: AqDdnI0DELcuamIzykos+pvF7Lb3n3dKmgy90Cfq7jGHZtLAl3EE7ShV8bSR6Djn/zqkf1mMwLu+6b+TsuTHa+89ACMvD2Tviu4+l8MqMx+fRmIeq6XPzhBCAjx9g3hKwo3RSxno7oSojL1VZVP7O26nIAS4PitOPjWUQZHg7fh2xEC65ZKUjl3cllrRFvHRdWS7EsB4s8Qq9AwtUuAgP03d+Rq6UOnpqozImnl908y/hB6DsJXr6GIG6tYJyuGiRgiDHujly7W826yJWS1oqpTOuGu9nHDJDCrsLXqI2iMOpJOpv93lRN4cYysO8qaecRMj/emVK+Xm6kajpLryuGqE4lI9q61vS3ucd7PvNcPlqpSnZqsXyhJ2Z2CyS44DfEsUu8JtTAj4aS906Ce3f33MgIGyTKUZEKU3QltMptFz5VUxLg63UwkApJnzBhbOUUUTZtxNtkXfvgvkA4PaTOdQtm9mp6ZrgXJjuVR14jWtru6PGs/3CQTMt1OhxTFXE4yOa/ZL5oIgdUxH4b3Xam+nh/enYZXyXft6tOY5Z2hKb54OJwctFBqybe3w7ohAaMTDXYweTcUWUu0++yLxGSV0cMyYuEAwTB9wtVR1b3kt3WLzEz2gJrFdWsgM+zaSFeeLZ1LtMjWqLFPUzzjkGtrWMdwr7cRLNSENNdfpYfY= + - secure: 1YUYVpk0yWLZtCWJyzxCx2Vd2uCWs0nRrzyOzmOw/69RLYpNz3MAL0KoFLUOgQR5VxqtuoTHhz61nqA8thfJoA/bou8ABWWzTlzZTZY2Y8l51qwakXENvLTAJpXi0b+QEpyKpQBNFDip9dArW2kKZf5kFMtF7mdnqyHgj+VNTMQB9Cw/BYRe86UWHrtaBjirkBsCrLLPgjQZ2S11b2P+AT3VWPE/y+VLjodhHETbm7qsaY0fRSW6hN8Bfk7Y4uvr9PAsk+QkIamUISb3VF4DuWMkfeqq2wPnwc4JX7o4oyIcncgXvg+I4cknIfckM1zbCSVTaGXjOTE8F2bYr9zC5uemYW6v4hn3JfiWvDnNt8DZrvL1NWRj4ievKM+G4815uIAhoteo66G70l0cRacHDmTNWqE9Du8pbQAe51am9YlHRFZBRg7w1xVDDefaCBpxylt6+WDCeMFSkDOf6J7MslME2FGfsNo/VJe/x1OGSuhgSeLeib6SA1tIxk2ChTuKWFOOW2MxjKFXs2ML+Bg2/x9ZIhUzMGFCSciuWEf3ppPUfGnd4HHVvNcZdo34SnYI6ZsWMlW+W74xS5jXQGr3fbwheGNPtXnP/nLQq0Q1b987/dlxMFVKIb8GT93mqEc1dWzcjhBPQ8evpypNHUTEBD93Pz8pQpUsT9mYb5ImcJg= + - secure: u/sLAKT5O968XHpuy4f5a7j06nU0+AAC5B+nTrYp5zibHfaUDf1Si/nWrEb7Cl06610f+oPIwcgjHmmh/RKk9+5G2tSXZtyT9IrFRR/o9VkxGKTFBQGmQ6kgTLvy0uJY8+d6VPZ5G5TMBVw3MwauJ7GqrvDFGipzn6cnZ+gmJQvakFnTdcKFi0PvlcIOILBCh/L4iQ2vQRiQjn1KfQkp6r7doPkTGkOsL68No/frhUW8MLlNS7rgaLzcXDGEQjs3VLtiCur+opTxe8dnIfqCGhQytXpvbU5yBCgC18yxqs+kJtV577Lz7Yb/S8WWb4Nq2eINY1RNLQfHiiS2eQ5UwVxlTdTNZ5QP/sU1gmXMfP4cr88pdvDrs74cUPAWn3s81BaRardnNYh7VIQuOAR1+jzO+iQsKDQTpGCJJBNa9l61mDt7nbeIvMOzZDhqLOZ8LnSBIMeZUzrY09yBYub87cUdmve2SW2qy8pQEOLkeS6J5xmQXP7gwPwrXuEiHHARS7beZTMZyULH690Szkbvsn8PuUVumRryDo6W/7FHqWY7nRJfqzIu0ZM/Kk4ZFQ+NrB745u3mPCF2QIK0Vc8P9HpWrePsikEdSm8VjrCeY4TZPjg0qNIW+DrZiHKRAmVybiefMiD9rRr605rRqOmJ6TPA8dTtTC454F1F9W2Ynco= + - secure: XxzGS6IpQh/V2RpZ+N95eIUyYlPcVdun3Se/7Uy/khNwlGOarAgWT4db4HrZ16AzImwZbFD+6LR2kdfBpYH0Mtg+b/ZqsUhDIjp+CPsPAwX0tiZ/iVCXmwIUE9iopoK7o1jUUn5tGZAy0spyJGmkwFqBR+ZicVYUApEdr6aeoEGdAthHUk7JXK//j0lO4D2TvMYuCw0kRsXkZbi6/gLBsNfC2voSqeufZeJrae2dPab423g+1NAaoqxGfTGu2T9RiNZ1E6LBOwk/eFc0C+V+4DtNwWkPOwPOqzbhFAMyQtKdMPdo88n97o+URU5VSJo6ALApCTAle/5Vh2ojbcaQc3keEZ4U8Y1sUfHUhFRT9yu3sIQl/jQvwYHtCN1XLf3rEy9XqRfC9mbv47SoByJoAHUYmZmVclKw7eA3ZADusWxyvO0SYC+q09JFPQ8lriu2HmmXimS/Gz0u56YHGnfELzCG5mk3nf/JR5PpRZha8jnUnSojXWzaUj7rcxnYxIdAmAx97dVrFn8Og41XbF1S5EALqT7tWtldVXT8v3J3Vzn0RCcc/q2rlEhYCyS/oJVmd8ajLRWMz+awm9ejeVlpoL9qCuaWnWpeKkRTcZzMm8n7Ih4Mo04bNJ/pA4vi58o14vxS8ZYj9MJngUEYkS8CxlOK/V3E1/JMJ2zAoUeWbgA= + - secure: kwhBPPNdr2hGNt3AEtHpDmhl70taznzH2IlVLWPUaR3jImszxg6xidZqAaZZ+s0BHDcdmJ0Hs/Can7rsozJyDJvz10/ybeRMlIve2ej/EKpP05zGtsOMSQSnzE3AbBIjBv+DPtmw6xV8LgBRjJkCRqSxLN4atikuIOr5yhCmG4fb2o6a6VoUBP9FK+GmJu/dtRsEzLmdNZmioUQfuHTDI8a402hMC0XUrPddrKFKBYlmLH82L2DC8uw6heWspRHCaQlD1YXA8QCxCS7SBFKdmFeBwDjYzcdJ9lGIo1RSrUYbGjb3gU72GOb9zx/Mox4+blvB6rD10/t42Uqg95XHNr3yQoHfjm1p15wTT7TZbx5MnI0M3mSUvrK1CKCicLZjmLVYaSNcREKpEfOHD7MFUyk2MfKaGRCULwL30Uvk6WEKwtfhB3OTcJHgbS1QvX0SwxjMbnpzfW8ttBugw64mOOwiGc4Oz9GeKu95EQXAkZhXpk4oJcRnhQu1n7SkKowFP12JgVBqcQMkscbkvG9j66Y/aLvZhJV55da3YRHBCKMrbUponKqRyTXJCN2BnWQS2fB64L7TulZ7uhqj8fVY+flGlWrJdYXcqB1T3mJzjT10pDWTjdHro9z1MN4WgnAlUy5jJBBpsJP0RBR5vKW01ytdcVtWznXEgWQcJ3k33bk= + - secure: 26NcdESqwwY2HJeCjdOHkKa3qqbsdeb3iB3fu40PAlLCqSgcSnSIcObsGKRPbj2/A1nWNmb+2ooHJby2ZbvKYGUnYeuVRiPkUlwBtvkxsI81eSRqPlB8YoLcdrHIIMS/bafw9IPiOM+y90NbpVDl/bE5rqgaH7wkdXAhhKaI1TAfACHP/NS1NbFyrUK9xjs4gkhK4TKZ7OtBdGQ6CNfXVwcBeqBRpX6r29J1VKEGa7nwqdo0UNgSlXEV6bc5YB/45we1oYcyGZli/+yM8WufceOC7wZywQq7DEoYWqK2sYylBFA0AJec0DbmWMLXMmCmIfctjrE8SViYkvioEv8PiiAvbzc/zqP4bNmiVKDCEVau4Q7/PkEedDmQOGiRbMN0dE3f98obUWnqQzBydyEg+ELdgx1yrLFjgtuDkFZ+BunEZLwcHCvGUMNl2HcAYCu8Mxu13TihFBn+9HCIV3/V7/hoP7JbhqZBoYgEis2V1Iea8xpmmEcjg/nDWrN2hJEctpouweeL5mhsrTyreGe73GF9u1ULF50qEMUAiKVjMiI8OvACM/SlnajZS1AU01k+or/bGvZES6j4lEZ2FRNWDMm8HdIsHW4iBaEKPlr0LELLYVWxgNwDs+baMDOoAD557LTGm96L3MTbAORW9MgcwjnMxRfI2KT2gvsDYBy8ZKs= + - secure: U9LkggNw4MvTCxGkLiJEsXo3DCibByUh9ztJjdTxBEWfpupxBtvkHNaGHOcDmWzmuDdUm9EVwhuA+swcXVDvCMSbCVQFtLNaTmpvAm0FaDdjkCZmYGoruQXs7rNB0pHv1eZ3WkBJSBgt8YWBmLpS+xzQMWyg33JV+JMpwKTqtez14A4yzWSsjLK5Nia3TerqF82vlItdzgwkoyl6ox+E1HRWROcqVW/B0rVRvGCfkOD6WlipliVRWtThV/WP+JF1yLOT0WDUe46MvQ3Qpvb+IgZbH4+O44EqUI4wrOUdkiLsRJBJieuGSf/M4vb9hlhmtUNc1+MDCLz+HMH8XGA9alsU1mMacM/o+/AQsHkYTgjUPqQC9fmM2QJsyEq+d6oIEruwOrqydMOjGykqdbD7jPt4F31Hh23otaWaRUMNEj917eXc8o9H6zsLirPg65LrVg2pqWiWdTaqc4w3KjyXXiTfKlInCqEb6xmnfO2ZQ3ojwmsJeTfYmQBhGfQtooL7rtQ0AdD9uJyoX/DZypRocEcutKCzPOq04Xs1cB/j2ROnhQDZOxynyqj/ND9gGyJW3o4s/rnfb+glVwzlQH5s/o7jPyo0x4RGtn2/ZvKqSOrVQyuYPS4W8qtammhi8kS2Kw9krAMPxNwSfQshxlITVRMTW2eGgxSHlpADr6LNsf8= diff --git a/secrets/signing-key.enc b/secrets/signing-key.enc index ab62c93edb6e054b68570ab482f23ab36206e4a6..e3e54605497b685d6c90af1f4f50ad8dd71441af 100644 GIT binary patch literal 6800 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 From e4de3eb03802432d465788e2bf5e114f627936bd Mon Sep 17 00:00:00 2001 From: Roberto Perez Alcolea Date: Tue, 17 Aug 2021 11:30:08 -0700 Subject: [PATCH 07/67] Remove TravisCI and use Github Actions --- .github/workflows/nebula-ci.yml | 45 +++++++++++++++++++++++ .github/workflows/nebula-publish.yml | 51 ++++++++++++++++++++++++++ .github/workflows/nebula-snapshot.yml | 37 +++++++++++++++++++ .travis.yml | 17 --------- buildViaTravis.sh | 25 ------------- installViaTravis.sh | 7 ---- secrets/signing-key.enc | Bin 6800 -> 0 bytes 7 files changed, 133 insertions(+), 49 deletions(-) create mode 100644 .github/workflows/nebula-ci.yml create mode 100644 .github/workflows/nebula-publish.yml create mode 100644 .github/workflows/nebula-snapshot.yml delete mode 100755 .travis.yml delete mode 100755 buildViaTravis.sh delete mode 100755 installViaTravis.sh delete mode 100644 secrets/signing-key.enc diff --git a/.github/workflows/nebula-ci.yml b/.github/workflows/nebula-ci.yml new file mode 100644 index 00000000..314ca6f5 --- /dev/null +++ b/.github/workflows/nebula-ci.yml @@ -0,0 +1,45 @@ +name: "CI" +on: + push: + branches: + - '*' + tags-ignore: + - '*' + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + # test against JDK 8 + java: [ 8 ] + name: CI with Java ${{ matrix.java }} + steps: + - uses: actions/checkout@v1 + - name: Setup jdk + uses: actions/setup-java@v1 + with: + java-version: ${{ matrix.java }} + - uses: actions/cache@v1 + id: gradle-cache + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ hashFiles('**/gradle/dependency-locks/*.lockfile') }} + restore-keys: | + - ${{ runner.os }}-gradle- + - uses: actions/cache@v1 + id: gradle-wrapper-cache + with: + path: ~/.gradle/wrapper + key: ${{ runner.os }}-gradlewrapper-${{ hashFiles('gradle/wrapper/*') }} + restore-keys: | + - ${{ runner.os }}-gradlewrapper- + - name: Build with Gradle + run: ./gradlew --info --stacktrace build + env: + CI_NAME: github_actions + CI_BUILD_NUMBER: ${{ github.sha }} + CI_BUILD_URL: 'https://github.com/${{ github.repository }}' + CI_BRANCH: ${{ github.ref }} + COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/nebula-publish.yml b/.github/workflows/nebula-publish.yml new file mode 100644 index 00000000..5e20218a --- /dev/null +++ b/.github/workflows/nebula-publish.yml @@ -0,0 +1,51 @@ +name: "Publish candidate/release to NetflixOSS and Maven Central" +on: + push: + tags: + - v*.*.* + - v*.*.*-rc.* + release: + types: + - published + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Setup jdk 8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - uses: actions/cache@v1 + id: gradle-cache + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ hashFiles('**/gradle/dependency-locks/*.lockfile') }} + restore-keys: | + - ${{ runner.os }}-gradle- + - uses: actions/cache@v1 + id: gradle-wrapper-cache + with: + path: ~/.gradle/wrapper + key: ${{ runner.os }}-gradlewrapper-${{ hashFiles('gradle/wrapper/*') }} + restore-keys: | + - ${{ runner.os }}-gradlewrapper- + - name: Publish candidate + if: contains(github.ref, '-rc.') + run: ./gradlew --info --stacktrace -Prelease.useLastTag=true candidate + env: + NETFLIX_OSS_SIGNING_KEY: ${{ secrets.ORG_SIGNING_KEY }} + NETFLIX_OSS_SIGNING_PASSWORD: ${{ secrets.ORG_SIGNING_PASSWORD }} + NETFLIX_OSS_REPO_USERNAME: ${{ secrets.ORG_NETFLIXOSS_USERNAME }} + NETFLIX_OSS_REPO_PASSWORD: ${{ secrets.ORG_NETFLIXOSS_PASSWORD }} + - name: Publish release + if: (!contains(github.ref, '-rc.')) + run: ./gradlew --info -Prelease.useLastTag=true final + env: + NETFLIX_OSS_SONATYPE_USERNAME: ${{ secrets.ORG_SONATYPE_USERNAME }} + NETFLIX_OSS_SONATYPE_PASSWORD: ${{ secrets.ORG_SONATYPE_PASSWORD }} + NETFLIX_OSS_SIGNING_KEY: ${{ secrets.ORG_SIGNING_KEY }} + NETFLIX_OSS_SIGNING_PASSWORD: ${{ secrets.ORG_SIGNING_PASSWORD }} + NETFLIX_OSS_REPO_USERNAME: ${{ secrets.ORG_NETFLIXOSS_USERNAME }} + NETFLIX_OSS_REPO_PASSWORD: ${{ secrets.ORG_NETFLIXOSS_PASSWORD }} diff --git a/.github/workflows/nebula-snapshot.yml b/.github/workflows/nebula-snapshot.yml new file mode 100644 index 00000000..b4ee7409 --- /dev/null +++ b/.github/workflows/nebula-snapshot.yml @@ -0,0 +1,37 @@ +name: "Publish snapshot to NetflixOSS and Maven Central" + +on: + push: + branches: + - master + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Set up JDK + uses: actions/setup-java@v1 + with: + java-version: 8 + - uses: actions/cache@v2 + id: gradle-cache + with: + path: | + ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} + - uses: actions/cache@v2 + id: gradle-wrapper-cache + with: + path: | + ~/.gradle/wrapper + key: ${{ runner.os }}-gradlewrapper-${{ hashFiles('gradle/wrapper/*') }} + - name: Build + run: ./gradlew build snapshot + env: + NETFLIX_OSS_SIGNING_KEY: ${{ secrets.ORG_SIGNING_KEY }} + NETFLIX_OSS_SIGNING_PASSWORD: ${{ secrets.ORG_SIGNING_PASSWORD }} + NETFLIX_OSS_REPO_USERNAME: ${{ secrets.ORG_NETFLIXOSS_USERNAME }} + NETFLIX_OSS_REPO_PASSWORD: ${{ secrets.ORG_NETFLIXOSS_PASSWORD }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100755 index 0af4d6ea..00000000 --- a/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -language: java -jdk: -- openjdk8 -sudo: false -install: "./installViaTravis.sh" -script: "./buildViaTravis.sh" -cache: - directories: - - "$HOME/.gradle/caches/" -env: - global: - - secure: 1YUYVpk0yWLZtCWJyzxCx2Vd2uCWs0nRrzyOzmOw/69RLYpNz3MAL0KoFLUOgQR5VxqtuoTHhz61nqA8thfJoA/bou8ABWWzTlzZTZY2Y8l51qwakXENvLTAJpXi0b+QEpyKpQBNFDip9dArW2kKZf5kFMtF7mdnqyHgj+VNTMQB9Cw/BYRe86UWHrtaBjirkBsCrLLPgjQZ2S11b2P+AT3VWPE/y+VLjodhHETbm7qsaY0fRSW6hN8Bfk7Y4uvr9PAsk+QkIamUISb3VF4DuWMkfeqq2wPnwc4JX7o4oyIcncgXvg+I4cknIfckM1zbCSVTaGXjOTE8F2bYr9zC5uemYW6v4hn3JfiWvDnNt8DZrvL1NWRj4ievKM+G4815uIAhoteo66G70l0cRacHDmTNWqE9Du8pbQAe51am9YlHRFZBRg7w1xVDDefaCBpxylt6+WDCeMFSkDOf6J7MslME2FGfsNo/VJe/x1OGSuhgSeLeib6SA1tIxk2ChTuKWFOOW2MxjKFXs2ML+Bg2/x9ZIhUzMGFCSciuWEf3ppPUfGnd4HHVvNcZdo34SnYI6ZsWMlW+W74xS5jXQGr3fbwheGNPtXnP/nLQq0Q1b987/dlxMFVKIb8GT93mqEc1dWzcjhBPQ8evpypNHUTEBD93Pz8pQpUsT9mYb5ImcJg= - - secure: u/sLAKT5O968XHpuy4f5a7j06nU0+AAC5B+nTrYp5zibHfaUDf1Si/nWrEb7Cl06610f+oPIwcgjHmmh/RKk9+5G2tSXZtyT9IrFRR/o9VkxGKTFBQGmQ6kgTLvy0uJY8+d6VPZ5G5TMBVw3MwauJ7GqrvDFGipzn6cnZ+gmJQvakFnTdcKFi0PvlcIOILBCh/L4iQ2vQRiQjn1KfQkp6r7doPkTGkOsL68No/frhUW8MLlNS7rgaLzcXDGEQjs3VLtiCur+opTxe8dnIfqCGhQytXpvbU5yBCgC18yxqs+kJtV577Lz7Yb/S8WWb4Nq2eINY1RNLQfHiiS2eQ5UwVxlTdTNZ5QP/sU1gmXMfP4cr88pdvDrs74cUPAWn3s81BaRardnNYh7VIQuOAR1+jzO+iQsKDQTpGCJJBNa9l61mDt7nbeIvMOzZDhqLOZ8LnSBIMeZUzrY09yBYub87cUdmve2SW2qy8pQEOLkeS6J5xmQXP7gwPwrXuEiHHARS7beZTMZyULH690Szkbvsn8PuUVumRryDo6W/7FHqWY7nRJfqzIu0ZM/Kk4ZFQ+NrB745u3mPCF2QIK0Vc8P9HpWrePsikEdSm8VjrCeY4TZPjg0qNIW+DrZiHKRAmVybiefMiD9rRr605rRqOmJ6TPA8dTtTC454F1F9W2Ynco= - - secure: XxzGS6IpQh/V2RpZ+N95eIUyYlPcVdun3Se/7Uy/khNwlGOarAgWT4db4HrZ16AzImwZbFD+6LR2kdfBpYH0Mtg+b/ZqsUhDIjp+CPsPAwX0tiZ/iVCXmwIUE9iopoK7o1jUUn5tGZAy0spyJGmkwFqBR+ZicVYUApEdr6aeoEGdAthHUk7JXK//j0lO4D2TvMYuCw0kRsXkZbi6/gLBsNfC2voSqeufZeJrae2dPab423g+1NAaoqxGfTGu2T9RiNZ1E6LBOwk/eFc0C+V+4DtNwWkPOwPOqzbhFAMyQtKdMPdo88n97o+URU5VSJo6ALApCTAle/5Vh2ojbcaQc3keEZ4U8Y1sUfHUhFRT9yu3sIQl/jQvwYHtCN1XLf3rEy9XqRfC9mbv47SoByJoAHUYmZmVclKw7eA3ZADusWxyvO0SYC+q09JFPQ8lriu2HmmXimS/Gz0u56YHGnfELzCG5mk3nf/JR5PpRZha8jnUnSojXWzaUj7rcxnYxIdAmAx97dVrFn8Og41XbF1S5EALqT7tWtldVXT8v3J3Vzn0RCcc/q2rlEhYCyS/oJVmd8ajLRWMz+awm9ejeVlpoL9qCuaWnWpeKkRTcZzMm8n7Ih4Mo04bNJ/pA4vi58o14vxS8ZYj9MJngUEYkS8CxlOK/V3E1/JMJ2zAoUeWbgA= - - secure: kwhBPPNdr2hGNt3AEtHpDmhl70taznzH2IlVLWPUaR3jImszxg6xidZqAaZZ+s0BHDcdmJ0Hs/Can7rsozJyDJvz10/ybeRMlIve2ej/EKpP05zGtsOMSQSnzE3AbBIjBv+DPtmw6xV8LgBRjJkCRqSxLN4atikuIOr5yhCmG4fb2o6a6VoUBP9FK+GmJu/dtRsEzLmdNZmioUQfuHTDI8a402hMC0XUrPddrKFKBYlmLH82L2DC8uw6heWspRHCaQlD1YXA8QCxCS7SBFKdmFeBwDjYzcdJ9lGIo1RSrUYbGjb3gU72GOb9zx/Mox4+blvB6rD10/t42Uqg95XHNr3yQoHfjm1p15wTT7TZbx5MnI0M3mSUvrK1CKCicLZjmLVYaSNcREKpEfOHD7MFUyk2MfKaGRCULwL30Uvk6WEKwtfhB3OTcJHgbS1QvX0SwxjMbnpzfW8ttBugw64mOOwiGc4Oz9GeKu95EQXAkZhXpk4oJcRnhQu1n7SkKowFP12JgVBqcQMkscbkvG9j66Y/aLvZhJV55da3YRHBCKMrbUponKqRyTXJCN2BnWQS2fB64L7TulZ7uhqj8fVY+flGlWrJdYXcqB1T3mJzjT10pDWTjdHro9z1MN4WgnAlUy5jJBBpsJP0RBR5vKW01ytdcVtWznXEgWQcJ3k33bk= - - secure: 26NcdESqwwY2HJeCjdOHkKa3qqbsdeb3iB3fu40PAlLCqSgcSnSIcObsGKRPbj2/A1nWNmb+2ooHJby2ZbvKYGUnYeuVRiPkUlwBtvkxsI81eSRqPlB8YoLcdrHIIMS/bafw9IPiOM+y90NbpVDl/bE5rqgaH7wkdXAhhKaI1TAfACHP/NS1NbFyrUK9xjs4gkhK4TKZ7OtBdGQ6CNfXVwcBeqBRpX6r29J1VKEGa7nwqdo0UNgSlXEV6bc5YB/45we1oYcyGZli/+yM8WufceOC7wZywQq7DEoYWqK2sYylBFA0AJec0DbmWMLXMmCmIfctjrE8SViYkvioEv8PiiAvbzc/zqP4bNmiVKDCEVau4Q7/PkEedDmQOGiRbMN0dE3f98obUWnqQzBydyEg+ELdgx1yrLFjgtuDkFZ+BunEZLwcHCvGUMNl2HcAYCu8Mxu13TihFBn+9HCIV3/V7/hoP7JbhqZBoYgEis2V1Iea8xpmmEcjg/nDWrN2hJEctpouweeL5mhsrTyreGe73GF9u1ULF50qEMUAiKVjMiI8OvACM/SlnajZS1AU01k+or/bGvZES6j4lEZ2FRNWDMm8HdIsHW4iBaEKPlr0LELLYVWxgNwDs+baMDOoAD557LTGm96L3MTbAORW9MgcwjnMxRfI2KT2gvsDYBy8ZKs= - - secure: U9LkggNw4MvTCxGkLiJEsXo3DCibByUh9ztJjdTxBEWfpupxBtvkHNaGHOcDmWzmuDdUm9EVwhuA+swcXVDvCMSbCVQFtLNaTmpvAm0FaDdjkCZmYGoruQXs7rNB0pHv1eZ3WkBJSBgt8YWBmLpS+xzQMWyg33JV+JMpwKTqtez14A4yzWSsjLK5Nia3TerqF82vlItdzgwkoyl6ox+E1HRWROcqVW/B0rVRvGCfkOD6WlipliVRWtThV/WP+JF1yLOT0WDUe46MvQ3Qpvb+IgZbH4+O44EqUI4wrOUdkiLsRJBJieuGSf/M4vb9hlhmtUNc1+MDCLz+HMH8XGA9alsU1mMacM/o+/AQsHkYTgjUPqQC9fmM2QJsyEq+d6oIEruwOrqydMOjGykqdbD7jPt4F31Hh23otaWaRUMNEj917eXc8o9H6zsLirPg65LrVg2pqWiWdTaqc4w3KjyXXiTfKlInCqEb6xmnfO2ZQ3ojwmsJeTfYmQBhGfQtooL7rtQ0AdD9uJyoX/DZypRocEcutKCzPOq04Xs1cB/j2ROnhQDZOxynyqj/ND9gGyJW3o4s/rnfb+glVwzlQH5s/o7jPyo0x4RGtn2/ZvKqSOrVQyuYPS4W8qtammhi8kS2Kw9krAMPxNwSfQshxlITVRMTW2eGgxSHlpADr6LNsf8= diff --git a/buildViaTravis.sh b/buildViaTravis.sh deleted file mode 100755 index 36b9f97b..00000000 --- a/buildViaTravis.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -# This script will build the project. - -if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then - echo -e "Build Pull Request #$TRAVIS_PULL_REQUEST => Branch [$TRAVIS_BRANCH]" - ./gradlew build -elif [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_TAG" == "" ]; then - echo -e 'Build Branch with Snapshot => Branch ['$TRAVIS_BRANCH']' - ./gradlew -Prelease.travisci=true -PnetflixOss.username="$NETFLIX_OSS_REPO_USERNAME" -PnetflixOss.password="$NETFLIX_OSS_REPO_PASSWORD" -Psonatype.signingPassword="$NETFLIX_OSS_SIGNING_PASSWORD" build snapshot -elif [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_TAG" != "" ]; then - echo -e 'Build Branch for Release => Branch ['$TRAVIS_BRANCH'] Tag ['$TRAVIS_TAG']' - case "$TRAVIS_TAG" in - *-rc\.*) - ./gradlew -Prelease.travisci=true -PnetflixOss.username="$NETFLIX_OSS_REPO_USERNAME" -PnetflixOss.password="$NETFLIX_OSS_REPO_PASSWORD" -Psonatype.signingPassword="$NETFLIX_OSS_SIGNING_PASSWORD" -Prelease.useLastTag=true candidate - ;; - *) - ./gradlew -Prelease.travisci=true -PnetflixOss.username="$NETFLIX_OSS_REPO_USERNAME" -PnetflixOss.password="$NETFLIX_OSS_REPO_PASSWORD" -Psonatype.username="$NETFLIX_OSS_SONATYPE_USERNAME" -Psonatype.password="$NETFLIX_OSS_SONATYPE_PASSWORD" -Psonatype.signingPassword="$NETFLIX_OSS_SIGNING_PASSWORD" -Prelease.useLastTag=true final - ;; - esac -else - echo -e 'WARN: Should not be here => Branch ['$TRAVIS_BRANCH'] Tag ['$TRAVIS_TAG'] Pull Request ['$TRAVIS_PULL_REQUEST']' - ./gradlew build -fi - - diff --git a/installViaTravis.sh b/installViaTravis.sh deleted file mode 100755 index 82cf1b88..00000000 --- a/installViaTravis.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -# This script will build the project. - -if [ "$TRAVIS_SECURE_ENV_VARS" = "true" ]; then - echo "Decrypting publishing credentials" - openssl aes-256-cbc -k "$NETFLIX_OSS_SIGNING_FILE_PASSWORD" -in secrets/signing-key.enc -out secrets/signing-key -d -fi diff --git a/secrets/signing-key.enc b/secrets/signing-key.enc deleted file mode 100644 index e3e54605497b685d6c90af1f4f50ad8dd71441af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6800 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 Date: Wed, 22 Dec 2021 14:26:16 -0800 Subject: [PATCH 08/67] don't drop by half for periodically. --- .../com/netflix/concurrency/limits/limit/AIMDLimit.java | 4 ---- .../netflix/concurrency/limits/limit/AIMDLimitTest.java | 8 ++++++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/concurrency-limits-core/src/main/java/com/netflix/concurrency/limits/limit/AIMDLimit.java b/concurrency-limits-core/src/main/java/com/netflix/concurrency/limits/limit/AIMDLimit.java index 940d13d6..7454d2d5 100644 --- a/concurrency-limits-core/src/main/java/com/netflix/concurrency/limits/limit/AIMDLimit.java +++ b/concurrency-limits-core/src/main/java/com/netflix/concurrency/limits/limit/AIMDLimit.java @@ -99,10 +99,6 @@ protected int _update(long startTime, long rtt, int inflight, boolean didDrop) { currentLimit = currentLimit + 1; } - if (currentLimit >= maxLimit) { - currentLimit = currentLimit / 2; - } - return Math.min(maxLimit, Math.max(minLimit, currentLimit)); } diff --git a/concurrency-limits-core/src/test/java/com/netflix/concurrency/limits/limit/AIMDLimitTest.java b/concurrency-limits-core/src/test/java/com/netflix/concurrency/limits/limit/AIMDLimitTest.java index d4379c57..2224aa8d 100644 --- a/concurrency-limits-core/src/test/java/com/netflix/concurrency/limits/limit/AIMDLimitTest.java +++ b/concurrency-limits-core/src/test/java/com/netflix/concurrency/limits/limit/AIMDLimitTest.java @@ -25,4 +25,12 @@ public void decreaseOnDrops() { limiter.onSample(0, 0, 0, true); Assert.assertEquals(27, limiter.getLimit()); } + + @Test + public void successOverflow() { + AIMDLimit limiter = AIMDLimit.newBuilder().initialLimit(21).maxLimit(21).minLimit(0).build(); + limiter.onSample(0, TimeUnit.MILLISECONDS.toNanos(1), 10, false); + // after success limit should still be at the max. + Assert.assertEquals(21, limiter.getLimit()); + } } From 2e59b07e029fb4634919ce130dc197991db21fbd Mon Sep 17 00:00:00 2001 From: Benjamin Fedorka Date: Thu, 18 Aug 2022 19:40:12 -0400 Subject: [PATCH 09/67] Updaate gradle scopes --- build.gradle | 1 + concurrency-limits-core/build.gradle | 8 ++++---- concurrency-limits-grpc/build.gradle | 17 +++++++++-------- concurrency-limits-servlet/build.gradle | 16 ++++++++-------- concurrency-limits-spectator/build.gradle | 7 ++++--- 5 files changed, 26 insertions(+), 23 deletions(-) diff --git a/build.gradle b/build.gradle index 29d2072e..d3aac3ae 100644 --- a/build.gradle +++ b/build.gradle @@ -19,6 +19,7 @@ ext.githubProjectName = rootProject.name subprojects { apply plugin: 'nebula.netflixoss' + apply plugin: 'java-library' group = "com.netflix.${githubProjectName}" repositories { diff --git a/concurrency-limits-core/build.gradle b/concurrency-limits-core/build.gradle index 411a453c..68ab97c5 100644 --- a/concurrency-limits-core/build.gradle +++ b/concurrency-limits-core/build.gradle @@ -5,10 +5,10 @@ plugins { sourceCompatibility = JavaVersion.VERSION_1_8 dependencies { - compile "org.slf4j:slf4j-api:1.7.+" + implementation "org.slf4j:slf4j-api:1.7.+" - testCompile 'junit:junit-dep:4.10' - testCompile "org.slf4j:slf4j-log4j12:1.7.+" + testImplementation 'junit:junit-dep:4.10' + testImplementation "org.slf4j:slf4j-log4j12:1.7.+" - testCompile 'com.github.kevinmost:junit-retry-rule:cbdd972d7c' + testImplementation 'com.github.kevinmost:junit-retry-rule:cbdd972d7c' } diff --git a/concurrency-limits-grpc/build.gradle b/concurrency-limits-grpc/build.gradle index be045bd4..f9917aa2 100644 --- a/concurrency-limits-grpc/build.gradle +++ b/concurrency-limits-grpc/build.gradle @@ -5,16 +5,17 @@ plugins { sourceCompatibility = JavaVersion.VERSION_1_8 dependencies { - compile project(":concurrency-limits-core") + implementation "org.slf4j:slf4j-api:1.7.+" + implementation project(":concurrency-limits-core") compileOnly "io.grpc:grpc-core:1.9.0" - testCompile project(":concurrency-limits-spectator") + testImplementation project(":concurrency-limits-spectator") - testCompile "org.mockito:mockito-core:1.+" - testCompile "io.grpc:grpc-netty:1.9.0" - testCompile "io.grpc:grpc-stub:1.9.0" - testCompile "junit:junit-dep:4.10" - testCompile "org.slf4j:slf4j-log4j12:1.7.+" - testCompile "org.apache.commons:commons-math3:3.6.1" + testImplementation "org.mockito:mockito-core:1.+" + testImplementation "io.grpc:grpc-netty:1.9.0" + testImplementation "io.grpc:grpc-stub:1.9.0" + testImplementation "junit:junit-dep:4.10" + testImplementation "org.slf4j:slf4j-log4j12:1.7.+" + testImplementation "org.apache.commons:commons-math3:3.6.1" } diff --git a/concurrency-limits-servlet/build.gradle b/concurrency-limits-servlet/build.gradle index 3e1bf140..76214dd7 100644 --- a/concurrency-limits-servlet/build.gradle +++ b/concurrency-limits-servlet/build.gradle @@ -5,13 +5,13 @@ plugins { sourceCompatibility = JavaVersion.VERSION_1_8 dependencies { - compile project(":concurrency-limits-core") - compile "javax.servlet:javax.servlet-api:3.1.0" - compile "org.slf4j:slf4j-api:1.7.+" + api project(":concurrency-limits-core") + compileOnly "javax.servlet:javax.servlet-api:3.1.0" + implementation "org.slf4j:slf4j-api:1.7.+" - testCompile "org.mockito:mockito-core:1.+" - testCompile "org.slf4j:slf4j-log4j12:1.7.+" - testCompile "org.eclipse.jetty:jetty-server:9.4.+" - testCompile "org.eclipse.jetty:jetty-servlet:9.4.+" - testCompile "junit:junit-dep:4.10" + testImplementation "org.mockito:mockito-core:1.+" + testImplementation "org.slf4j:slf4j-log4j12:1.7.+" + testImplementation "org.eclipse.jetty:jetty-server:9.4.+" + testImplementation "org.eclipse.jetty:jetty-servlet:9.4.+" + testImplementation "junit:junit-dep:4.10" } diff --git a/concurrency-limits-spectator/build.gradle b/concurrency-limits-spectator/build.gradle index 002880bf..e6240f82 100644 --- a/concurrency-limits-spectator/build.gradle +++ b/concurrency-limits-spectator/build.gradle @@ -5,9 +5,10 @@ plugins { sourceCompatibility = JavaVersion.VERSION_1_8 dependencies { - compile project(":concurrency-limits-core") + implementation project(":concurrency-limits-core") - compile 'com.netflix.spectator:spectator-api:0.+' + api 'com.netflix.spectator:spectator-api:0.+' + implementation "org.slf4j:slf4j-api:1.7.+" - testCompile "junit:junit-dep:4.10" + testImplementation "junit:junit-dep:4.10" } From d76ccdbcff635bbacd78afce675681fc6f655719 Mon Sep 17 00:00:00 2001 From: Benjamin Fedorka Date: Mon, 22 Aug 2022 11:41:01 -0400 Subject: [PATCH 10/67] Update gradle and Nebula --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 56177 -> 60756 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 286 ++++++++++++++--------- gradlew.bat | 55 +++-- 5 files changed, 210 insertions(+), 135 deletions(-) diff --git a/build.gradle b/build.gradle index d3aac3ae..0628d25e 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ buildscript { } plugins { - id 'nebula.netflixoss' version '9.1.0' + id 'nebula.netflixoss' version '10.6.0' } // Establish version and status diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 94336fcae912db8a11d55634156fa011f4686124..249e5832f090a2944b7473328c07c9755baa3196 100644 GIT binary patch delta 52556 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