{"id":25072484,"url":"https://github.com/bixat/flutter_ci_cd","last_synced_at":"2025-04-14T22:02:38.559Z","repository":{"id":128689637,"uuid":"528463756","full_name":"bixat/flutter_ci_cd","owner":"bixat","description":"CI/CD \u0026 branching template for flutter apps","archived":false,"fork":false,"pushed_at":"2024-05-27T19:33:00.000Z","size":1512,"stargazers_count":66,"open_issues_count":4,"forks_count":11,"subscribers_count":4,"default_branch":"dev","last_synced_at":"2025-04-14T22:02:21.444Z","etag":null,"topics":["android","automation","branching-process","branching-strategies","continous-deployment","continuous-delivery","continuous-integration","dart","fastlane","fastlane-android","fastlane-ios","flutter","ios","web","website","workflow-automation"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bixat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-24T14:37:22.000Z","updated_at":"2025-02-26T06:34:59.000Z","dependencies_parsed_at":"2024-04-24T06:09:45.355Z","dependency_job_id":"b099b283-0ace-47dc-bb7d-1a02217612c2","html_url":"https://github.com/bixat/flutter_ci_cd","commit_stats":null,"previous_names":["bixat/flutter_ci_cd"],"tags_count":35,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bixat%2Fflutter_ci_cd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bixat%2Fflutter_ci_cd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bixat%2Fflutter_ci_cd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bixat%2Fflutter_ci_cd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bixat","download_url":"https://codeload.github.com/bixat/flutter_ci_cd/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248968737,"owners_count":21191158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","automation","branching-process","branching-strategies","continous-deployment","continuous-delivery","continuous-integration","dart","fastlane","fastlane-android","fastlane-ios","flutter","ios","web","website","workflow-automation"],"created_at":"2025-02-06T22:29:32.079Z","updated_at":"2025-04-14T22:02:38.506Z","avatar_url":"https://github.com/bixat.png","language":"Dart","readme":"[![CI Dev](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/ci-dev.yaml/badge.svg)](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/ci-dev.yaml)\n[![Bump app version based on PR labels](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/bump-version-based-on-labels.yaml/badge.svg)](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/bump-version-based-on-labels.yaml)\n[![Deploy Android \u0026 Web](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/deploy.yaml/badge.svg)](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/deploy.yaml)\n[![Promote Google Play build from track to another](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/promote.yaml/badge.svg)](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/promote.yaml)\n[![Deploy web \u0026 android for testing](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/ci-staging.yaml/badge.svg)](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/ci-staging.yaml)\n[![Deploy web \u0026 Promote Android to production](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/cd-stable.yaml/badge.svg)](https://github.com/M97Chahboun/flutter_ci_cd/actions/workflows/cd-stable.yaml)\n\n# Flutter CI CD \u0026 Branching Template\n\nCI/CD, Branching \u0026 (optional VVR Architecture) template for flutter apps.\n\n`VVR` : ViewModel View Request based on [MVCRocket Package](https://github.com/JahezAcademy/mvc_rocket/)\n\nSupported Platforms : Android \u0026 web\n\nWIP : Windows, Linux, Mac, \u0026 IOS\n\n## REPO WORKFLOW\n\n![alt text](repo_workflow.jpg)\n\n\n## TODO\n- [x] Bump version based on labels when label PR on dev branch\n- [x] Create tag based on current version\n- [x] Analyze \u0026 Test Dev branch PR\n- [x] Bump build (Version code) when merge PR on staging branch\n- [x] Deploy Android to play store on testing track based on labels (default alpha) \n- [x] Deploy Web for testing\n- [ ] Deploy IOS on Testflight for Testing\n- [ ] Notify Testers (slack, telegram...)\n- [x] Promote Android to production when merge PR on stable branch\n- [ ] Promote IOS to production when merge PR on stable branch\n- [x] Deploy Web to production when merge PR on stable branch\n- [ ] Upload desktop version on release assets (windows, linux \u0026 mac)\n- [x] Create release \u0026 generate release notes based on PR's when merge PR on stable\n- [ ] Notify Users (slack, telegram...)\n- [x] Manually Workflows for deploy \u0026 promote build\n\n## HOW TO USE\n1. Click to `Use this template` button \u0026 check `Include all branches`\n2. Add follow keys to https://github.com/username/repo/settings/secrets/actions replace username \u0026 repo :\n\t- `PLAY_STORE_UPLOAD_KEY` : Past your keystore file encode64 you can use [this](https://www.base64encode.org) for encode file\n\t- `REPO_TOKEN` : Follow [steps](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)\n\t- `KEYSTORE_STORE_PASSWORD` : storePassword from key.properties file\n\t- `KEYSTORE_KEY_PASSWORD` : keyPassword from key.properties file\n\t- `KEYSTORE_KEY_ALIAS` : keyAlias from key.properties file\n\t- `GCP_SA_KEY` :  normal service account key(json format) or a base64 encoded service account key with the needed permissions for what you are trying to deploy/update. If you're deploying functions, you would also need the Cloud Functions Developer role, and the Cloud Scheduler Admin for scheduled functions. Since the deploy service account is using the App Engine default service account in the deploy process, it also needs the Service Account User role. If you're only doing Hosting, Firebase Hosting Admin is enough. https://firebase.google.com/docs/hosting/github-integration\n\t- `PLAY_STORE_CONFIG_JSON`: follow [steps](https://www.skoumal.com/en/generate-json-key-for-google-play-deployment/)\n3. Create required labels :\n\t- for sub branches (feature, enhance, fix) branches create `major`, `minor` \u0026 `patch` labels as part of version\n\t- for staging branch we need `alpha`, `beta` \u0026 `internal` labels as tracks\n4. Make sure you follow the workflow in [the image](repo_workflow.jpg) Particular how you merge your PR.\n\n## RESSOURCES \u0026 TOOLS\n- [Fastlane](https://fastlane.tools)\n- [Github Workflow](https://docs.github.com/en/actions/using-workflows)\n- [Use any programming language on github workflow](https://medium.com/@m97chahboun/how-to-use-any-programming-language-on-github-workflow-f5e389cfd886), [alernative link](https://dev.to/m97chahboun/how-to-use-any-programming-language-on-github-workflow-399m)\n- [bump flutter app version fastlane-plugin](https://github.com/M97Chahboun/fastlane-plugin-flutter_bump_version)\n- [MVCRocket Package](https://github.com/JahezAcademy/mvc_rocket/)\n\n⚙️ Feel free to add 💡 idea or 🖥 contribute 😊","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbixat%2Fflutter_ci_cd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbixat%2Fflutter_ci_cd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbixat%2Fflutter_ci_cd/lists"}