Skip to content

Commit

Permalink
feat: add support to flutter in the sdkman image (#16)
Browse files Browse the repository at this point in the history
* chore: improve docker-entrypoint.sh in sdkman

* chore: add TMPDIR_PATH in the sdkman

* fix: some corrections flutter/flutter#140330 leoafarias/fvm#587

* feat: add fvm/fei to manage flutter version

* ci: ignore when edit README.md in sdkman

* docs: create an individual README.md to sdkman
  • Loading branch information
RodrigoDornelles authored Dec 19, 2023
1 parent e5fd149 commit c424201
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 2 deletions.
1 change: 1 addition & 0 deletions .github/workflows/sdkman.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
- main
paths:
- 'sdkman/*'
- '!sdkman/README.md'
- '.github/workflows/sdkman.yml'

jobs:
Expand Down
20 changes: 20 additions & 0 deletions sdkman/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,14 +1,29 @@
FROM debian:bullseye-slim

ENV FVM_VER 2.4.1
ENV FVM_URL https://github.com/leoafarias/fvm/releases/download
ENV FVM_DIR /opt/fvm
ENV FVM_ARCH $([[ $(uname -m) == x86_64 ]] && echo x64 || echo arm64)
ENV FLUTTER_HOME /tmp/flutter-fvm/default
ENV SDKMAN_URL https://get.sdkman.io
ENV ANDROID_URL https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip
ENV ANDROID_HOME /opt/android-sdk
ENV SDKMAN_DIR /opt/sdkman
ENV PATH /tmp/bin:$PATH
ENV PATH $PATH:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/bin
ENV PATH $PATH:$FVM_DIR:$FLUTTER_HOME/bin/
ENV TMPDIR_PATH /tmp/android:/tmp/sdkman-tmp:/tmp/sdkman-candidates
ENV TMPDIR_PATH $TMPDIR_PATH:/tmp/flutter-pub:/tmp/flutter-fvm:/tmp/flutter-home
ENV TMPDIR_PATH $TMPDIR_PATH:/tmp/dart-home:/tmp/dart-tool
ENV TMPDIR_PATH $TMPDIR_PATH:/tmp/bin

RUN bash -c "source /root/.bashrc \
&& apt-get -y update \
&& apt-get -y install curl zip unzip git libncurses5 cmake make \
&& mkdir -p $FVM_DIR \
&& curl -SL ${FVM_URL}/${FVM_VER}/fvm-${FVM_VER}-linux-${FVM_ARCH}.tar.gz -o ${FVM_DIR}/fvm.tar.gz \
&& tar -xvf ${FVM_DIR}/fvm.tar.gz -C $FVM_DIR --strip-components 1 \
&& rm ${FVM_DIR}/fvm.tar.gz ${FVM_DIR}/src/LICENSE \
&& curl -s $SDKMAN_URL | bash \
&& source $SDKMAN_DIR/bin/sdkman-init.sh \
&& sdk install java 17.0.9-oracle \
Expand All @@ -24,6 +39,11 @@ RUN bash -c "source /root/.bashrc \
&& ln -s /tmp/android /root/.android \
&& ln -s /tmp/sdkman-candidates $SDKMAN_DIR/candidates \
&& ln -s /tmp/sdkman-tmp $SDKMAN_DIR/tmp \
&& ln -s /tmp/flutter-home /root/.flutter \
&& ln -s /tmp/flutter-pub /root/.pub-cache \
&& ln -s /tmp/flutter-fvm /root/fvm \
&& ln -s /tmp/dart-tool /root/.dart-tool \
&& ln -s /tmp/dart-home /root/.dart \
"

COPY ./docker-entrypoint.sh /entrypoint.sh
Expand Down
43 changes: 43 additions & 0 deletions sdkman/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
## SDKMAN ##

[![sponsors](https://img.shields.io/github/sponsors/rodrigodornelles?color=ff69b4&logo=github)](https://github.com/sponsors/RodrigoDornelles)
[![](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fapi.github.com%2Frepos%2Frodrigodornelles%2Fdocker-images%2Fcommits%3Fpath%3Dsdkman%252FDockerfile%26page%3D1%26per_page%3D1&query=%24.0.commit.committer.date&logo=github&logoColor=fff&label=Dockerfile%20updated)](https://github.com/RodrigoDornelles/docker-images/blob/main/sdkman/Dockerfile)
[![](https://img.shields.io/docker/pulls/rodrigodornelles/sdkman?logo=docker&logoColor=fff)](https://hub.docker.com/r/rodrigodornelles/sdkman)
[![](https://img.shields.io/docker/image-size/rodrigodornelles/sdkman/latest?logo=docker&logoColor=fff)](https://hub.docker.com/r/rodrigodornelles/sdkman/tags)
> an easy sdk manager to build java, kotlin, groovy, dart, flutter and anothers android mobile apps.
`rodrigodornelles/sdkman:latest`

### Features ###

* [fvm](https://fvm.app/)
* [cmake](https://cmake.org/)
* [sdkman](https://sdkman.io/)
* [advmangager](https://developer.android.com/studio/command-line/avdmanager)
* [android-sdk-tools](https://developer.android.com/studio#command-tools)

### Environment variables ###

* `ANDROID_HOME`
* `FLUTTER_HOME`

### Usage ###

#### Java / Kotlin / Groovy ###

```sh
podman run --rm -v /tmp:/tmp -v $(pwd):/app -w /app rodrigodornelles/sdkman:latest
sdk install java 17.0.9-oracle
sdk install gradle 8.4
sdkmanager "build-tools;33.0.0" "platforms;android-33"
gradle assembleRelease --daemon --parallel
```

#### Flutter ####
```sh
podman run --rm -v /tmp:/tmp -v $(pwd):/app -w /app rodrigodornelles/sdkman:latest
sdk install java 17.0.9-oracle
fei 3.13.9
flutter pub get
flutter build apk
```
21 changes: 19 additions & 2 deletions sdkman/docker-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,12 +1,29 @@
#!/bin/bash
set -e

mkdir -p /tmp/android /tmp/sdkman-tmp /tmp/sdkman-candidates
# useful to mount /tmp and persist cache between container runs
echo $TMPDIR_PATH | tr ':' ' ' | xargs mkdir -p

# silent root warning flutter in podman - https://github.com/flutter/flutter/issues/140330
if [[ -f /run/.containerenv ]] && ! [[ -f /.dockerenv ]]; then
ln -s /run/.containerenv /.dockerenv
fi

# replace tar command - https://github.com/leoafarias/fvm/issues/587
echo -e "#!/bin/bash\nset -e\n/bin/tar \$@ --no-same-owner" > /tmp/bin/tar
chmod +x /tmp/bin/tar

# flutter easy install (without analytics)
echo -e "#!/bin/bash\nset -e\nfvm install \$1\nfvm global \$1" > /tmp/bin/fei
echo -e "git config --global --add safe.directory \$FLUTTER_HOME\n" >> /tmp/bin/fei
echo -e "flutter precache\nflutter config --no-analytics\ndart --disable-analytics" >> /tmp/bin/fei
chmod +x /tmp/bin/fei

# force execution of sdkman and bash terminal
if [[ ("$1" = 'sh' || "$1" = 'bash') && "$2" = "-c" ]]; then
shift 2
bash -c "source /root/.bashrc && source $SDKMAN_DIR/bin/sdkman-init.sh && ($@)"
elif [[ ("$1" = 'sh' || "$1" = 'bash') && $# -eq 2 ]]; then
elif [[ ("$1" = 'sh' || "$1" = 'bash') && $# -eq 2 && -f $2 ]]; then
r=$(<"$2")
bash -c "source /root/.bashrc && source $SDKMAN_DIR/bin/sdkman-init.sh && ($r)"
elif [ $# -gt 0 ]; then
Expand Down

0 comments on commit c424201

Please sign in to comment.