diff --git a/.github/assets/github-badge.png b/.github/assets/github-badge.png
new file mode 100644
index 000000000..ef3207c95
Binary files /dev/null and b/.github/assets/github-badge.png differ
diff --git a/.github/assets/mastodon.svg b/.github/assets/mastodon.svg
new file mode 100644
index 000000000..e35204864
--- /dev/null
+++ b/.github/assets/mastodon.svg
@@ -0,0 +1,3 @@
+
diff --git a/.github/assets/twitter.svg b/.github/assets/twitter.svg
new file mode 100644
index 000000000..1fb6a5f11
--- /dev/null
+++ b/.github/assets/twitter.svg
@@ -0,0 +1,3 @@
+
diff --git a/.github/workflows/auth-crowdin.yml b/.github/workflows/auth-crowdin.yml
index a4800ea73..ea67dec7c 100644
--- a/.github/workflows/auth-crowdin.yml
+++ b/.github/workflows/auth-crowdin.yml
@@ -32,8 +32,8 @@ jobs:
localization_branch_name: crowdin-translations-auth
create_pull_request: true
skip_untranslated_strings: true
- pull_request_title: "New translations (auth)"
- pull_request_body: "New translations via [Crowdin GH Action](https://github.com/crowdin/github-action)"
+ pull_request_title: "[auth] New translations"
+ pull_request_body: "New translations from [Crowdin](https://crowdin.com/project/ente-authenticator-app)"
pull_request_base_branch_name: "main"
project_id: 575169
env:
diff --git a/.github/workflows/auth-lint.yml b/.github/workflows/auth-lint.yml
index 68fc51643..fff7fb75f 100644
--- a/.github/workflows/auth-lint.yml
+++ b/.github/workflows/auth-lint.yml
@@ -10,6 +10,9 @@ on:
- "auth/**"
- ".github/workflows/auth-lint.yml"
+env:
+ FLUTTER_VERSION: "3.16.9"
+
jobs:
lint:
runs-on: ubuntu-latest
@@ -17,20 +20,21 @@ jobs:
run:
working-directory: auth
steps:
- # Checkout our code, including submodules
- - uses: actions/checkout@v4
+ - name: Checkout code and submodules
+ uses: actions/checkout@v4
with:
submodules: recursive
- # Install Flutter
- - uses: subosito/flutter-action@v2
+ - name: Install Flutter ${{ env.FLUTTER_VERSION }}
+ uses: subosito/flutter-action@v2
with:
channel: "stable"
- flutter-version: "3.13.4"
+ flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- # Install dependencies
- run: flutter pub get
- # Lint
- run: flutter analyze --no-fatal-infos
+
+ - name: Verify custom icon JSON
+ run: cat assets/custom-icons/_data/custom-icons.json | jq empty
diff --git a/.github/workflows/auth-release.yml b/.github/workflows/auth-release.yml
index e496b492c..0adaaca28 100644
--- a/.github/workflows/auth-release.yml
+++ b/.github/workflows/auth-release.yml
@@ -1,14 +1,13 @@
name: "Release (auth)"
+# [Note: Testing release workflows that are triggered by tags]
+#
# To test this out, push a tag with a pre-release version. The version number
# should be the version number of the next actual release.
#
# > When major, minor, and patch are equal, a pre-release version has lower
-# > precedence than a normal version:
-# >
-# > Example: 1.0.0-alpha < 1.0.0.
-# >
-# > - https://semver.org
+# > precedence than a normal version. Example: 1.0.0-alpha < 1.0.0.
+# > https://semver.org
#
# So if the next release we intend to put out is 1.2.3, you can:
#
@@ -38,7 +37,6 @@ jobs:
defaults:
run:
- # Run all the "run" steps inside the auth directory
working-directory: auth
steps:
@@ -63,7 +61,7 @@ jobs:
- name: Create artifacts directory
run: mkdir artifacts
- - name: Build Android APK
+ - name: Build independent APK
run: |
flutter build apk --release --flavor independent --dart-define=app.flavor=independent
mv build/app/outputs/flutter-apk/app-independent-release.apk artifacts/ente-${{ github.ref_name }}.apk
@@ -115,13 +113,13 @@ jobs:
uses: ncipollo/release-action@v1
with:
artifacts: "auth/artifacts/*"
- prerelease: true
draft: true
allowUpdates: true
updateOnlyUnreleased: true
- name: Upload AAB to PlayStore
- # Temporarily disable GP upload
+ # Temporarily disable GP upload, enable this once desktop build
+ # testing is complete.
if: false
uses: r0adkll/upload-google-play@v1
with:
@@ -135,7 +133,6 @@ jobs:
defaults:
run:
- # Run all the "run" steps inside the auth directory
working-directory: auth
steps:
@@ -189,7 +186,6 @@ jobs:
uses: ncipollo/release-action@v1
with:
artifacts: "auth/artifacts/*"
- prerelease: true
draft: true
allowUpdates: true
updateOnlyUnreleased: true
@@ -199,7 +195,6 @@ jobs:
defaults:
run:
- # Run all the "run" steps inside the auth directory
working-directory: auth
steps:
@@ -291,7 +286,6 @@ jobs:
uses: ncipollo/release-action@v1
with:
artifacts: "auth/artifacts/*"
- prerelease: true
draft: true
allowUpdates: true
updateOnlyUnreleased: true
diff --git a/.github/workflows/cli-release.yml b/.github/workflows/cli-release.yml
new file mode 100644
index 000000000..dabfc8dcf
--- /dev/null
+++ b/.github/workflows/cli-release.yml
@@ -0,0 +1,51 @@
+name: "Release (cli)"
+
+on:
+ push:
+ # Run when a tag matching the pattern "cli-v*"" is pushed
+ #
+ # Tip: to test this workflow, push at tag with a pre-release version,
+ # e.g. `cli-v1.2.3-test`, where 1.2.3 is the expected version number of
+ # the next release that'll go out.
+ #
+ # See: [Note: Testing release workflows that are triggered by tags]
+ tags:
+ - "cli-v*"
+
+jobs:
+ draft-release:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Create a draft GitHub release
+ uses: ncipollo/release-action@v1
+ with:
+ draft: true
+
+ build:
+ runs-on: ubuntu-latest
+ needs: draft-release
+
+ strategy:
+ matrix:
+ goos: [linux, windows, darwin]
+ goarch: ["386", amd64, arm64]
+ exclude:
+ - goarch: "386"
+ goos: darwin
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Build binaries and add to the release
+ uses: wangyoucao577/go-release-action@v1
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ goos: ${{ matrix.goos }}
+ goarch: ${{ matrix.goarch }}
+ asset_name: ente-${{ github.ref_name }}-${{ matrix.goos }}-${{ matrix.goarch }}
+ release_name: ${{ github.ref_name }}
+ goversion: "1.20"
+ project_path: "./cli"
+ md5sum: false
+ sha256sum: true
diff --git a/.github/workflows/mobile-crowdin.yml b/.github/workflows/mobile-crowdin.yml
index 2dd3c4159..dbd978745 100644
--- a/.github/workflows/mobile-crowdin.yml
+++ b/.github/workflows/mobile-crowdin.yml
@@ -32,8 +32,8 @@ jobs:
localization_branch_name: crowdin-translations-mobile
create_pull_request: true
skip_untranslated_strings: true
- pull_request_title: "New translations (mobile)"
- pull_request_body: "New translations via [Crowdin GH Action](https://github.com/crowdin/github-action)"
+ pull_request_title: "[mobile] New translations"
+ pull_request_body: "New translations from [Crowdin](https://crowdin.com/project/ente-photos-app)"
pull_request_base_branch_name: "main"
project_id: 574741
env:
diff --git a/.github/workflows/mobile-lint.yml b/.github/workflows/mobile-lint.yml
index 2f5b332af..c2e54d38a 100644
--- a/.github/workflows/mobile-lint.yml
+++ b/.github/workflows/mobile-lint.yml
@@ -10,6 +10,9 @@ on:
- "mobile/**"
- ".github/workflows/mobile-lint.yml"
+env:
+ FLUTTER_VERSION: "3.13.4"
+
jobs:
lint:
runs-on: ubuntu-latest
@@ -17,20 +20,18 @@ jobs:
run:
working-directory: mobile
steps:
- # Checkout our code, including submodules
- - uses: actions/checkout@v4
+ - name: Checkout code and submodules
+ uses: actions/checkout@v4
with:
submodules: recursive
- # Install Flutter
- - uses: subosito/flutter-action@v2
+ - name: Install Flutter ${{ env.FLUTTER_VERSION }}
+ uses: subosito/flutter-action@v2
with:
channel: "stable"
- flutter-version: "3.13.4"
+ flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- # Install dependencies
- run: flutter pub get
- # Lint
- run: flutter analyze --no-fatal-infos
diff --git a/.github/workflows/mobile-release.yml b/.github/workflows/mobile-release.yml
new file mode 100644
index 000000000..3868da64a
--- /dev/null
+++ b/.github/workflows/mobile-release.yml
@@ -0,0 +1,56 @@
+name: "Release (photos independent)"
+
+on:
+ workflow_dispatch: # Allow manually running the action
+ push:
+ # Run when a tag matching the pattern "photos-v*"" is pushed
+ # See: [Note: Testing release workflows that are triggered by tags]
+ tags:
+ - "photos-v*"
+
+env:
+ FLUTTER_VERSION: "3.13.4"
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ defaults:
+ run:
+ working-directory: mobile
+
+ steps:
+ - name: Checkout code and submodules
+ uses: actions/checkout@v4
+ with:
+ submodules: recursive
+
+ - name: Install Flutter ${{ env.FLUTTER_VERSION }}
+ uses: subosito/flutter-action@v2
+ with:
+ channel: "stable"
+ flutter-version: ${{ env.FLUTTER_VERSION }}
+ cache: true
+
+ - name: Setup keys
+ uses: timheuer/base64-to-file@v1
+ with:
+ fileName: "keystore/ente_photos_key.jks"
+ encodedString: ${{ secrets.SIGNING_KEY_PHOTOS }}
+
+ - name: Build independent APK
+ run: flutter build apk --release --flavor independent && mv build/app/outputs/flutter-apk/app-independent-release.apk build/app/outputs/flutter-apk/ente.apk
+ env:
+ SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_photos_key.jks"
+ SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS_PHOTOS }}
+ SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD_PHOTOS }}
+ SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD_PHOTOS }}
+
+ - name: Checksum
+ run: sha256sum build/app/outputs/flutter-apk/ente.apk > build/app/outputs/flutter-apk/sha256sum
+
+ - name: Create a draft GitHub release
+ uses: ncipollo/release-action@v1
+ with:
+ artifacts: "mobile/build/app/outputs/flutter-apk/ente.apk,mobile/build/app/outputs/flutter-apk/sha256sum"
+ draft: true
diff --git a/.github/workflows/server-lint.yml b/.github/workflows/server-lint.yml
new file mode 100644
index 000000000..e23036a6e
--- /dev/null
+++ b/.github/workflows/server-lint.yml
@@ -0,0 +1,33 @@
+name: "Lint (server)"
+
+on:
+ # Run on every push (this also covers pull requests)
+ push:
+ # See: [Note: Specify branch when specifying a path filter]
+ branches: ["**"]
+ # Only run if something changes in these paths
+ paths:
+ - "server/**"
+ - ".github/workflows/server-lint.yml"
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: server
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup go
+ uses: actions/setup-go@v5
+ with:
+ go-version-file: "server/go.mod"
+ cache: true
+
+ - name: Install dependencies
+ run: sudo apt-get update && sudo apt-get install libsodium-dev
+
+ - name: Lint
+ run: "./scripts/lint.sh"
diff --git a/server/.github/workflows/prod-ci.yml b/.github/workflows/server-release.yml
similarity index 70%
rename from server/.github/workflows/prod-ci.yml
rename to .github/workflows/server-release.yml
index 791e5218c..8f0281951 100644
--- a/server/.github/workflows/prod-ci.yml
+++ b/.github/workflows/server-release.yml
@@ -1,16 +1,10 @@
-name: Prod CI
+name: "Release (server)"
on:
- workflow_dispatch:
- # Enable manual run
- push:
- # Sequence of patterns matched against refs/tags
- tags:
- - "v*" # Push events to matching v*, i.e. v4.2.0
+ workflow_dispatch: # Run manually
jobs:
build:
- # This job will run on ubuntu virtual machine
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
@@ -19,6 +13,8 @@ jobs:
- uses: mr-smithers-excellent/docker-build-push@v6
name: Build & Push
with:
+ dockerfile: server/Dockerfile
+ directory: server
image: ente/museum-prod
registry: rg.fr-par.scw.cloud
enableBuildKit: true
diff --git a/.github/workflows/web-crowdin.yml b/.github/workflows/web-crowdin.yml
index 3ff0c9662..b55aad55d 100644
--- a/.github/workflows/web-crowdin.yml
+++ b/.github/workflows/web-crowdin.yml
@@ -32,8 +32,8 @@ jobs:
localization_branch_name: crowdin-translations-web
create_pull_request: true
skip_untranslated_strings: true
- pull_request_title: "New translations (web)"
- pull_request_body: "New translations via [Crowdin GH Action](https://github.com/crowdin/github-action)"
+ pull_request_title: "[web] New translations"
+ pull_request_body: "New translations from [Crowdin](https://crowdin.com/project/ente-photos-web)"
pull_request_base_branch_name: "main"
project_id: 569613
env:
diff --git a/.github/workflows/web-lint.yml b/.github/workflows/web-lint.yml
index 12c07c869..a905069f6 100644
--- a/.github/workflows/web-lint.yml
+++ b/.github/workflows/web-lint.yml
@@ -26,11 +26,16 @@ jobs:
run:
working-directory: web
steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-node@v4
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup node and enable yarn caching
+ uses: actions/setup-node@v4
with:
node-version: 20
cache: "yarn"
cache-dependency-path: "web/yarn.lock"
+
- run: yarn install
+
- run: yarn lint
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 0ab286d34..22fb8ba19 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -42,7 +42,7 @@ projects to get started:
If your language is not listed for translation, please [create a GitHub
-issue](https://github.com/ente-io/ente/issues/new?title=Request+for+New+Language+Translation&body=Language+name%3A)
+issue](https://github.com/ente-io/ente/issues/new?title=Request+for+New+Language+Translation&body=Language+name%3A+%0AProject%3A+auth%2Fphotos%2Fboth)
to have it added. It is okay to have partial translations. Once ~90% of the
strings in a language get translated, we will start surfacing it in the apps.
@@ -63,8 +63,9 @@ If you'd like to contribute code, it is best to start small.
Each of the individual product/platform specific directories in this repository
have instructions on setting up a dev environment and making changes. The issues
-labelled "good first issues" should be good starting points. Once you have a
-bearing, you can head on to issues labelled "help wanted".
+and discussions (feature requests) labelled "good first issues" should be good
+starting points. Once you have a bearing, you can head on to issues or
+discussions labelled "help wanted".
If you're planning on adding a new feature or making any other substantial
change, please [discuss it with
diff --git a/README.md b/README.md
index de870e301..e99a53e86 100644
--- a/README.md
+++ b/README.md
@@ -70,6 +70,7 @@ existing users will be grandfathered in.
[
](https://apps.apple.com/app/id6444121398)
[
](https://play.google.com/store/apps/details?id=io.ente.auth)
[
](https://f-droid.org/packages/io.ente.auth/)
+[
](https://github.com/ente-io/ente/releases?q=tag%3Av2.0.34&expanded=true)
[
](https://auth.ente.io)
@@ -98,6 +99,8 @@ connect with the community.
[](https://discord.gg/z2YVKkycX3)
[](https://ente.io/blog/rss.xml)
+[](https://twitter.com/enteio) [](https://mstdn.social/@ente)
+
---
## Security
diff --git a/auth/android/app/src/main/AndroidManifest.xml b/auth/android/app/src/main/AndroidManifest.xml
index f2f1146ec..abe72b565 100644
--- a/auth/android/app/src/main/AndroidManifest.xml
+++ b/auth/android/app/src/main/AndroidManifest.xml
@@ -35,6 +35,13 @@
+
+
+
+
+
+
+