Compare commits

...

19 Commits

Author SHA1 Message Date
Mathias Beaulieu-Duncan b5ccf2effa Remove dev tag from documentation
The -dev tag was only used for pipeline testing.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:53:53 -05:00
Mathias Beaulieu-Duncan a92326374d Replace CLI examples with multi-stage Dockerfile examples
- Web: Build app and serve with nginx
- Android: Extract APK from multi-stage build
- Linux: Build desktop app with minimal runtime
- Consolidated CI/CD section

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:53:29 -05:00
Mathias Beaulieu-Duncan eeaf0d00a5 Use darker orange for amd64 badges to complement arm64 green
Changed from standard orange to #E65100 (deep orange) for better
visual balance with the #2e7d32 dark green arm64 badges.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:50:53 -05:00
Mathias Beaulieu-Duncan d6ea6233d7 Make arch badges clickable to Docker Hub tags page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:48:44 -05:00
Mathias Beaulieu-Duncan 00fd040d67 Use darker green for arm64 badge, add separator
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:48:06 -05:00
Mathias Beaulieu-Duncan 63c6385410 Add colored arch badges: amd64 orange, arm64 green
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:46:59 -05:00
Mathias Beaulieu-Duncan e8a9efce53 Use actual version tags in variant table, remove latest badge
- Show web-3.38.9, android-3.38.9, linux-3.38.9 instead of generic names
- Remove Docker Version latest badge
- Update sync workflow to also update Flutter versions in badges

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:46:24 -05:00
Mathias Beaulieu-Duncan 950e0c8877 Move Git Repository badge to first position
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:45:07 -05:00
Mathias Beaulieu-Duncan 4ebb852202 Trigger badge sync only after build workflow completes
Use workflow_run instead of push trigger to ensure badges
update after images are actually built.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:44:45 -05:00
Mathias Beaulieu-Duncan 5264393e39 Fix size badges to use existing -dev tags
The -latest tags don't exist yet, use -dev tags for size display.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:43:37 -05:00
Mathias Beaulieu-Duncan ef7281a710 Add workflow to auto-sync README badges with Dockerfile versions
Automatically updates Android SDK version badge when Dockerfile changes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:42:48 -05:00
Mathias Beaulieu-Duncan 5d5634c4a1 Add Android SDK version badge
Links to Android build-tools release notes page.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:41:43 -05:00
Mathias Beaulieu-Duncan b574607caf Add dynamic badges to images table
- Clickable Docker badges linking to specific tag pages
- Dynamic image sizes from Docker Hub
- Architecture column showing amd64/arm64 support

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:40:05 -05:00
Mathias Beaulieu-Duncan 091a50fe1a Fix badge URLs and use HTML for new tab links
- Remove broken Docker Scout and SLSA badges
- Remove LICENSE badge (no LICENSE file)
- Fix image size badge to use version instead
- Add Wolfi base badge
- Use HTML anchor tags with target="_blank"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:38:53 -05:00
Mathias Beaulieu-Duncan 7336904388 Add badges for Docker Hub, Git, pulls, size, and compliance
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:35:42 -05:00
Mathias Beaulieu-Duncan 88046dda7f Update README with friendlier tone
Focus on Wolfi benefits rather than competitor comparisons.
Highlight lightweight nature and automatic updates.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:33:34 -05:00
Mathias Beaulieu-Duncan 09c23f66ff Add README with usage examples and size comparison
Document the Flutter SDK Docker images with:
- Image variants and sizes
- Comparison showing 75% smaller than alternatives
- CI/CD examples for GitHub, GitLab, and Gitea
- Security features (zero CVEs, SBOM, provenance)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:32:22 -05:00
Mathias Beaulieu-Duncan 68b6e6ec54 Remove rav1e to eliminate paste crate CVE in Linux image
Build and Push Flutter SDK Image / build-and-push (Flutter SDK for Linux desktop CI builds, Dockerfile.linux, linux) (release) Successful in 21m10s
Build and Push Flutter SDK Image / build-and-push (Flutter SDK for Android CI builds, Dockerfile.android, android) (release) Successful in 28m35s
Build and Push Flutter SDK Image / build-and-push (Minimal Flutter SDK for Web/WASM CI builds, Dockerfile, web) (release) Successful in 16m45s
Remove rav1e binary, library, and SBOM metadata to eliminate
RUSTSEC-2024-0436 in the paste crate. rav1e (AV1 encoder) is not
needed for Flutter Linux desktop development.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:01:29 -05:00
Mathias Beaulieu-Duncan 553fee0a25 Upgrade commons-lang3 to fix CVE-2025-48924
Replace vulnerable commons-lang3 3.16.0 with fixed version 3.18.0
to resolve CVE-2025-48924 (CVSS 6.5 Medium).

Image now has 0 vulnerabilities across all severity levels.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 02:45:13 -05:00
4 changed files with 192 additions and 1 deletions
+68
View File
@@ -0,0 +1,68 @@
name: Sync README Badges
on:
workflow_run:
workflows: ["Build and Push Flutter SDK Image"]
types:
- completed
workflow_dispatch:
jobs:
sync-badges:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Extract versions from Dockerfiles
id: versions
run: |
# Android SDK build-tools version
ANDROID_SDK=$(grep -oP 'ANDROID_BUILD_TOOLS=\K[0-9.]+' Dockerfile.android || echo "")
echo "android_sdk=${ANDROID_SDK}" >> $GITHUB_OUTPUT
echo "Android SDK: ${ANDROID_SDK}"
# Flutter version (from ARG default)
FLUTTER=$(grep -oP 'ARG FLUTTER_VERSION=\K[0-9.]+' Dockerfile.android || echo "")
echo "flutter=${FLUTTER}" >> $GITHUB_OUTPUT
echo "Flutter: ${FLUTTER}"
- name: Update README badges
run: |
ANDROID_SDK="${{ steps.versions.outputs.android_sdk }}"
FLUTTER="${{ steps.versions.outputs.flutter }}"
if [ -n "$ANDROID_SDK" ]; then
# Update Android SDK badge version
sed -i "s|Android%20SDK-[0-9.]*-green|Android%20SDK-${ANDROID_SDK}-green|g" README.md
echo "Updated Android SDK badge to ${ANDROID_SDK}"
fi
if [ -n "$FLUTTER" ]; then
# Update Flutter version in variant badges and size badges
sed -i "s|web--[0-9.]*-blue|web--${FLUTTER}-blue|g" README.md
sed -i "s|android--[0-9.]*-blue|android--${FLUTTER}-blue|g" README.md
sed -i "s|linux--[0-9.]*-blue|linux--${FLUTTER}-blue|g" README.md
sed -i "s|/web-[0-9.]*?|/web-${FLUTTER}?|g" README.md
sed -i "s|/android-[0-9.]*?|/android-${FLUTTER}?|g" README.md
sed -i "s|/linux-[0-9.]*?|/linux-${FLUTTER}?|g" README.md
echo "Updated Flutter version badges to ${FLUTTER}"
fi
- name: Check for changes
id: changes
run: |
if git diff --quiet README.md; then
echo "changed=false" >> $GITHUB_OUTPUT
else
echo "changed=true" >> $GITHUB_OUTPUT
fi
- name: Commit and push
if: steps.changes.outputs.changed == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add README.md
git commit -m "Update README badges to match Dockerfile versions"
git push
+6 -1
View File
@@ -28,7 +28,12 @@ RUN mkdir -p "${ANDROID_HOME}/cmdline-tools" && \
"platforms;android-${ANDROID_COMPILE_SDK}" \
"build-tools;${ANDROID_BUILD_TOOLS}" && \
# Remove lint-psi to eliminate protobuf-java 2.6.1 CVEs (saves 86MB)
rm -rf "${ANDROID_HOME}/cmdline-tools/latest/lib/external/lint-psi"
rm -rf "${ANDROID_HOME}/cmdline-tools/latest/lib/external/lint-psi" && \
# Upgrade commons-lang3 from 3.16.0 to 3.18.0 to fix CVE-2025-48924
rm -f "${ANDROID_HOME}/cmdline-tools/latest/lib/external/org/apache/commons/commons-lang3/3.16.0/commons-lang3-3.16.0.jar" && \
mkdir -p "${ANDROID_HOME}/cmdline-tools/latest/lib/external/org/apache/commons/commons-lang3/3.18.0" && \
curl -fsSL "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.18.0/commons-lang3-3.18.0.jar" \
-o "${ANDROID_HOME}/cmdline-tools/latest/lib/external/org/apache/commons/commons-lang3/3.18.0/commons-lang3-3.18.0.jar"
# Clone Flutter SDK from git (supports both amd64 and arm64)
RUN git clone --depth 1 --branch ${FLUTTER_VERSION} https://github.com/flutter/flutter.git /opt/flutter && \
+3
View File
@@ -8,6 +8,9 @@ LABEL org.opencontainers.image.version="${FLUTTER_VERSION}"
USER 0
# Remove rav1e to eliminate CVE in paste crate (not needed for Flutter)
RUN rm -f /usr/bin/rav1e /usr/lib/librav1e.so* /var/lib/db/sbom/rav1e-*.spdx.json
# Clone Flutter SDK from git (supports both amd64 and arm64)
RUN git clone --depth 1 --branch ${FLUTTER_VERSION} https://github.com/flutter/flutter.git /opt/flutter && \
git config --global --add safe.directory /opt/flutter && \
+115
View File
@@ -0,0 +1,115 @@
# Flutter SDK Docker Images
<a href="https://git.openharbor.io/svrnty/docker-flutter-sdk" target="_blank"><img src="https://img.shields.io/badge/Git-Repository-orange?logo=gitea" alt="Git Repository"></a>
<a href="https://hub.docker.com/r/svrnty/flutter-sdk" target="_blank"><img src="https://img.shields.io/badge/Docker%20Hub-svrnty%2Fflutter--sdk-blue?logo=docker" alt="Docker Hub"></a>
<a href="https://hub.docker.com/r/svrnty/flutter-sdk" target="_blank"><img src="https://img.shields.io/docker/pulls/svrnty/flutter-sdk?logo=docker" alt="Docker Pulls"></a>
<a href="https://developer.android.com/tools/releases/build-tools" target="_blank"><img src="https://img.shields.io/badge/Android%20SDK-36.1.0-green?logo=android" alt="Android SDK"></a>
<a href="https://wolfi.dev" target="_blank"><img src="https://img.shields.io/badge/Base-Wolfi-purple?logo=linux" alt="Wolfi"></a>
Lightweight Flutter SDK images for CI/CD pipelines. Built on [Wolfi](https://wolfi.dev), a security-focused Linux distribution designed for containers.
## Images
| Variant | Use Case | Size | Arch |
|---------|----------|------|------|
| <a href="https://hub.docker.com/r/svrnty/flutter-sdk/tags?name=web" target="_blank"><img src="https://img.shields.io/badge/flutter--sdk-web--3.38.9-blue?logo=docker" alt="web-3.38.9"></a> | Web/WASM builds | <img src="https://img.shields.io/docker/image-size/svrnty/flutter-sdk/web-3.38.9?label=&logo=docker" alt="size"> | <a href="https://hub.docker.com/r/svrnty/flutter-sdk/tags?name=web" target="_blank"><img src="https://img.shields.io/badge/amd64-E65100" alt="amd64"></a> &nbsp; <a href="https://hub.docker.com/r/svrnty/flutter-sdk/tags?name=web" target="_blank"><img src="https://img.shields.io/badge/arm64-2e7d32" alt="arm64"></a> |
| <a href="https://hub.docker.com/r/svrnty/flutter-sdk/tags?name=android" target="_blank"><img src="https://img.shields.io/badge/flutter--sdk-android--3.38.9-blue?logo=docker" alt="android-3.38.9"></a> | Android APK/AAB builds | <img src="https://img.shields.io/docker/image-size/svrnty/flutter-sdk/android-3.38.9?label=&logo=docker" alt="size"> | <a href="https://hub.docker.com/r/svrnty/flutter-sdk/tags?name=android" target="_blank"><img src="https://img.shields.io/badge/amd64-E65100" alt="amd64"></a> &nbsp; <a href="https://hub.docker.com/r/svrnty/flutter-sdk/tags?name=android" target="_blank"><img src="https://img.shields.io/badge/arm64-2e7d32" alt="arm64"></a> |
| <a href="https://hub.docker.com/r/svrnty/flutter-sdk/tags?name=linux" target="_blank"><img src="https://img.shields.io/badge/flutter--sdk-linux--3.38.9-blue?logo=docker" alt="linux-3.38.9"></a> | Linux desktop builds | <img src="https://img.shields.io/docker/image-size/svrnty/flutter-sdk/linux-3.38.9?label=&logo=docker" alt="size"> | <a href="https://hub.docker.com/r/svrnty/flutter-sdk/tags?name=linux" target="_blank"><img src="https://img.shields.io/badge/amd64-E65100" alt="amd64"></a> &nbsp; <a href="https://hub.docker.com/r/svrnty/flutter-sdk/tags?name=linux" target="_blank"><img src="https://img.shields.io/badge/arm64-2e7d32" alt="arm64"></a> |
## Why Wolfi?
[Wolfi](https://wolfi.dev) is a lightweight Linux distribution built specifically for containers. It provides:
- **Minimal footprint** - Only essential packages, nothing extra
- **Daily security updates** - Patches applied quickly
- **Designed for containers** - No legacy cruft from traditional distros
## Features
- **Lightweight** - Optimized for fast CI/CD pulls
- **Secure** - Built on Wolfi with continuous vulnerability scanning
- **Multi-arch** - Supports both `linux/amd64` and `linux/arm64`
- **Non-root** - Runs as unprivileged user (UID 65532)
- **Supply chain security** - SBOM and SLSA provenance attestations included
## Dockerfile Examples
### Web App
```dockerfile
FROM svrnty/flutter-sdk:web-latest AS build
COPY . /app
WORKDIR /app
RUN flutter pub get && flutter build web --release
FROM nginx:alpine
COPY --from=build /app/build/web /usr/share/nginx/html
EXPOSE 80
```
### Android APK
```dockerfile
FROM svrnty/flutter-sdk:android-latest AS build
COPY . /app
WORKDIR /app
RUN flutter pub get && flutter build apk --release
FROM scratch
COPY --from=build /app/build/app/outputs/flutter-apk/app-release.apk /
```
### Linux Desktop
```dockerfile
FROM svrnty/flutter-sdk:linux-latest AS build
COPY . /app
WORKDIR /app
RUN flutter pub get && flutter build linux --release
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y libgtk-3-0 && rm -rf /var/lib/apt/lists/*
COPY --from=build /app/build/linux/x64/release/bundle /app
ENTRYPOINT ["/app/my_app"]
```
## CI/CD
```yaml
# GitHub Actions / Gitea Actions
jobs:
build:
runs-on: ubuntu-latest
container:
image: svrnty/flutter-sdk:android-latest
steps:
- uses: actions/checkout@v4
- run: flutter pub get
- run: flutter build apk --release
```
```yaml
# GitLab CI
build:
image: svrnty/flutter-sdk:android-latest
script:
- flutter pub get
- flutter build apk --release
```
## Tags
- `<variant>-latest` - Latest stable Flutter release
- `<variant>-<version>` - Specific Flutter version (e.g., `android-3.38.9`)
## Automatic Updates
Images are automatically rebuilt when:
- New Flutter stable versions are released
- Base image security updates are available
Every build is scanned and includes supply chain attestations (SBOM, SLSA provenance).
## License
MIT