diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md deleted file mode 100644 index b0d1c1e5..00000000 --- a/.github/ISSUE_TEMPLATE/bug.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -name: "Bug Report" -about: "Create a report to help us improve" -labels: type:bug ---- - - - -### Description - -[Summarize your problem.] - -### System Setup - -* Android version: [Shown in the settings of Android] -* Cryptomator version: [Shown in the settings of Cryptomator] -* Cloud type: [Dropbox/Google Drive/OneDrive/pCloud/WebDAV/S3/Local storage] - -### Steps to Reproduce - -1. [First step] -2. [Second step] -3. [and so on…] - -#### Expected Behavior - -[What you expect to happen.] - -#### Actual Behavior - -[What actually happens.] - -#### Reproducibility - -[Always/Intermittent/Only once] - -### Additional Information - -[Any additional information, log files, screenshots or a movie while reproducing the problem, configuration, or data that might be necessary to reproduce the issue.] - - diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 00000000..eaadb708 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,95 @@ +name: Bug Report +description: Create a report to help us improve +labels: ["type:bug"] +body: + - type: checkboxes + id: terms + attributes: + label: Please agree to the following + options: + - label: I have searched [existing issues](https://github.com/cryptomator/android/issues?q=) for duplicates + required: true + - label: I agree to follow this project's [Code of Conduct](https://github.com/cryptomator/android/blob/develop/.github/CODE_OF_CONDUCT.md) + required: true + - type: input + id: summary + attributes: + label: Summary + placeholder: Please summarize your problem. + validations: + required: true + - type: textarea + id: software-versions + attributes: + label: System Setup + description: | + What software is involved? Please provide version numbers as well. + value: | + - Android: [Version shown in the settings of Android"] + - Cryptomator: [Version shown in the settings of Cryptomator] + - … + render: markdown + validations: + required: true + - type: dropdown + id: cloud-type + attributes: + label: Cloud Type + description: Where is your vault located? + multiple: true + options: + - Dropbox + - Google Drive + - OneDrive + - WebDAV + - pCloud + - S3 + - Local storage + validations: + required: false + - type: textarea + id: reproduction-steps + attributes: + label: Steps to Reproduce + value: | + 1. [First Step] + 2. [Second Step] + 3. … + validations: + required: true + - type: textarea + id: expected-behaviour + attributes: + label: Expected Behavior + placeholder: What you expect to happen. + validations: + required: true + - type: textarea + id: actual-behaviour + attributes: + label: Actual Behavior + placeholder: What actually happens. + validations: + required: true + - type: dropdown + id: reproducibility + attributes: + label: Reproducibility + description: How often does the described behaviour occur? + options: + - Always + - Intermittent + - Only once + validations: + required: true + - type: textarea + id: logs + attributes: + label: Relevant Log Output + description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + render: shell + - type: textarea + id: further-info + attributes: + label: Anything else? + description: Links? References? Screenshots? Configurations? Any data that might be necessary to reproduce the issue? diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md deleted file mode 100644 index 91b7c00b..00000000 --- a/.github/ISSUE_TEMPLATE/feature.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -name: "Feature Request" -about: "Suggest an idea for this project" -labels: type:feature-request ---- - - - - -### Summary - -[One paragraph explanation of the feature.] - -### Motivation - -[Why are we doing this? What use cases does it support? What is the expected outcome?] - -### Considered Alternatives - -[A clear and concise description of the alternative solutions you've considered.] - -### Additional Context - -[Add any other context or screenshots about the feature request here.] diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml new file mode 100644 index 00000000..a897209b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.yml @@ -0,0 +1,37 @@ +name: Feature Request +description: Suggest an idea for this project +labels: ["type:feature-request"] +body: + - type: checkboxes + id: terms + attributes: + label: Please agree to the following + options: + - label: I have searched [existing issues](https://github.com/cryptomator/android/issues?q=) for duplicates + required: true + - label: I agree to follow this project's [Code of Conduct](https://github.com/cryptomator/android/blob/develop/.github/CODE_OF_CONDUCT.md) + required: true + - type: input + id: summary + attributes: + label: Summary + placeholder: Please summarize your feature request. + validations: + required: true + - type: textarea + id: motivation + attributes: + label: Motivation + description: Who requires this feature? What problem does the user face? How would this feature solve the problem? + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Considered Alternatives + description: What current alternatives or workarounds have you considered? Is there a different way to solve the same problem? + - type: textarea + id: context + attributes: + label: Anything else? + description: Any context, suggestions, screenshots, or concepts you want to share? diff --git a/.github/workflows/triageBugs.yml b/.github/workflows/triageBugs.yml deleted file mode 100644 index 5f18126c..00000000 --- a/.github/workflows/triageBugs.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Bug Report Triage - -on: - issues: - types: [opened] - -jobs: - closeTemplateViolation: - name: Validate bug report against issue template - runs-on: ubuntu-latest - if: contains(github.event.issue.labels.*.name, 'type:bug') - steps: - - name: Check "Description" - if: | - !contains(github.event.issue.body, env.MUST_CONTAIN) - || contains(toJson(github.event.issue.body), env.MUST_NOT_CONTAIN) - run: exit 1 - env: - MUST_CONTAIN: '### Description' - MUST_NOT_CONTAIN: '### Description\r\n\r\n[Summarize your problem.]\r\n\r\n### System Setup' - - name: Check "Steps to Reproduce" - if: | - !contains(github.event.issue.body, env.MUST_CONTAIN) - || contains(toJson(github.event.issue.body), env.MUST_NOT_CONTAIN) - run: exit 1 - env: - MUST_CONTAIN: '### Steps to Reproduce' - MUST_NOT_CONTAIN: '### Steps to Reproduce\r\n\r\n1. [First step]\r\n2. [Second step]\r\n3. [and so on…]\r\n\r\n#### Expected Behavior' - - name: Close issue if one of the checks failed - if: ${{ failure() }} - uses: peter-evans/close-issue@v1 - with: - comment: | - This bug report did ignore our issue template. 😞 - Auto-closing this issue, since it is most likely not useful. - - _This decision was made by a bot. If you think the bot is wrong, let us know and we'll reopen this issue._ - diff --git a/README.md b/README.md index 472ae3b3..e6147df8 100644 --- a/README.md +++ b/README.md @@ -45,43 +45,6 @@ Please make sure before creating a PR, to apply the code style by executing refo Help us keep Cryptomator open and inclusive. Please read and follow our [Code of Conduct](.github/CODE_OF_CONDUCT.md). -## Deployment - -Follow these steps to deploy a release: - -1. Check `TODO`/`FIXME` comments - - Create issue for or delete - - Regexp for "Find in Path": `\W(TODO|FIXME)(?! #[0-9]{1,4}:)` -1. Merge translations -1. Check latest dependencies -1. Create release branch -1. Test database migration -1. Smoke-Test changed or added functionality -1. Update version -1. Create and commit release notes -1. Merge in `main` -1. Create tag and execute deploy app using Fastlane -1. Close GitHub-issues or move them to next milestone -1. Close milestone -1. Update version on website ([cryptomator.org/android](https://cryptomator.org/android/)) - -### Release Notes - -Before tagging the release, create and commit the release notes. For Playstore create [fastlane/metadata/android/de-DE/changelogs/default.txt](https://github.com/cryptomator/android/blob/develop/fastlane/metadata/android/de-DE/changelogs/default.txt), [fastlane/metadata/android/en-US/changelogs/default.txt](https://github.com/cryptomator/android/blob/develop/fastlane/metadata/android/en-US/changelogs/default.txt) and for the website create [fastlane/release-notes.html](https://github.com/cryptomator/android/blob/develop/fastlane/release-notes.html). - -### Deploy app using Fastlane - -Deploy production version to Google Play, Website/GitHub-Releases and F-Droid using `fastlane android deploy` or `bundle exec fastlane deploy` - -There are further targets and options like `beta`, see [fastlane/README.md](https://github.com/cryptomator/android/blob/develop/fastlane/README.md) - -### Initial setup Fastlane - -1. Make sure you copied `.default.env` to `.env` in the `fastlane` folder and filled out those variables. -1. Install Ruby (depends on OS, Ubuntu): `sudo apt install ruby-dev` -1. Install fastlane (depends on OS, Ubuntu): `gem install fastlane -N` -1. Install `fdroidserver` using `apt`, `pacman`, ..., see https://f-droid.org/docs/Installing_the_Server_and_Repo_Tools/ - ## License This project is dual-licensed under the GPLv3 for FOSS projects as well as a commercial license for independent software vendors and resellers. If you want to modify this application under different conditions, feel free to contact our support team. diff --git a/fastlane/Fastfile b/fastlane/Fastfile index e3d26fbc..acc77ce1 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -229,7 +229,7 @@ platform :android do |options| FileUtils.mkdir("unsigned") - FileUtils.cp(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], "unsigned/org.cryptomator_#{version}.apk") + FileUtils.cp(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], "unsigned/org.cryptomator_fdroid.apk") sh("ISSUEBOT_CURRENT_APPLICATION_ID=org.cryptomator ISSUEBOT_CURRENT_REPLY_FILE=current_result.json php iod-scan-apk.php") @@ -237,7 +237,7 @@ platform :android do |options| FileUtils.rm("libinfo.txt") FileUtils.rm("libsmali.txt") FileUtils.rm_r("unsigned") - FileUtils.rm_r("org.cryptomator_#{version}") + FileUtils.rm_r("org.cryptomator_fdroid") puts "Check if something changed in the APK regarding the dependencies" diff --git a/fastlane/result.json b/fastlane/result.json index a29d38fb..103caca5 100644 --- a/fastlane/result.json +++ b/fastlane/result.json @@ -1 +1 @@ -{"applicationId":"org.cryptomator","emoji":[],"labels":["scanner-warning"],"report":"

APK library scanner

\nunsigned/org.cryptomator_1.6.1-SNAPSHOT.apk\nOffending libs:
\n\n3 offender(s). Full report available here.
\n","reportData":{"unsigned/org.cryptomator_1.6.1-SNAPSHOT.apk":[{"id":"/android/support/v4","name":"Android Support v4","typ":"Development Framework","anti":""},{"id":"/androidx/arch","name":"Arch","typ":"Utility","anti":""},{"id":"/androidx/appcompat","name":"AppCompat","typ":"Utility","anti":""},{"id":"/androidx/biometric","name":"Biometric","typ":"Utility","anti":""},{"id":"/androidx/constraintlayout","name":"Constraint Layout Library","typ":"Utility","anti":""},{"id":"/androidx/core","name":"Androidx Core","typ":"Utility","anti":""},{"id":"/androidx/documentfile","name":"Documentfile","typ":"UI Component","anti":""},{"id":"/androidx/exifinterface","name":"Exifinterface","typ":"Utility","anti":""},{"id":"/androidx/legacy","name":"androidx.legacy","typ":"Utility","anti":""},{"id":"/androidx/lifecycle","name":"Lifecycle","typ":"Utility","anti":""},{"id":"/androidx/loader","name":"Loader","typ":"Utility","anti":""},{"id":"/androidx/preference","name":"Preference","typ":"Utility","anti":""},{"id":"/androidx/print","name":"Print","typ":"Utility","anti":""},{"id":"/androidx/transition","name":"Transition","typ":"UI Component","anti":""},{"id":"/androidx/vectordrawable","name":"Vectordrawable","typ":"UI Component","anti":""},{"id":"/com/burgstaller/okhttp","name":"okhttp-digest","typ":"Utility","anti":""},{"id":"/com/davemorrissey/labs/subscaleview","name":"Subsampling Scale Image View","typ":"UI Component","anti":""},{"id":"/com/dropbox/core","name":"Dropbox Core SDK for Java","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/fasterxml","name":"Fasterxml","typ":"Utility","anti":""},{"id":"/com/google/android/material","name":"Google Material Design","typ":"Utility","anti":""},{"id":"/com/google/common","name":"Google Core Libraries for Java 6+","typ":"Utility","anti":""},{"id":"/com/google/errorprone","name":"Error Prone","typ":"Utility","anti":""},{"id":"/com/google/gson","name":"Google Gson","typ":"Utility","anti":""},{"id":"/com/google/j2objc","name":"J2ObjC","typ":"Utility","anti":""},{"id":"/com/jakewharton/rxbinding","name":"RxBinding","typ":"Utility","anti":""},{"id":"/com/microsoft/graph","name":"Microsoft Graph-SDK","typ":"Development Framework","anti":""},{"id":"/com/microsoft/services/msa","name":"MSA Auth for Android","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/nulabinc/zxcvbn","name":"zxcvbn4j","typ":"Utility","anti":""},{"id":"/com/pcloud/sdk","name":"pCloud Java SDK","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/simplecityapps/recyclerview_fastscroll","name":"RecyclerView-FastScroll","typ":"UI Component","anti":""},{"id":"/com/squareup/okhttp","name":"OkHttp","typ":"Utility","anti":""},{"id":"/com/tomclaw/cache","name":"Disk LRU Cache","typ":"Utility","anti":""},{"id":"/dagger","name":"Dagger","typ":"Utility","anti":""},{"id":"/io/jsonwebtoken","name":"Java JWT","typ":"Utility","anti":""},{"id":"/io/reactivex","name":"RxJava","typ":"Utility","anti":""},{"id":"/javax/annotation","name":"JavaX Annotation API","typ":"Utility","anti":""},{"id":"/javax/inject","name":"JavaX Dependency Injection","typ":"Utility","anti":""},{"id":"/kotlin","name":"Kotlin","typ":"Utility","anti":""},{"id":"/kotlinx/coroutines","name":"kotlinx.coroutines","typ":"Utility","anti":""},{"id":"/okio","name":"OkHttp okio Framework","typ":"Utility","anti":""},{"id":"/org/apache/commons","name":"Apache Commons","typ":"Development Framework","anti":""},{"id":"/org/apache/http","name":"Apache Http","typ":"Utility","anti":""},{"id":"/org/checkerframework","name":"Checker Framework","typ":"Utility","anti":""},{"id":"/org/greenrobot/greendao","name":"greenDAO","typ":"Utility","anti":""},{"id":"/org/intellij","name":"IntelliJ IDEA","typ":"Utility","anti":""},{"id":"/org/reactivestreams","name":"Reactive Streams","typ":"Utility","anti":""},{"id":"/org/simpleframework","name":"Simple","typ":"Utility","anti":""},{"id":"/org/slf4j","name":"Simple Logging Facade for Java","typ":"Utility","anti":""},{"id":"/timber/log","name":"Timber","typ":"Utility","anti":""}],"log":["Fetching library definitions from https://gitlab.com/IzzyOnDroid/repo/-/raw/master/lib","Loaded 2500 library definitions","Analyzing 'unsigned/org.cryptomator_1.6.1-SNAPSHOT.apk'...","Apktool returned: 0","Read 23715 bytes of smali path names from 'org.cryptomator_1.6.1-SNAPSHOT.dirlist'","Identified 49 libraries, 3 offenders.","Done analyzing 'unsigned/org.cryptomator_1.6.1-SNAPSHOT.apk'"],"self_url":"/artifacts/public/issuebot///iod-scan-apk.php.json"}} \ No newline at end of file +{"applicationId":"org.cryptomator","emoji":[],"labels":["scanner-warning"],"report":"

APK library scanner

\nunsigned/org.cryptomator_fdroid.apk\nOffending libs:
\n\n3 offender(s). Full report available here.
\n","reportData":{"unsigned/org.cryptomator_fdroid.apk":[{"id":"/android/support/v4","name":"Android Support v4","typ":"Development Framework","anti":""},{"id":"/androidx/activity","name":"AndroidX Activity","typ":"Utility","anti":""},{"id":"/androidx/annotation","name":"Android Jetpack Annotations","typ":"Utility","anti":""},{"id":"/androidx/arch","name":"Arch","typ":"Utility","anti":""},{"id":"/androidx/appcompat","name":"AppCompat","typ":"Utility","anti":""},{"id":"/androidx/biometric","name":"Biometric","typ":"Utility","anti":""},{"id":"/androidx/collection","name":"Android Support Library collections","typ":"Utility","anti":""},{"id":"/androidx/constraintlayout","name":"Constraint Layout Library","typ":"Utility","anti":""},{"id":"/androidx/core","name":"Androidx Core","typ":"Utility","anti":""},{"id":"/androidx/cursoradapter","name":"AndroidX Cursor Adapter","typ":"Utility","anti":""},{"id":"/androidx/documentfile","name":"Documentfile","typ":"UI Component","anti":""},{"id":"/androidx/exifinterface","name":"Exifinterface","typ":"Utility","anti":""},{"id":"/androidx/legacy","name":"androidx.legacy","typ":"Utility","anti":""},{"id":"/androidx/lifecycle","name":"Lifecycle","typ":"Utility","anti":""},{"id":"/androidx/loader","name":"Loader","typ":"Utility","anti":""},{"id":"/androidx/localbroadcastmanager","name":"AndroidX Local Broadcast Manager","typ":"Utility","anti":""},{"id":"/androidx/preference","name":"Preference","typ":"Utility","anti":""},{"id":"/androidx/print","name":"Print","typ":"Utility","anti":""},{"id":"/androidx/savedstate","name":"Android Activity Saved State","typ":"Utility","anti":""},{"id":"/androidx/transition","name":"Transition","typ":"UI Component","anti":""},{"id":"/androidx/vectordrawable","name":"Vectordrawable","typ":"UI Component","anti":""},{"id":"/androidx/versionedparcelable","name":"Android Jetpack VersionedParcelable","typ":"Utility","anti":""},{"id":"/androidx/viewpager2","name":"AndroidX Widget ViewPager2","typ":"UI Component","anti":""},{"id":"/com/burgstaller/okhttp","name":"okhttp-digest","typ":"Utility","anti":""},{"id":"/com/davemorrissey/labs/subscaleview","name":"Subsampling Scale Image View","typ":"UI Component","anti":""},{"id":"/com/dropbox/core","name":"Dropbox Core SDK for Java","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/fasterxml","name":"Fasterxml","typ":"Utility","anti":""},{"id":"/com/google/android/material","name":"Google Material Design","typ":"Utility","anti":""},{"id":"/com/google/common","name":"Google Core Libraries for Java 6+","typ":"Utility","anti":""},{"id":"/com/google/errorprone","name":"Error Prone","typ":"Utility","anti":""},{"id":"/com/google/gson","name":"Google Gson","typ":"Utility","anti":""},{"id":"/com/google/j2objc","name":"J2ObjC","typ":"Utility","anti":""},{"id":"/com/jakewharton/rxbinding","name":"RxBinding","typ":"Utility","anti":""},{"id":"/com/microsoft/graph","name":"Microsoft Graph-SDK","typ":"Development Framework","anti":""},{"id":"/com/microsoft/services/msa","name":"MSA Auth for Android","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/nulabinc/zxcvbn","name":"zxcvbn4j","typ":"Utility","anti":""},{"id":"/com/pcloud/sdk","name":"pCloud Java SDK","typ":"Utility","anti":"NonFreeNet"},{"id":"/com/simplecityapps/recyclerview_fastscroll","name":"RecyclerView-FastScroll","typ":"UI Component","anti":""},{"id":"/com/squareup/okhttp","name":"OkHttp","typ":"Utility","anti":""},{"id":"/com/tomclaw/cache","name":"Disk LRU Cache","typ":"Utility","anti":""},{"id":"/dagger","name":"Dagger","typ":"Utility","anti":""},{"id":"/io/jsonwebtoken","name":"Java JWT","typ":"Utility","anti":""},{"id":"/io/reactivex","name":"RxJava","typ":"Utility","anti":""},{"id":"/javax/annotation","name":"JavaX Annotation API","typ":"Utility","anti":""},{"id":"/javax/inject","name":"JavaX Dependency Injection","typ":"Utility","anti":""},{"id":"/kotlin","name":"Kotlin","typ":"Utility","anti":""},{"id":"/kotlinx/coroutines","name":"kotlinx.coroutines","typ":"Utility","anti":""},{"id":"/okio","name":"OkHttp okio Framework","typ":"Utility","anti":""},{"id":"/org/apache/commons","name":"Apache Commons","typ":"Development Framework","anti":""},{"id":"/org/apache/http","name":"Apache Http","typ":"Utility","anti":""},{"id":"/org/checkerframework","name":"Checker Framework","typ":"Utility","anti":""},{"id":"/org/greenrobot/greendao","name":"greenDAO","typ":"Utility","anti":""},{"id":"/org/intellij","name":"IntelliJ IDEA","typ":"Utility","anti":""},{"id":"/org/reactivestreams","name":"Reactive Streams","typ":"Utility","anti":""},{"id":"/org/simpleframework","name":"Simple","typ":"Utility","anti":""},{"id":"/org/slf4j","name":"Simple Logging Facade for Java","typ":"Utility","anti":""},{"id":"/timber/log","name":"Timber","typ":"Utility","anti":""}],"log":["Fetching library definitions from https://gitlab.com/IzzyOnDroid/repo/-/raw/master/lib","Loaded 2543 library definitions","Analyzing 'unsigned/org.cryptomator_fdroid.apk'...","Apktool returned: 0","Read 23715 bytes of smali path names from 'org.cryptomator_fdroid.dirlist'","Identified 57 libraries, 3 offenders.","Done analyzing 'unsigned/org.cryptomator_fdroid.apk'"],"self_url":"/artifacts/public/issuebot///iod-scan-apk.php.json"}} \ No newline at end of file