Skip to content

extract Fastlane - #6788

Open
tobiasKaminsky wants to merge 1 commit into
masterfrom
extractFastlane
Open

tobiasKaminsky wants to merge 1 commit into
masterfrom
extractFastlane

Conversation

@tobiasKaminsky

Copy link
Copy Markdown
Member

Part of nextcloud/android-config#391

🖼️ Screenshots

🏚️ Before 🏡 After
B A

🚧 TODO

  • ...

🏁 Checklist

  • ⛑️ Tests (unit and/or integration) are included or not needed
  • 🔖 Capability is checked or not needed
  • 🔙 Backport requests are created or not needed: /backport to stable-xx.x
  • 📅 Milestone is set
  • 🌸 PR title is meaningful (if it should be in the changelog: is it meaningful to users?)

🤖 AI (if applicable)

  • The content of this PR was partly or fully generated using AI

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
@coderabbitai

coderabbitai Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

📝 Walkthrough

Walkthrough

The changes add Talk app and repository identifiers to fastlane/Fastfile, map signing environment variables to Gradle properties, document the signing and GitHub token variables, and import common.Fastfile. They remove the uploadAlphaToPlayStore lane. The .gitignore file now excludes fastlane/ruby.

Priority: ⬇️ Low

Merge Risk: 🟡 Moderate · up to 8d967

Fastlane commands cannot load this configuration because its imported shared file is missing. Provide that file or correct the import before merging; no repository-controlled workflow was found invoking the removed alpha lane.

Security Architecture Review

Security architecture risk: 🔵 Low · up to 8d967

The new release setup depends on a shared configuration file that is not included here. Its signing and publishing safeguards cannot be verified from this change. No exploitable security issue is established.

Retained concerns

  • Low · reliability · inferred: The new release path depends on a shared Fastfile that is not present in the repository. Without externally supplied configuration, Fastlane cannot load the import; with it, the release entrypoint and signing safeguards cannot be assessed here. This dependency also limits assurance that security releases can be published and recovered as intended.
Security review details

Security Blast Radius

  • inferred — The affected authority is potentially Talk release signing and publishing. The former lane's destination was the Play alpha track; the new effective destination cannot be bounded from the local configuration.

Trust Boundaries and Controls

  • inferred — Signing inputs cross from the execution environment into release configuration. Whether the shared lanes use those inputs, validate signing identity, or restrict publication is unknown; no attacker-controlled route or control bypass is established.

Hardening Proposals

  • proposed — Make shared Fastlane provisioning and its version explicit, and verify the intended signing identity, publication destination, and failure or retry behavior before relying on the new release path.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description includes the required template sections and links to the related pull request, but it provides no substantive change summary. The screenshots remain placeholders, the TODO is unchanged… Add a concise summary of the Fastlane extraction, describe the removed and added configuration, replace or remove screenshot placeholders, complete the TODO section, and update each applicable checklist item.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title, "extract Fastlane," accurately identifies the main change: moving Fastlane configuration into an extracted setup. It is concise and related to the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Description check

Explanation

The description includes the required template sections and links to the related pull request, but it provides no substantive change summary. The screenshots remain placeholders, the TODO is unchanged, and all checklist items are unchecked.

  • Fix all pre-merge checks with AI

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 2a74fabf-860b-4bc2-9633-42eeb96a310f

📥 Commits

Reviewing files that changed from the base of the PR and between f704b95 and 8d96760.

📒 Files selected for processing (2)
  • .gitignore
  • fastlane/Fastfile

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.

Comment thread fastlane/Fastfile
Comment on lines +21 to +26
GRADLE_SIGNING_PROPERTIES = {
"android.injected.signing.store.file" => ENV["FASTLANE_TALK_UPLOAD_STORE_FILE"],
"android.injected.signing.store.password" => ENV["FASTLANE_TALK_UPLOAD_STORE_PASSWORD"],
"android.injected.signing.key.alias" => ENV["FASTLANE_TALK_UPLOAD_KEY_ALIAS"],
"android.injected.signing.key.password" => ENV["FASTLANE_TALK_UPLOAD_KEY_PASSWORD"],
}.freeze

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Validate the signing environment variables before use.

GRADLE_SIGNING_PROPERTIES reads four ENV values with no presence check. If a variable is unset, the value is nil. Gradle then receives a missing signing property. The build can fail late with an unclear error. It can also produce an unsigned or wrongly signed artifact.

Fail fast if a value is missing or empty. Use ENV.fetch with a check, or UI.user_error!.

Proposed fix
+SIGNING_ENV_KEYS = %w[
+  FASTLANE_TALK_UPLOAD_STORE_FILE
+  FASTLANE_TALK_UPLOAD_STORE_PASSWORD
+  FASTLANE_TALK_UPLOAD_KEY_ALIAS
+  FASTLANE_TALK_UPLOAD_KEY_PASSWORD
+].freeze
+
+missing = SIGNING_ENV_KEYS.select { |k| ENV[k].to_s.empty? }
+UI.user_error!("Missing env vars: #{missing.join(', ')}") unless missing.empty?
+
 GRADLE_SIGNING_PROPERTIES = {

If these values are only needed by some lanes, run the check inside those lanes instead of at load time. The load-time check would also break lanes that need no signing.

Based on learnings: validate that security-sensitive values from environment variables are present and non-empty, and fail fast if they are missing.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
GRADLE_SIGNING_PROPERTIES = {
"android.injected.signing.store.file" => ENV["FASTLANE_TALK_UPLOAD_STORE_FILE"],
"android.injected.signing.store.password" => ENV["FASTLANE_TALK_UPLOAD_STORE_PASSWORD"],
"android.injected.signing.key.alias" => ENV["FASTLANE_TALK_UPLOAD_KEY_ALIAS"],
"android.injected.signing.key.password" => ENV["FASTLANE_TALK_UPLOAD_KEY_PASSWORD"],
}.freeze
SIGNING_ENV_KEYS = %w[
FASTLANE_TALK_UPLOAD_STORE_FILE
FASTLANE_TALK_UPLOAD_STORE_PASSWORD
FASTLANE_TALK_UPLOAD_KEY_ALIAS
FASTLANE_TALK_UPLOAD_KEY_PASSWORD
].freeze
missing = SIGNING_ENV_KEYS.select { |k| ENV[k].to_s.empty? }
UI.user_error!("Missing env vars: #{missing.join(', ')}") unless missing.empty?
GRADLE_SIGNING_PROPERTIES = {
"android.injected.signing.store.file" => ENV["FASTLANE_TALK_UPLOAD_STORE_FILE"],
"android.injected.signing.store.password" => ENV["FASTLANE_TALK_UPLOAD_STORE_PASSWORD"],
"android.injected.signing.key.alias" => ENV["FASTLANE_TALK_UPLOAD_KEY_ALIAS"],
"android.injected.signing.key.password" => ENV["FASTLANE_TALK_UPLOAD_KEY_PASSWORD"],
}.freeze

Source: Learnings

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

makes sense, @tobiasKaminsky ?

Comment thread fastlane/Fastfile
@github-actions

Copy link
Copy Markdown
Contributor

📱 QA build

Download app-qa-debug.apk
QR code Open the QR code for this download
Commit 8d96760
Version 6788
Available until 7 days after this build

The QA build installs alongside a released Nextcloud app, so you can keep
using your existing install while testing.

Downloading the file requires a GitHub account, so open this link on the
device you want to test on, or transfer the APK to it.

@github-actions

Copy link
Copy Markdown
Contributor

Codacy

Lint

TypemasterPR
Warnings138138
Errors1818

SpotBugs

CategoryBaseNew
Bad practice77
Correctness1111
Dodgy code4545
Internationalization33
Malicious code vulnerability33
Performance88
Security1111
Total8888

@mahibi mahibi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

up to you @tobiasKaminsky if the "Fail fast" suggestion should be implemented here or if you plan to handle this in the config repo?

Comment thread fastlane/Fastfile
Comment on lines +21 to +26
GRADLE_SIGNING_PROPERTIES = {
"android.injected.signing.store.file" => ENV["FASTLANE_TALK_UPLOAD_STORE_FILE"],
"android.injected.signing.store.password" => ENV["FASTLANE_TALK_UPLOAD_STORE_PASSWORD"],
"android.injected.signing.key.alias" => ENV["FASTLANE_TALK_UPLOAD_KEY_ALIAS"],
"android.injected.signing.key.password" => ENV["FASTLANE_TALK_UPLOAD_KEY_PASSWORD"],
}.freeze

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

makes sense, @tobiasKaminsky ?

Comment thread fastlane/Fastfile
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants