diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 09807ad21f1..b1bb043c67d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,11 +1,11 @@ name: CI -on: +on: push: - branches: + branches: - master pull_request: - branches: + branches: - master schedule: - cron: "0 0 * * 1" @@ -74,7 +74,7 @@ jobs: java-version: 1.6 architecture: x64 - name: Build project - run: ./mvnw -s nossl.settings.xml verify -Pintegration -Pjava6 + run: ./mvnw -s .mvn/nossl.settings.xml verify -Pintegration -Pjava6 openj9-supported: name: OpenJ9 (supported) strategy: @@ -103,11 +103,32 @@ jobs: if: github.event_name == 'push' steps: - uses: actions/checkout@v1 - with: - fetch-depth: 1 - uses: actions/setup-java@v1 with: java-version: 8 architecture: x64 - name: Build project run: ./mvnw jacoco:prepare-agent verify jacoco:report coveralls:report -DrepoToken=${{ secrets.coveralls }} -Pintegration + release: + name: Release new version + runs-on: ubuntu-18.04 + needs: [coverage] + if: github.event_name == 'push' + steps: + - uses: actions/checkout@v1 + with: + ref: master + - name: Consider release + id: release + run: echo "##[set-output name=release;]$(git log --format=%B -n 1 | grep ^\[release\] | wc -l)" + - uses: actions/setup-java@v1 + if: steps.release.outputs.release > 0 + with: + java-version: 8 + architecture: x64 + - name: Publish new version + if: steps.release.outputs.release > 0 + run: | + echo "${{ secrets.gpg_secret }}" | gpg --batch --import + export GPG_TTY=$(tty) + ./mvnw -B -s .mvn/release.settings.xml release:prepare release:perform -Drepository.url=https://${GITHUB_ACTOR}:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git -Dbintray.username=raphw -Dbintray.password=${{ secrets.bintray_password }} -Dgpg.passphrase=${{ secrets.gpg_passphrase }} -Dgpg.keyname=B4AC8CDC141AF0AE468D16921DA784CCB5C46DD5 -Dgradle.key=${{ secrets.gradle_key }} -Dgradle.secret=${{ secrets.gradle_secret }} diff --git a/.mvn/A1039E8B.asc b/.mvn/A1039E8B.asc new file mode 100644 index 00000000000..fdfaeaace2e --- /dev/null +++ b/.mvn/A1039E8B.asc @@ -0,0 +1,65 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +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 +=iys3 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/nossl.settings.xml b/.mvn/nossl.settings.xml similarity index 100% rename from nossl.settings.xml rename to .mvn/nossl.settings.xml diff --git a/.mvn/release.settings.xml b/.mvn/release.settings.xml new file mode 100644 index 00000000000..d7761347d9f --- /dev/null +++ b/.mvn/release.settings.xml @@ -0,0 +1,23 @@ + + + + + gradle + + ${gradle.key} + ${gradle.secret} + + + + + + gpg.passphrase + ${gpg.passphrase} + + + bintray + ${bintray.username} + ${bintray.password} + + + diff --git a/README.md b/README.md index 991f30a4190..74056004f2c 100644 --- a/README.md +++ b/README.md @@ -253,7 +253,9 @@ Byte Buddy is licensed under the liberal and business-friendly [*Apache Licence, Version 2.0*](https://www.apache.org/licenses/LICENSE-2.0.html) and is freely available on GitHub. Additionally, the *byte-buddy* distribution bundles ASM which is released under [a 3-clause BSD license](https://asm.ow2.io/license.html). -Byte Buddy is further to the repositories of Maven Central and on JCenter. The project is built +Byte Buddy binaries are published to the repositories of Maven Central and on JCenter. The artifacts signatures can be validated against [this PGP public key](https://keys.openpgp.org/search?q=rafael.wth@gmail.com) beginning with Byte Buddy 1.10.3. Older versions can be validated against [this older and weaker certificate](https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xf42b96b8648b5c4a1c43a62fbb2914c1fa0811c3). + +The project is built using Maven. From your shell, cloning and building the project would go something like this: diff --git a/byte-buddy-agent/pom.xml b/byte-buddy-agent/pom.xml index 628ec58a881..ec340781423 100644 --- a/byte-buddy-agent/pom.xml +++ b/byte-buddy-agent/pom.xml @@ -5,7 +5,7 @@ byte-buddy-parent net.bytebuddy - 1.10.3-SNAPSHOT + 1.10.4-SNAPSHOT byte-buddy-agent diff --git a/byte-buddy-agent/src/main/java/net/bytebuddy/agent/ByteBuddyAgent.java b/byte-buddy-agent/src/main/java/net/bytebuddy/agent/ByteBuddyAgent.java index 5232a717b70..cbef28dfe85 100644 --- a/byte-buddy-agent/src/main/java/net/bytebuddy/agent/ByteBuddyAgent.java +++ b/byte-buddy-agent/src/main/java/net/bytebuddy/agent/ByteBuddyAgent.java @@ -656,9 +656,9 @@ private static void installExternal(AttachmentProvider.Accessor.ExternalAttachme for (File jar : externalAttachment.getClassPath()) { classPath.append(File.pathSeparatorChar).append(quote(jar.getCanonicalPath())); } - if (new ProcessBuilder(quote(System.getProperty(JAVA_HOME) + if (new ProcessBuilder(System.getProperty(JAVA_HOME) + File.separatorChar + "bin" - + File.separatorChar + (System.getProperty(OS_NAME, "").toLowerCase(Locale.US).contains("windows") ? "java.exe" : "java")), + + File.separatorChar + (System.getProperty(OS_NAME, "").toLowerCase(Locale.US).contains("windows") ? "java.exe" : "java"), CLASS_PATH_ARGUMENT, classPath.toString(), Attacher.class.getName(), diff --git a/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java b/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java index 30b210ed546..ae6f66c2a9c 100644 --- a/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java +++ b/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java @@ -2019,7 +2019,8 @@ public int getOwnerIdOf(File file) { try { // The binding for 'stat' is very platform dependant. To avoid the complexity of binding the correct method, // stat is called as a separate command. This is less efficient but more portable. - Process process = Runtime.getRuntime().exec("stat -c=%u " + file.getAbsolutePath()); + String statUserSwitch = Platform.isMac() ? "-f" : "-c"; + Process process = Runtime.getRuntime().exec("stat " + statUserSwitch + " %u " + file.getAbsolutePath()); int attempts = this.attempts; boolean exited = false; String line = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8")).readLine(); @@ -2043,7 +2044,7 @@ public int getOwnerIdOf(File file) { process.destroy(); throw new IllegalStateException("Command for stat did not exit in time"); } - return Integer.parseInt(line.substring(1)); + return Integer.parseInt(line); } catch (IOException exception) { throw new IllegalStateException("Unable to execute stat command", exception); } @@ -2091,7 +2092,8 @@ private void notifySemaphore(File directory, String name, int count, short opera try { library.semop(semaphore, target, 1); } catch (LastErrorException exception) { - if (acceptUnavailable && Native.getLastError() == PosixLibrary.EAGAIN) { + if (acceptUnavailable && (Native.getLastError() == PosixLibrary.EAGAIN + || Native.getLastError() == PosixLibrary.EDEADLK)) { break; } else { throw exception; @@ -2123,6 +2125,11 @@ protected interface PosixLibrary extends Library { */ int EAGAIN = 11; + /** + * Indicates a dead lock on a resource. + */ + int EDEADLK = 35; + /** * Indicates that a semaphore's operations should be undone at process shutdown. */ diff --git a/byte-buddy-android-test/pom.xml b/byte-buddy-android-test/pom.xml index ec77e8fe3e8..d15b646df8a 100644 --- a/byte-buddy-android-test/pom.xml +++ b/byte-buddy-android-test/pom.xml @@ -5,7 +5,7 @@ net.bytebuddy byte-buddy-parent - 1.10.3-SNAPSHOT + 1.10.4-SNAPSHOT byte-buddy-android-test diff --git a/byte-buddy-android/pom.xml b/byte-buddy-android/pom.xml index c67c3ff4603..a88b1a698a0 100644 --- a/byte-buddy-android/pom.xml +++ b/byte-buddy-android/pom.xml @@ -5,7 +5,7 @@ byte-buddy-parent net.bytebuddy - 1.10.3-SNAPSHOT + 1.10.4-SNAPSHOT byte-buddy-android diff --git a/byte-buddy-benchmark/pom.xml b/byte-buddy-benchmark/pom.xml index a035176163a..cfdb5650d67 100644 --- a/byte-buddy-benchmark/pom.xml +++ b/byte-buddy-benchmark/pom.xml @@ -5,7 +5,7 @@ byte-buddy-parent net.bytebuddy - 1.10.3-SNAPSHOT + 1.10.4-SNAPSHOT byte-buddy-benchmark diff --git a/byte-buddy-dep/pom.xml b/byte-buddy-dep/pom.xml index 0b02934623f..39c4c284389 100644 --- a/byte-buddy-dep/pom.xml +++ b/byte-buddy-dep/pom.xml @@ -5,7 +5,7 @@ net.bytebuddy byte-buddy-parent - 1.10.3-SNAPSHOT + 1.10.4-SNAPSHOT byte-buddy-dep diff --git a/byte-buddy-dep/src/test/java/net/bytebuddy/TypeCacheTest.java b/byte-buddy-dep/src/test/java/net/bytebuddy/TypeCacheTest.java index a1c5f2b8943..e713b2ad1c0 100644 --- a/byte-buddy-dep/src/test/java/net/bytebuddy/TypeCacheTest.java +++ b/byte-buddy-dep/src/test/java/net/bytebuddy/TypeCacheTest.java @@ -7,6 +7,7 @@ import java.lang.ref.SoftReference; import java.lang.ref.WeakReference; import java.util.concurrent.Callable; +import java.util.logging.Logger; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; @@ -84,9 +85,20 @@ public void testCacheTypeCollection() throws Exception { System.gc(); Thread.sleep(50L); } - assertThat(typeCache.find(classLoader, key), nullValue(Class.class)); - assertThat(typeCache.insert(classLoader, key, Void.class), is((Object) Void.class)); - assertThat(typeCache.find(classLoader, key), is((Object) Void.class)); + try { + assertThat(typeCache.find(classLoader, key), nullValue(Class.class)); + assertThat(typeCache.insert(classLoader, key, Void.class), is((Object) Void.class)); + assertThat(typeCache.find(classLoader, key), is((Object) Void.class)); + } catch (AssertionError ignored) { + Logger.getLogger("net.bytebuddy").warning("Cache was not cleared, possibly due to weak references not being collected, retrying..."); + for (int index = 0; index < 50; index++) { + System.gc(); + Thread.sleep(50L); + } + assertThat(typeCache.find(classLoader, key), nullValue(Class.class)); + assertThat(typeCache.insert(classLoader, key, Void.class), is((Object) Void.class)); + assertThat(typeCache.find(classLoader, key), is((Object) Void.class)); + } } @Test diff --git a/byte-buddy-gradle-plugin/pom.xml b/byte-buddy-gradle-plugin/pom.xml index 0ac88b84c89..9c50d8329af 100644 --- a/byte-buddy-gradle-plugin/pom.xml +++ b/byte-buddy-gradle-plugin/pom.xml @@ -3,7 +3,7 @@ byte-buddy-parent net.bytebuddy - 1.10.3-SNAPSHOT + 1.10.4-SNAPSHOT 4.0.0 diff --git a/byte-buddy-maven-plugin/pom.xml b/byte-buddy-maven-plugin/pom.xml index 2f5445dca68..15879993369 100644 --- a/byte-buddy-maven-plugin/pom.xml +++ b/byte-buddy-maven-plugin/pom.xml @@ -3,7 +3,7 @@ byte-buddy-parent net.bytebuddy - 1.10.3-SNAPSHOT + 1.10.4-SNAPSHOT 4.0.0 diff --git a/byte-buddy/pom.xml b/byte-buddy/pom.xml index 5067985f7df..962d801368c 100644 --- a/byte-buddy/pom.xml +++ b/byte-buddy/pom.xml @@ -5,7 +5,7 @@ net.bytebuddy byte-buddy-parent - 1.10.3-SNAPSHOT + 1.10.4-SNAPSHOT byte-buddy diff --git a/pom.xml b/pom.xml index 16e0c3eb342..3554a5c4395 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,10 @@ - + 4.0.0 net.bytebuddy byte-buddy-parent - 1.10.3-SNAPSHOT + 1.10.4-SNAPSHOT pom 2014 @@ -97,6 +96,7 @@ 3.0.1 false false + git@github.com:raphw/byte-buddy.git @@ -127,9 +127,9 @@ - scm:git:git@github.com:raphw/byte-buddy.git - scm:git:git@github.com:raphw/byte-buddy.git - git@github.com:raphw/byte-buddy.git + scm:git:${repository.url} + scm:git:${repository.url} + ${repository.url} HEAD @@ -680,21 +680,9 @@ jar - - - aggregate-javadoc - - aggregate - - package - - Byte Buddy (full API), version ${project.version} - - false - - + ${sourcecode.main.version} true ${asm.url}/javadoc @@ -723,6 +711,12 @@ sign + + + --pinentry-mode + loopback + + diff --git a/release-notes.md b/release-notes.md index 7693bffd0d4..9b78806997f 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,6 +1,12 @@ Byte Buddy release notes ------------------------ +### 8. November 2019: version 1.10.3 + +- Allow overriding the name of the native library for Windows attach emulation. +- Use correct type pool in build plugin engine for decorators. +- Fix attach emulation for OpenJ9 on MacOS. + ### 16. October 2019: version 1.10.2 - Upgrade ASM to version 7.2.