{"id":26117117,"url":"https://github.com/gmeligio/flutter-docker-image","last_synced_at":"2026-05-01T11:01:23.557Z","repository":{"id":157988967,"uuid":"597842551","full_name":"gmeligio/flutter-docker-image","owner":"gmeligio","description":"Docker images for Flutter Continuous Integration (CI)","archived":false,"fork":false,"pushed_at":"2026-04-30T01:04:02.000Z","size":1148,"stargazers_count":18,"open_issues_count":8,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-30T03:13:20.549Z","etag":null,"topics":["docker","flutter"],"latest_commit_sha":null,"homepage":"https://github.com/users/gmeligio/packages/container/package/flutter-android","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gmeligio.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":"docs/contributing.md","funding":null,"license":"LICENSE.md","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-02-05T19:49:57.000Z","updated_at":"2026-04-21T03:09:29.000Z","dependencies_parsed_at":"2023-12-22T01:07:27.046Z","dependency_job_id":"686b43b5-fe64-4ad3-98a0-818b56394cbf","html_url":"https://github.com/gmeligio/flutter-docker-image","commit_stats":null,"previous_names":[],"tags_count":35,"template":false,"template_full_name":null,"purl":"pkg:github/gmeligio/flutter-docker-image","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmeligio%2Fflutter-docker-image","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmeligio%2Fflutter-docker-image/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmeligio%2Fflutter-docker-image/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmeligio%2Fflutter-docker-image/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gmeligio","download_url":"https://codeload.github.com/gmeligio/flutter-docker-image/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmeligio%2Fflutter-docker-image/sbom","scorecard":{"id":1236499,"data":{"date":"2025-08-29T20:37:35Z","repo":{"name":"github.com/gmeligio/flutter-docker-image","commit":"5a8df533699f61ab79af512d1e557f9c66da58b1"},"scorecard":{"version":"v5.2.1","commit":"ab2f6e92482462fe66246d9e32f642855a691dc1"},"score":6.6,"checks":[{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: .github/SECURITY.md:1","Info: Found linked content: .github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: .github/SECURITY.md:1","Info: Found text in security policy: .github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#security-policy"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#binary-artifacts"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: RenovateBot: .github/renovate.json:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dependency-update-tool"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'packages' permission set to 'read': .github/workflows/build.yml:168","Warn: jobLevel 'security-events' permission set to 'write': .github/workflows/build.yml:21","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release.yml:179","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/update_version.yml:56","Info: jobLevel 'packages' permission set to 'read': .github/workflows/update_version.yml:58","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/update_version.yml:14","Warn: jobLevel 'packages' permission set to 'write': .github/workflows/windows.yml:17","Warn: jobLevel 'security-events' permission set to 'write': .github/workflows/windows.yml:21","Info: topLevel 'contents' permission set to 'read': .github/workflows/build.yml:7","Warn: no topLevel permission defined: .github/workflows/changelog.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yml:11","Info: topLevel 'contents' permission set to 'read': .github/workflows/release.yml:9","Info: topLevel 'contents' permission set to 'read': .github/workflows/scorecard.yml:20","Warn: no topLevel permission defined: .github/workflows/tag.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/update_version.yml:8","Info: topLevel 'contents' permission set to 'read': .github/workflows/windows.yml:7"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/11 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":10,"reason":"all dependencies are pinned","details":["Info: Possibly incomplete results: error parsing shell code: \"foo(\" must be followed by ): windows.Dockerfile:29","Info:  45 out of  45 GitHub-owned GitHubAction dependencies pinned","Info:  32 out of  32 third-party GitHubAction dependencies pinned","Info:   4 out of   4 containerImage dependencies pinned","Info:   2 out of   2 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":2,"reason":"badge detected: InProgress","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#cii-best-practices"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 23 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#sast"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#vulnerabilities"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/build.yml:14"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":4,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Info: 'stale review dismissal' is required to merge on branch 'main'","Warn: branch 'main' does not require approvers","Info: codeowner review is required on branch 'main'","Warn: 'last push approval' is disabled on branch 'main'","Info: 'up-to-date branches' is required to merge on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#signed-releases"}},{"name":"Contributors","score":3,"reason":"project has 1 contributing companies or organizations -- score normalized to 3","details":["Info: found contributions from: travelperk"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#contributors"}},{"name":"CI-Tests","score":10,"reason":"23 out of 23 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#ci-tests"}}]},"last_synced_at":"2025-08-29T22:44:16.719Z","repository_id":157988967,"created_at":"2025-08-29T22:44:16.720Z","updated_at":"2025-08-29T22:44:16.720Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32494275,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["docker","flutter"],"created_at":"2025-03-10T10:58:39.799Z","updated_at":"2026-05-01T11:01:23.548Z","avatar_url":"https://github.com/gmeligio.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--- This markdown file was auto-generated from \"readme.mdx\" --\u003e\n\n[![openssf scorecard](https://api.scorecard.dev/projects/github.com/gmeligio/flutter-docker-image/badge)](https://scorecard.dev/viewer/?uri=github.com/gmeligio/flutter-docker-image) [![channel](https://img.shields.io/static/v1?label=channel\u0026message=stable\u0026color=blue)](https://docs.flutter.dev/release/archive?tab=linux) [![flutter-android version](https://img.shields.io/docker/v/gmeligio/flutter-android?label=flutter-android%20version)](https://hub.docker.com/r/gmeligio/flutter-android/tags) [![flutter-android pulls](https://img.shields.io/docker/pulls/gmeligio/flutter-android?label=flutter-android%20pulls)](https://hub.docker.com/r/gmeligio/flutter-android/tags)\n\n# Flutter Docker Image\n\nDocker images for Flutter Continuous Integration (CI). The source is available [on GitHub](https://github.com/gmeligio/flutter-docker-image).\n\nThe images includes the minimum tools to run Flutter and build apps. The versions of the tools installed are based on the official [Flutter](https://github.com/flutter/flutter) repository. The final goal is that Flutter doesn't need to download anything like tools or SDKs when running the container.\n\n## Contents\n\n* [Features](#features)\n* [Running Containers](#running-containers)\n* [Tags](#tags)\n* [Building Locally](#building-locally)\n* [Roadmap](#roadmap)\n* [FAQ](#faq)  \n   * [Why the images are not published in the AWS ECR Public registry?](#why-the-images-are-not-published-in-the-aws-ecr-public-registry)  \n   * [Why there is no dynamic tag like latest?](#why-there-is-no-dynamic-tag-like-latest)\n* [Contributing](#contributing)\n* [License](#license)\n\n## Features\n\n* Installed Flutter SDK 3.41.9.\n* Analytics disabled by default, opt-in if `ENABLE_ANALYTICS` environment variable is passed when running the container.\n* Rootless user `flutter:flutter`, with permissions to run on Github workflows and GitLab CI.\n* Cached Fastlane gem 2.233.1.\n* Minimal image with predownloaded SDKs and tools ready to run `flutter` commands for the Android platform.\n\nPredownloaded SDKs and tools in Android:\n\n* Licenses accepted\n* Android SDK Platforms: 36\n* Android NDK: 28.2.13676358\n* Gradle: 8.14\n\n## Running Containers\n\n| Registry                  | flutter-android                                                                                                            |\n| ------------------------- | -------------------------------------------------------------------------------------------------------------------------- |\n| Docker Hub                | [gmeligio/flutter-android:3.41.9](https://hub.docker.com/r/gmeligio/flutter-android)                                       |\n| GitHub Container Registry | [ghcr.io/gmeligio/flutter-android:3.41.9](https://github.com/gmeligio/flutter-docker-image/pkgs/container/flutter-android) |\n| Quay                      | [quay.io/gmeligio/flutter-android:3.41.9](https://quay.io/repository/gmeligio/flutter-android)                             |\n\nOn the terminal:\n\n```bash\n# From GitHub Container Registry\ndocker run --rm -it ghcr.io/gmeligio/flutter-android:3.41.9 bash\n```\n\nOn a workflow in GitHub Actions:\n\n```yaml\njobs:\n  build:\n    runs-on: ubuntu-22.04\n    container:\n      image: ghcr.io/gmeligio/flutter-android:3.41.9\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v2\n      - name: Build\n        run: flutter build apk\n```\n\nOn a `.gitlab-ci.yml` in GitLab CI:\n\n```yaml\nbuild:\n  image: ghcr.io/gmeligio/flutter-android:3.41.9\n  script:\n    - flutter build apk\n```\n\nFastlane:\n\n```bash\n# Ruby bundler is available in the container.\n# The fastlane gem is cached but not installed\n# For more information, see https://docs.fastlane.tools\n\n# Use --prefer-local to download gems only if they are not cached\nbundle install --prefer-local\nbundle exec fastlane\n```\n\n## Tags\n\nEvery new tag on the flutter stable channel gets built. The tag is composed of the Flutter version used to build the image:\n\n* Docker image: gmeligio/flutter-android:3.41.9\n* Flutter version: 3.41.9\n\n## Building Locally\n\nThe android.Dockerfile expects a few arguments:\n\n* `flutter_version \u003cstring\u003e`: The version of Flutter to use when building. Example: 3.41.9\n* `android_build_tools_version \u003cstring\u003e`: The version of the Android SDK Build Tools to install. Example: 35.0.0\n* `android_platform_versions \u003clist\u003e`: The versions of the Android SDK Platforms to install, separated by spaces. Example: 36\n\n```bash\n# Android\ndocker build --target android --build-arg flutter_version=3.41.9 --build-arg fastlane_version=2.233.1 --build-arg android_build_tools_version=35.0.0 --build-arg android_platform_versions=\"36\" -t android-test .\n```\n\n## Roadmap\n\n* Minimal image with predownloaded SDKs and tools ready to run `flutter` commands for the platforms:  \n   * iOS  \n   * Linux  \n   * Windows  \n   * Web\n* Android features:  \n   * Android emulator\n\n## FAQ\n\n### Why the images are not published in the AWS ECR Public registry?\n\nThe storage of the images starts to cost after 50 GB and increases with every pushed image because the AWS Free Tier covers up to 50 GB of total storage for free in ECR Public.\n\n### Why there is no dynamic tag like `latest`?\n\nThere is no `latest` Docker tag on purpose. You need to specify the version of the image you want to use. The reason for that is that `latest` can cause unexpected behavior when rerunning a past CI job that was expected to use the old build of the `latest` tag. There are multiple articles explaining more about this reasoning like [What's Wrong With The Docker :latest Tag?](https://vsupalov.com/docker-latest-tag/) and [The misunderstood Docker tag: latest](https://medium.com/@mccode/the-misunderstood-docker-tag-latest-af3babfd6375).\n\n## Contributing\n\nSee [Contributing](docs/contributing.md).\n\n## License\n\nFlutter is licensed under [BSD 3-Clause \"New\" or \"Revised\" license](https://github.com/flutter/flutter/blob/master/LICENSE).\n\nAs with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained).\n\nAs for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within.\n\nThe [sources](https://github.com/gmeligio/flutter-docker-image) for producing gmeligio/flutter-android Docker images are licensed under [MIT License](LICENSE.md).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgmeligio%2Fflutter-docker-image","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgmeligio%2Fflutter-docker-image","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgmeligio%2Fflutter-docker-image/lists"}