Skip to content

Commit 98ece9c

Browse files
committed
Merge branch 'release/2.9.0'
2 parents b5b3036 + 8b0fea7 commit 98ece9c

File tree

94 files changed

+982
-270
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+982
-270
lines changed

.github/workflows/publish-central.yml

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,28 @@
11
name: Publish to Maven Central
22
on:
3-
workflow_dispatch:
4-
inputs:
5-
tag:
6-
description: 'Tag'
7-
required: true
8-
default: '0.0.0'
3+
release:
4+
types: [published]
95
jobs:
106
publish:
117
runs-on: ubuntu-latest
8+
if: startsWith(github.ref, 'refs/tags/') # only allow publishing tagged versions
129
steps:
1310
- uses: actions/checkout@v4
14-
with:
15-
ref: "refs/tags/${{ github.event.inputs.tag }}"
16-
show-progress: false
1711
- uses: actions/setup-java@v4
1812
with:
1913
java-version: 21
2014
distribution: 'temurin'
2115
cache: 'maven'
22-
server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml
23-
server-username: MAVEN_USERNAME # env variable for username in deploy
24-
server-password: MAVEN_PASSWORD # env variable for token in deploy
25-
- name: Enforce project version ${{ github.event.inputs.tag }}
26-
run: mvn versions:set -B -DnewVersion=${{ github.event.inputs.tag }}
16+
server-id: central
17+
server-username: MAVEN_CENTRAL_USERNAME
18+
server-password: MAVEN_CENTRAL_PASSWORD
19+
- name: Enforce project version ${{ github.event.release.tag_name }}
20+
run: mvn versions:set -B -DnewVersion=${{ github.event.release.tag_name }}
2721
- name: Deploy
2822
run: mvn deploy -B -DskipTests -Psign,deploy-central --no-transfer-progress
2923
env:
30-
MAVEN_OPTS: >
31-
--add-opens=java.base/java.util=ALL-UNNAMED
32-
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED
33-
--add-opens=java.base/java.text=ALL-UNNAMED
34-
--add-opens=java.desktop/java.awt.font=ALL-UNNAMED
35-
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
36-
MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
24+
MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
25+
MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
3726
MAVEN_GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
38-
MAVEN_GPG_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
27+
MAVEN_GPG_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
3928
MAVEN_GPG_KEY_FINGERPRINT: ${{ vars.RELEASES_GPG_KEY_FINGERPRINT }}

.github/workflows/publish-github.yml

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,5 @@ jobs:
2222
env:
2323
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2424
MAVEN_GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
25-
MAVEN_GPG_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
25+
MAVEN_GPG_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
2626
MAVEN_GPG_KEY_FINGERPRINT: ${{ vars.RELEASES_GPG_KEY_FINGERPRINT }}
27-
- name: Slack Notification
28-
uses: rtCamp/action-slack-notify@v2
29-
env:
30-
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
31-
SLACK_USERNAME: 'Cryptobot'
32-
SLACK_ICON:
33-
SLACK_ICON_EMOJI: ':bot:'
34-
SLACK_CHANNEL: 'cryptomator-desktop'
35-
SLACK_TITLE: "Published ${{ github.event.repository.name }} ${{ github.event.release.tag_name }}"
36-
SLACK_MESSAGE: "Ready to <https://github.com/${{ github.repository }}/actions/workflows/publish-central.yml|deploy to Maven Central>."
37-
SLACK_FOOTER:
38-
MSG_MINIMAL: true

pom.xml

Lines changed: 48 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,49 @@
22
<modelVersion>4.0.0</modelVersion>
33
<groupId>org.cryptomator</groupId>
44
<artifactId>cryptofs</artifactId>
5-
<version>2.7.2</version>
5+
<version>2.9.0</version>
66
<name>Cryptomator Crypto Filesystem</name>
77
<description>This library provides the Java filesystem provider used by Cryptomator.</description>
88
<url>https://github.com/cryptomator/cryptofs</url>
99

1010
<scm>
1111
<connection>scm:git:git@github.com:cryptomator/cryptofs.git</connection>
1212
<developerConnection>scm:git:git@github.com:cryptomator/cryptofs.git</developerConnection>
13-
<url>git@github.com:cryptomator/cryptofs.git</url>
13+
<url>https://github.com/cryptomator/cryptofs</url>
1414
</scm>
1515

1616
<properties>
1717
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1818
<maven.compiler.release>21</maven.compiler.release>
1919

2020
<!-- dependencies -->
21-
<cryptolib.version>2.2.0</cryptolib.version>
22-
<jwt.version>4.4.0</jwt.version>
23-
<dagger.version>2.51.1</dagger.version>
24-
<guava.version>33.2.1-jre</guava.version>
25-
<caffeine.version>3.1.8</caffeine.version>
26-
<slf4j.version>2.0.16</slf4j.version>
21+
<cryptolib.version>2.2.1</cryptolib.version>
22+
<jwt.version>4.5.0</jwt.version>
23+
<dagger.version>2.55</dagger.version>
24+
<guava.version>33.4.8-jre</guava.version>
25+
<caffeine.version>3.2.0</caffeine.version>
26+
<slf4j.version>2.0.17</slf4j.version>
2727

2828
<!-- test dependencies -->
29-
<junit.jupiter.version>5.11.3</junit.jupiter.version>
30-
<mockito.version>5.14.2</mockito.version>
29+
<junit.jupiter.version>5.12.2</junit.jupiter.version>
30+
<jmh.version>1.37</jmh.version>
31+
<mockito.version>5.17.0</mockito.version>
3132
<hamcrest.version>3.0</hamcrest.version>
3233
<jimfs.version>1.3.0</jimfs.version>
3334

3435
<!-- build plugin dependencies -->
35-
<mvn-compiler.version>3.13.0</mvn-compiler.version>
36-
<mvn-dependency.version>3.7.1</mvn-dependency.version>
37-
<mvn-surefire.version>3.5.1</mvn-surefire.version>
36+
<mvn-compiler.version>3.14.0</mvn-compiler.version>
37+
<mvn-dependency.version>3.8.1</mvn-dependency.version>
38+
<mvn-surefire.version>3.5.3</mvn-surefire.version>
3839
<mvn-jar.version>3.4.2</mvn-jar.version>
3940
<mvn-source.version>3.3.1</mvn-source.version>
40-
<mvn-javadoc.version>3.10.1</mvn-javadoc.version>
41+
<mvn-javadoc.version>3.11.2</mvn-javadoc.version>
4142
<mvn-gpg.version>3.2.7</mvn-gpg.version>
4243

43-
<dependency-check.version>11.0.0</dependency-check.version>
44-
<junit-tree-reporter.version>1.3.0</junit-tree-reporter.version>
45-
<jacoco.version>0.8.12</jacoco.version>
46-
<nexus-staging.version>1.7.0</nexus-staging.version>
44+
<dependency-check.version>12.1.1</dependency-check.version>
45+
<junit-tree-reporter.version>1.4.0</junit-tree-reporter.version>
46+
<jacoco.version>0.8.13</jacoco.version>
47+
<central-publishing.version>0.7.0</central-publishing.version>
4748

4849
<!-- Property used by surefire to determine jacoco engine -->
4950
<surefire.jacoco.args></surefire.jacoco.args>
@@ -90,6 +91,11 @@
9091
<artifactId>dagger</artifactId>
9192
<version>${dagger.version}</version>
9293
</dependency>
94+
<dependency>
95+
<groupId>jakarta.inject</groupId>
96+
<artifactId>jakarta.inject-api</artifactId>
97+
<version>2.0.1.MR</version>
98+
</dependency>
9399
<dependency>
94100
<groupId>com.google.guava</groupId>
95101
<artifactId>guava</artifactId>
@@ -123,6 +129,18 @@
123129
<version>${junit.jupiter.version}</version>
124130
<scope>test</scope>
125131
</dependency>
132+
<dependency>
133+
<groupId>org.openjdk.jmh</groupId>
134+
<artifactId>jmh-core</artifactId>
135+
<version>${jmh.version}</version>
136+
<scope>test</scope>
137+
</dependency>
138+
<dependency>
139+
<groupId>org.openjdk.jmh</groupId>
140+
<artifactId>jmh-generator-annprocess</artifactId>
141+
<version>${jmh.version}</version>
142+
<scope>provided</scope> <!-- only required during compilation -->
143+
</dependency>
126144
<dependency>
127145
<groupId>org.mockito</groupId>
128146
<artifactId>mockito-core</artifactId>
@@ -163,7 +181,13 @@
163181
<artifactId>dagger-compiler</artifactId>
164182
<version>${dagger.version}</version>
165183
</path>
184+
<path>
185+
<groupId>org.openjdk.jmh</groupId>
186+
<artifactId>jmh-generator-annprocess</artifactId>
187+
<version>${jmh.version}</version>
188+
</path>
166189
</annotationProcessorPaths>
190+
<compilerArgs>-Adagger.useBindingGraphFix=ENABLED</compilerArgs>
167191
</configuration>
168192
</plugin>
169193
<plugin>
@@ -200,7 +224,7 @@
200224
<statelessTestsetInfoReporter
201225
implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5StatelessTestsetInfoTreeReporter">
202226
</statelessTestsetInfoReporter>
203-
<argLine>@{surefire.jacoco.args} -javaagent:${net.bytebuddy:byte-buddy-agent:jar}</argLine>
227+
<argLine>@{surefire.jacoco.args} -javaagent:${org.mockito:mockito-core:jar}</argLine>
204228
</configuration>
205229
</plugin>
206230
<plugin>
@@ -348,24 +372,16 @@
348372

349373
<profile>
350374
<id>deploy-central</id>
351-
<distributionManagement>
352-
<repository>
353-
<id>ossrh</id>
354-
<name>Maven Central</name>
355-
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
356-
</repository>
357-
</distributionManagement>
358375
<build>
359376
<plugins>
360377
<plugin>
361-
<groupId>org.sonatype.plugins</groupId>
362-
<artifactId>nexus-staging-maven-plugin</artifactId>
363-
<version>${nexus-staging.version}</version>
378+
<groupId>org.sonatype.central</groupId>
379+
<artifactId>central-publishing-maven-plugin</artifactId>
380+
<version>${central-publishing.version}</version>
364381
<extensions>true</extensions>
365382
<configuration>
366-
<serverId>ossrh</serverId>
367-
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
368-
<autoReleaseAfterClose>true</autoReleaseAfterClose>
383+
<publishingServerId>central</publishingServerId>
384+
<autoPublish>true</autoPublish>
369385
</configuration>
370386
</plugin>
371387
</plugins>

src/main/java/module-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
// https://github.com/javax-inject/javax-inject/issues/33
2020
// May be provided by another lib during runtime
2121
requires static javax.inject;
22+
requires jakarta.inject;
2223
requires java.compiler;
2324

2425
exports org.cryptomator.cryptofs;
26+
exports org.cryptomator.cryptofs.event;
2527
exports org.cryptomator.cryptofs.common;
2628
exports org.cryptomator.cryptofs.health.api;
2729
exports org.cryptomator.cryptofs.migration;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.cryptomator.cryptofs;
2+
3+
import com.google.common.io.BaseEncoding;
4+
5+
import java.nio.file.Path;
6+
7+
public class CiphertextPathValidations {
8+
9+
10+
private CiphertextPathValidations() {}
11+
12+
public static boolean isCiphertextContentDir(Path p) {
13+
var twoCharDir = p.getParent();
14+
if (twoCharDir == null) {
15+
return false;
16+
}
17+
var testString = twoCharDir.getFileName().toString() + p.getFileName().toString();
18+
return testString.length() == 32 && BaseEncoding.base32().canDecode(testString);
19+
}
20+
21+
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package org.cryptomator.cryptofs;
22

33
import java.nio.file.NoSuchFileException;
4+
import java.nio.file.Path;
45

56
public class ContentRootMissingException extends NoSuchFileException {
67

7-
public ContentRootMissingException(String msg) {
8-
super(msg);
8+
public ContentRootMissingException(Path encryptedVaultRootDir) {
9+
super(encryptedVaultRootDir.toString());
910
}
1011
}

src/main/java/org/cryptomator/cryptofs/CopyOperation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import org.cryptomator.cryptofs.common.ArrayUtils;
44

5-
import javax.inject.Inject;
6-
import javax.inject.Singleton;
5+
import jakarta.inject.Inject;
6+
import jakarta.inject.Singleton;
77
import java.io.IOException;
88
import java.nio.channels.FileChannel;
99
import java.nio.file.CopyOption;

src/main/java/org/cryptomator/cryptofs/CryptoFileStore.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
import org.cryptomator.cryptofs.attr.AttributeViewType;
1212

13-
import javax.inject.Inject;
13+
import jakarta.inject.Inject;
1414
import java.io.IOException;
1515
import java.nio.file.FileStore;
1616
import java.nio.file.attribute.FileAttributeView;

src/main/java/org/cryptomator/cryptofs/CryptoFileSystemImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.cryptomator.cryptofs.fh.OpenCryptoFiles;
2323
import org.cryptomator.cryptolib.api.Cryptor;
2424

25-
import javax.inject.Inject;
25+
import jakarta.inject.Inject;
2626
import java.io.IOException;
2727
import java.nio.channels.FileChannel;
2828
import java.nio.file.AccessDeniedException;

src/main/java/org/cryptomator/cryptofs/CryptoFileSystemModule.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.cryptomator.cryptofs.attr.AttributeComponent;
1111
import org.cryptomator.cryptofs.attr.AttributeViewComponent;
1212
import org.cryptomator.cryptofs.dir.DirectoryStreamComponent;
13+
import org.cryptomator.cryptofs.event.FilesystemEvent;
1314
import org.cryptomator.cryptofs.fh.OpenCryptoFileComponent;
1415
import org.slf4j.Logger;
1516
import org.slf4j.LoggerFactory;
@@ -19,6 +20,7 @@
1920
import java.nio.file.Files;
2021
import java.nio.file.Path;
2122
import java.util.Optional;
23+
import java.util.function.Consumer;
2224

2325
@Module(subcomponents = {AttributeComponent.class, AttributeViewComponent.class, OpenCryptoFileComponent.class, DirectoryStreamComponent.class})
2426
class CryptoFileSystemModule {
@@ -35,4 +37,17 @@ public Optional<FileStore> provideNativeFileStore(@PathToVault Path pathToVault)
3537
return Optional.empty();
3638
}
3739
}
40+
41+
@Provides
42+
@CryptoFileSystemScoped
43+
public Consumer<FilesystemEvent> provideFilesystemEventConsumer(CryptoFileSystemProperties fsProps) {
44+
var eventConsumer = fsProps.filesystemEventConsumer();
45+
return event -> {
46+
try {
47+
eventConsumer.accept(event);
48+
} catch (RuntimeException e) {
49+
LOG.warn("Filesystem event consumer failed with exception when processing event {}", event, e);
50+
}
51+
};
52+
}
3853
}

0 commit comments

Comments
 (0)