-
Notifications
You must be signed in to change notification settings - Fork 0
Upgrades bottom nav bar Upgrade Bottom Navigation Bar #61
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
f1c72e2
b47288e
5f606b2
a029988
dbe4352
d8a85e6
9a70573
34095d6
490237c
3938598
6553a7d
eaca115
fefbd92
538ef64
f111df6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| # Codecov Configuration for RepForge (Devasy/RepForge) | ||
| codecov: | ||
| require_ci_to_pass: yes | ||
|
|
||
| coverage: | ||
| precision: 2 | ||
| round: down | ||
| range: "70...100" | ||
|
|
||
| status: | ||
| project: | ||
| default: | ||
| target: auto | ||
| threshold: 1% | ||
| patch: | ||
| default: | ||
| target: auto | ||
|
|
||
| ignore: | ||
| - "**/*.g.dart" | ||
| - "**/*.freezed.dart" | ||
| - "workout-logger/test/**/*" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -6,6 +6,10 @@ on: | |
| - main | ||
| workflow_dispatch: | ||
|
|
||
| concurrency: | ||
| group: release-${{ github.ref }} | ||
| cancel-in-progress: false | ||
|
|
||
| jobs: | ||
| release: | ||
| name: Build and Release APK | ||
|
|
@@ -18,17 +22,20 @@ jobs: | |
|
|
||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v4 | ||
| uses: actions/checkout@v7 | ||
| with: | ||
| fetch-depth: 0 # Fetch all history for proper versioning | ||
| token: ${{ secrets.GITHUB_TOKEN }} | ||
|
|
||
| - name: Set up Java | ||
| uses: actions/setup-java@v4 | ||
| uses: actions/setup-java@v5 | ||
| with: | ||
| distribution: 'temurin' | ||
| java-version: '17' | ||
|
|
||
| - name: Setup Gradle Build Cache | ||
| uses: gradle/actions/setup-gradle@v6 | ||
|
|
||
| - name: Set up Flutter | ||
| uses: subosito/flutter-action@v2 | ||
| with: | ||
|
|
@@ -117,6 +124,10 @@ jobs: | |
|
|
||
| - name: Decode release keystore | ||
| run: | | ||
| if [ -z "${{ secrets.KEYSTORE_BASE64 }}" ]; then | ||
| echo "Error: KEYSTORE_BASE64 secret is not configured in repository secrets." | ||
| exit 1 | ||
| fi | ||
|
Comment on lines
+127
to
+130
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win Fail releases when any signing credential is absent. The workflow validates only
🧰 Tools🪛 zizmor (1.26.1)[warning] 127-127: code injection via template expansion (template-injection): may expand into attacker-controllable code (template-injection) 📍 Affects 2 files
🤖 Prompt for AI Agents |
||
| echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > /tmp/repforge-release.jks | ||
|
|
||
| - name: Build APK | ||
|
|
@@ -126,7 +137,7 @@ jobs: | |
| KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} | ||
| KEY_ALIAS: ${{ secrets.KEY_ALIAS }} | ||
| KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} | ||
| run: flutter build apk --release --split-per-abi | ||
| run: flutter build apk --release --split-per-abi --obfuscate --split-debug-info=build/app/outputs/symbols | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win Retain Dart and R8 deobfuscation artifacts. This runner is ephemeral and later steps only publish APKs, so production stack traces cannot be decoded. Upload 🤖 Prompt for AI Agents |
||
|
|
||
| - name: Rename APKs | ||
| run: | | ||
|
|
@@ -150,7 +161,7 @@ jobs: | |
|
|
||
| - name: Create GitHub Release | ||
| if: github.event_name == 'push' && steps.commit_version.outputs.committed == 'true' | ||
| uses: softprops/action-gh-release@v2 | ||
| uses: softprops/action-gh-release@v3 | ||
| with: | ||
| tag_name: v${{ steps.version.outputs.value }} | ||
| name: RepForge v${{ steps.version.outputs.value }} | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -8,14 +8,21 @@ on: | |||||||||||||||||
| release: | ||||||||||||||||||
| types: [published] | ||||||||||||||||||
|
|
||||||||||||||||||
| concurrency: | ||||||||||||||||||
| group: ${{ github.workflow }}-${{ github.ref }} | ||||||||||||||||||
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | ||||||||||||||||||
|
|
||||||||||||||||||
| jobs: | ||||||||||||||||||
| test: | ||||||||||||||||||
| name: Analyze & Test | ||||||||||||||||||
| runs-on: ubuntu-latest | ||||||||||||||||||
|
|
||||||||||||||||||
| permissions: | ||||||||||||||||||
| contents: read | ||||||||||||||||||
|
|
||||||||||||||||||
| steps: | ||||||||||||||||||
| - name: Checkout repository | ||||||||||||||||||
| uses: actions/checkout@v6 | ||||||||||||||||||
| uses: actions/checkout@v7 | ||||||||||||||||||
|
|
||||||||||||||||||
| - name: Set up Flutter | ||||||||||||||||||
| id: flutter-action | ||||||||||||||||||
|
|
@@ -28,13 +35,14 @@ jobs: | |||||||||||||||||
| pub-cache-key: "flutter-pub-:os:-:channel:-:version:-:arch:-${{ hashFiles('workout-logger/pubspec.lock') }}" | ||||||||||||||||||
|
|
||||||||||||||||||
| - name: Install dependencies | ||||||||||||||||||
| if: steps.flutter-action.outputs.PUB-CACHE-HIT != 'true' | ||||||||||||||||||
| if: steps.flutter-action.outputs.CACHE-HIT != 'true' | ||||||||||||||||||
| working-directory: ./workout-logger | ||||||||||||||||||
| run: flutter pub get | ||||||||||||||||||
|
Comment on lines
37
to
40
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== workflow files =="
git ls-files .github/workflows || true
echo "== test workflow excerpt =="
if [ -f .github/workflows/test.yml ]; then
nl -ba .github/workflows/test.yml | sed -n '1,140p'
fi
echo "== flutter-action/cache references =="
rg -n "flutter-action|CACHE-HIT|flutter pub get|pub get|dart_tool/package_config|flutter analyze|flutter test" .github/workflows workout-logger 2>/dev/null || true
echo "== flutter action usage context in tracked files =="
for f in $(git ls-files .github/workflows); do
echo "--- $f"
nl -ba "$f" | sed -n '1,220p'
doneRepository: Devasy/RepForge Length of output: 299 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== workflow excerpts =="
for f in .github/workflows/release.yml .github/workflows/test.yml; do
if [ -f "$f" ]; then
echo "--- $f"
awk '{printf "%6d %s\n", NR, $0}' "$f" | sed -n '1,220p'
fi
done
echo "== search relevant references =="
rg -n "flutter-action|CACHE-HIT|flutter pub get|pub get|dart_tool/package_config|flutter analyze|flutter test|subosito" .github/workflows workout-logger 2>/dev/null || trueRepository: Devasy/RepForge Length of output: 11942 🌐 Web query:
💡 Result: The subosito/flutter-action action (v2) with cache: true enabled does not automatically cache the.dart_tool/package_config.json file or your project's generated files [1][2][3]. When you enable cache: true, the action uses actions/cache internally to cache two specific areas [4]: 1. The Flutter SDK installation [1][4]. 2. The Dart/Flutter pub package cache (commonly located in ~/.pub-cache) [1][4][5]. The CACHE-HIT and PUB-CACHE-HIT outputs provided by the action reflect whether an exact match was found for these specific SDK and pub caches, respectively [2][6][3]. They do not indicate the presence or validity of your project's local build artifacts like.dart_tool/package_config.json [2][7]. If you need to persist generated files (such as those in.dart_tool,.g.dart files, etc.) across workflow runs, you must explicitly add a separate actions/cache step to your workflow configuration [8]. Example of how to manually cache these files: - name: Cache generated files uses: actions/cache@v4 with: path: |.dart_tool/package_config.json /.dart_tool key: build-artifacts-${{ hashFiles('/pubspec.lock') }} [8] The CACHE-HIT output from subosito/flutter-action is solely for the action's own internal caching logic [2][9]. You should not rely on it as a proxy for the state of your application's generated build artifacts [2][7]. Citations:
Run A cache hit from Proposed fix - name: Install dependencies
- if: steps.flutter-action.outputs.CACHE-HIT != 'true'
working-directory: ./workout-logger
run: flutter pub get📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||
|
|
||||||||||||||||||
| - name: Analyze | ||||||||||||||||||
| working-directory: ./workout-logger | ||||||||||||||||||
| run: | | ||||||||||||||||||
| set -o pipefail | ||||||||||||||||||
| # Only fail on errors, ignore warnings and info messages | ||||||||||||||||||
| flutter analyze --no-fatal-infos --no-fatal-warnings | tee analyze_output.txt | ||||||||||||||||||
|
|
||||||||||||||||||
|
|
@@ -53,3 +61,5 @@ jobs: | |||||||||||||||||
| with: | ||||||||||||||||||
| files: workout-logger/coverage/lcov.info | ||||||||||||||||||
| token: ${{ secrets.CODECOV_TOKEN }} | ||||||||||||||||||
| slug: Devasy/RepForge | ||||||||||||||||||
|
|
||||||||||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win Remove the trailing blank line. YAMLlint reports this as an error, so the workflow lint check will fail. 🧰 Tools🪛 YAMLlint (1.37.1)[error] 64-64: too many blank lines (1 > 0) (empty-lines) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| # Suppress missing class warnings for Play Core deferred components in Flutter engine | ||
| -dontwarn com.google.android.play.core.** | ||
|
|
||
| # Flutter Wrapper Rules | ||
| -keep class io.flutter.app.** { *; } | ||
| -keep class io.flutter.plugin.** { *; } | ||
| -keep class io.flutter.util.** { *; } | ||
| -keep class io.flutter.view.** { *; } | ||
| -keep class io.flutter.embedding.** { *; } | ||
| -keep class io.flutter.provider.** { *; } | ||
| -keep class io.flutter.plugin.editing.** { *; } | ||
|
|
||
| # Keep Native plugins and Health Connect interfaces | ||
| -dontwarn com.google.android.gms.** |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| # Local Android Release Keystore Configuration | ||
| # Fill in your local keystore path and passwords below. | ||
| # Note: This file should NEVER be committed to Git. | ||
|
|
||
| storeFile=C:/path/to/your/upload-keystore.jks | ||
| storePassword=your_store_password | ||
| keyAlias=your_key_alias | ||
| keyPassword=your_key_password |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
Repository: Devasy/RepForge
Length of output: 907
🏁 Script executed:
Repository: Devasy/RepForge
Length of output: 601
Pin GitHub Actions to immutable commit SHAs. Mutable tags/branches let upstream changes alter release or test workflow execution. Pin the checked-in action references to reviewed commit SHAs, including
actions/checkout,actions/setup-java,gradle/actions/setup-gradle,subosito/flutter-action,actions/upload-artifact,softprops/action-gh-release, andcodecov/codecov-action.🧰 Tools
🪛 zizmor (1.26.1)
[error] 25-25: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)
(unpinned-uses)
📍 Affects 2 files
.github/workflows/release.yml#L25-L25(this comment).github/workflows/release.yml#L31-L31.github/workflows/release.yml#L37-L37.github/workflows/release.yml#L164-L164.github/workflows/test.yml#L25-L25🤖 Prompt for AI Agents
Source: Linters/SAST tools