git_stamp 4.11.0
git_stamp: ^4.11.0 copied to clipboard
Advanced await-less information provider. From simple information such as build-branch to a screen with Flutter code with commits and change history.
Git Stamp 🏷 #
Advanced await-less information provider and development tool.
🏞️ Preview #
1. Check out the Example #
2. Screenshots #
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
📑️ About #
1. Why Git Stamp? #
When working with Flutter and Git, especially in a team environment, human errors such as forgetting to run git pull can lead to issues during branch merges. Git Stamp helps address these problems by offering:
- Build Date, SHA & Branch Information - Git Stamp allows you to precisely determine which version of the application was deployed. This is especially useful during debugging or verifying issues, as application versions and build numbers are not always updated correctly.
- Debugging and Troubleshooting - Knowing the build date and exact code version (SHA) makes it much easier for the development team to identify the problematic code when users report bugs.
- Avoiding Lost Changes in Teamwork - It allows you to quickly see which commits made it into the final version of the application, helping to prevent missing changes due to overlooked
git pull
commands. - Caching Issues in the Web Version - Even if the latest version is deployed, users may still see an older version due to caching. Git Stamp helps identify whether the deployed version or an outdated one was loaded.
2. 🕯️ Mechanism #
graph TD
CODE((SOURCE CODE))-->SYNC(flutter pub get)
SYNC-->BUILD(flutter build ...)
subgraph "App"
CODE
PUB
PUB((PACKAGES))-->CODE
end
subgraph "Git Stamp"
GIT_CLI(GIT CLI)-->GENERATOR
DART_CLI(DART CLI)-->GENERATOR
FLUTTER_CLI(FLUTTER CLI)-->GENERATOR
end
subgraph "Git Stamp CLI"
GENERATE
ADD
end
GENERATOR((GENERATOR))-->ADD(~$ dart pub add git_stamp)
ADD-->|Add package|PUB
GENERATOR-->GENERATE(~$ dart run git_stamp)
GENERATE-->|Create ./git_stamp directory with .dart files|CODE
3. Motivation #
The main motivation was Minecraft with information like this:
Version: v1.20.81
Build: 24130126
Branch: r/20_u8
SHA: a9081c5429038dcf3f26269f7351d89f
Git Stamp code:
import 'git_stamp/git_stamp.dart';
Text('Version: ${GitStamp.appVersion}'),
Text('Build: ${GitStamp.appBuild}'),
Text('Branch: ${GitStamp.buildBranch}'),
Text('SHA: ${GitStamp.sha}'),
4. Roadmap (Changelog) #
🆕 Version | 🗓️ Date | 📝 Change Description |
---|---|---|
Version 6 | Someday it will be | 📦 JSON data export |
Version 5 | Someday it will be | 🔐 Data encription |
Version 4 | 24.07.2024 | 🌟 New icon build-type |
Version 3 | 30.06.2024 | 🔧 New gen-only build-type |
Version 2 | 10.04.2024 | 🛠️ Commit diff |
Version 1 | 11.12.2023 | 🚀 First version |
5. Sponsor #
Aron Code |
---|
![]() |
🛠️ Installation #
1. pubspec.yaml
#
dart pub add git_stamp
2. .gitignore
#
Important
Add git_stamp to .gitignore.
echo -e "\n/lib/git_stamp/" >> .gitignore
.
If you add a /git_stamp folder for the repository and use the FULL
version, the size of the repository will grow EXPONENTIALLY.
3. analysis_options.yaml
#
analyzer:
exclude:
- lib/git_stamp/**
4. README.md
#
Warning
Add badge to your README.md
😄️
[](https://github.com/arononak/git_stamp)
🏗️ Generating #
1. Examples #
Build type | Pure Dart | CLI Command |
---|---|---|
LITE | NO | dart run git_stamp |
FULL | NO | dart run git_stamp --build-type full |
ICON | NO | dart run git_stamp --build-type icon |
CUSTOM | YES | dart run git_stamp --gen-only build-branch,build-date-time |
2. Benchmarks (Repo 582 Commits) #
Build type | Generating time | Number of dart files generated | Size of generated dart files |
---|---|---|---|
LITE | 6.90s | 29 | 156.6 KB |
FULL | 12.94s | 29 | 2.1MB |
ICON | 0.84s | 10 | 6.5 KB |
3. Tip #
Caution
Generating requires the use of the git
command-line interface (CLI).
4. Custom gen-only
parameters #
# | Parameter |
---|---|
1 | commit-list |
2 | diff-list |
3 | diff-stat-list |
4 | repo-creation-date |
5 | build-branch |
6 | build-date-time |
7 | build-system-info |
8 | build-machine |
9 | repo-path |
10 | observed-files-list |
11 | app-version |
12 | app-build |
13 | app-name |
14 | git-config |
15 | git-remote |
16 | git-remote-list |
💻 Usage #
1. GitStampListTile #
if (kDebugMode) ...[
GitStampListTile(monospaceFontFamily: GoogleFonts.spaceMono().fontFamily),
],
2. GitStampIcon #
if (isProd == false) ...[
GitStampIcon(),
],
3. Custom #
if (isProd == false) ...[
IconButton(
onPressed: () => showGitStampPage(context: context, monospaceFontFamily: GoogleFonts.spaceMono().fontFamily),
icon: const Icon(Icons.book),
),
],
4. showGitStampLicensePage() #
Note
Use function GitStamp.showLicensePage
instead of showLicensePage
if you want the name
and version
to be added automatically.
5. Central GitStamp node for advanced usage: #
git_stamp_node.dart
class GitStamp {
static List<GitStampCommit> get commitList
static GitStampCommit? get latestCommit
static String get sha
static int get commitCount
static Map<String, dynamic> diffList
static Map<String, dynamic> diffStatList
static const String buildBranch
static const String buildDateTime
static const String buildSystemInfo
static GitStampBuildMachine buildMachine
static const String repoCreationDate
static const String repoPath
static String observedFiles
static List<String> observedFilesList
static int observedFilesCount
static const String appVersion
static const String appBuild
static const String appName
static const String gitConfigGlobalUserName
static const String gitConfigGlobalUserEmail
static const String gitConfigUserName
static const String gitConfigUserEmail
static const String gitRemote
static const String gitConfigList
static const String gitCountObjects
static showLicensePage({
required BuildContext context,
Widget? applicationIcon,
String? applicationLegalese,
bool useRootNavigator = false,
})
}
📦 Integration #
GitHub Actions #
.github/workflows/build_and_deploy.yml
name: build_and_deploy
on:
push:
branches: [main]
pull_request_target:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.22.2'
channel: 'stable'
- run: flutter --version
- uses: actions/setup-java@v1
with:
java-version: "12.x"
- run: flutter pub get
- run: dart run git_stamp
- run: flutter build web --release --web-renderer canvaskit
- uses: actions/upload-artifact@master
with:
name: build
path: build/web
deploy:
name: "Deploy"
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@master
with:
name: build
path: build/web
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: "${{ secrets.GITHUB_TOKEN }}"
firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT }}"
projectId: xxx
channelId: live
📝 License #
Note
Copyright © 2024 Aron Onak. All rights reserved.
Licensed under the MIT license.
If you have any feedback, please contact me at arononak@gmail.com