From 8642032529e443454adf2b87b44c4eff14d1b15e Mon Sep 17 00:00:00 2001
From: Ichlasul Affan <ichlaffterlalu@gmail.com>
Date: Sun, 16 Feb 2020 22:57:07 +0700
Subject: [PATCH] Add Flutter dependencies on SonarScanner CLI Image

---
 .gitlab-ci.yml           | 23 ++++++++++++++++++---
 .gitlab/CODEOWNERS       |  1 +
 Dockerfile               | 24 +++++++++++++++-------
 README.md                | 44 ++++++++++++++++++++++++++++++++--------
 sonar-project.properties |  5 ++---
 5 files changed, 76 insertions(+), 21 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 39f1d7b..b27ce96 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -15,15 +15,32 @@ stages:
   - test
   - deploy
 
+SonarScanner Analysis Dev:
+  image: ichlaffterlalu/sonar-scanner-flutter-cli:latest
+  stage: test
+  script:
+    - sonar-scanner
+      -Dsonar.host.url=$SONARQUBE_HOST
+      -Dsonar.login=$SONARQUBE_TOKEN
+      -Dsonar.projectKey=$SONARQUBE_PROJECT_KEY
+      -Dsonar.branch.name=$CI_COMMIT_REF_NAME
+      -Dsonar.branch.target=staging
+  except:
+    - master
+    - staging
+
 SonarScanner Analysis:
-  image: addianto/sonar-scanner-cli:latest
+  image: ichlaffterlalu/sonar-scanner-flutter-cli:latest
   stage: test
   script:
     - sonar-scanner
       -Dsonar.host.url=$SONARQUBE_HOST
       -Dsonar.login=$SONARQUBE_TOKEN
+      -Dsonar.projectKey=$SONARQUBE_PROJECT_KEY
+      -Dsonar.branch.name=$CI_COMMIT_REF_NAME
   only:
     - master
+    - staging
 
 Publish to Docker Hub:
   stage: deploy
@@ -32,8 +49,8 @@ Publish to Docker Hub:
     - docker build
       --build-arg=IMAGE_CREATED="$(date --utc -Iseconds)"
       --build-arg=IMAGE_REVISION="$(git show --pretty=oneline | tac | tail -n 1 | awk '{print $1}')"
-      --tag $IMAGE_NAMESPACE/sonar-scanner-cli:latest .
-    - docker push $IMAGE_NAMESPACE/sonar-scanner-cli:latest
+      --tag $IMAGE_NAMESPACE/sonar-scanner-flutter-cli:latest .
+    - docker push $IMAGE_NAMESPACE/sonar-scanner-flutter-cli:latest
   when: manual
   allow_failure: true
   tags:
diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS
index aa65218..28a805a 100644
--- a/.gitlab/CODEOWNERS
+++ b/.gitlab/CODEOWNERS
@@ -2,3 +2,4 @@
 
 ## Default owners
 *   @addianto
+*   @ichlasul.affan
diff --git a/Dockerfile b/Dockerfile
index ebd8361..520bbe4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM debian:10-slim
+FROM runmymind/docker-android-sdk:latest
 
 # Avoid warnings by switching to noninteractive
 ENV DEBIAN_FRONTEND=noninteractive
@@ -36,13 +36,23 @@ RUN wget -qO /opt/shellcheck-${SHELLCHECK_VERSION}.tar.xz https://shellcheck.sto
     && chmod +x /opt/shellcheck-${SHELLCHECK_VERSION}/shellcheck \
     && ln -s /opt/shellcheck-${SHELLCHECK_VERSION}/shellcheck /usr/local/bin/shellcheck
 
+# Install Flutter
+ARG FLUTTER_VERSION="https://storage.googleapis.com/flutter_infra/releases/stable/linux/flutter_linux_v1.12.13+hotfix.8-stable.tar.xz"
+ENV PATH="$PATH:/usr/lib/dart/bin:/flutter/bin"
+RUN wget --quiet --output-document=flutter.tar.xz $FLUTTER_VERSION && tar xf flutter.tar.xz -C / \
+    && apt-get install apt-transport-https \
+    && sh -c 'wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' \
+    && sh -c 'wget -qO- https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list' \
+    && apt-get update \
+    && apt-get install -y dart
+
 # Switch back to dialog for any ad-hoc use of apt-get
 ENV DEBIAN_FRONTEND=''
 
 ## Note to editors: Make sure name of USER and its WORKDIR path matches with
 ## the value of USERNAME above
-USER sonar
-WORKDIR /home/sonar/workspace
+USER $USERNAME
+WORKDIR /home/$USERNAME/workspace
 CMD ["sonar-scanner"]
 
 # Container image metadata
@@ -50,14 +60,14 @@ CMD ["sonar-scanner"]
 ## keys must be provided during build process, i.e. `docker build` invocation.
 ## It is also possible to pass other metadata values via build arguments.
 ARG IMAGE_CREATED=""
-ARG IMAGE_SOURCE="https://gitlab.cs.ui.ac.id/pmpl/sonar-scanner-cli-image"
+ARG IMAGE_SOURCE="https://gitlab.cs.ui.ac.id/ichlasul.affan/"
 ARG IMAGE_VERSION=${SONAR_SCANNER_CLI_VERSION}
 ARG IMAGE_REVISION=""
 ARG IMAGE_VENDOR="Faculty of Computer Science Universitas Indonesia"
-ARG IMAGE_TITLE="Sonar Scanner CLI Image"
-ARG IMAGE_DESCRIPTION="Sonar Scanner CLI bundled in a container image."
+ARG IMAGE_TITLE="Sonar Scanner CLI Image for Flutter"
+ARG IMAGE_DESCRIPTION="Sonar Scanner CLI with Flutter dependencies bundled in a container image."
 LABEL org.opencontainers.image.created=${IMAGE_CREATED} \
-      org.opencontainers.image.authors="Daya Adianto <dayaadianto@cs.ui.ac.id>" \
+      org.opencontainers.image.authors=${IMAGE_AUTHOR} \
       org.opencontainers.image.source=${IMAGE_SOURCE} \
       org.opencontainers.image.version=${IMAGE_VERSION} \
       org.opencontainers.image.revision=${IMAGE_REVISION} \
diff --git a/README.md b/README.md
index 35b1c4b..aa1b1f0 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-# Sonar Scanner CLI Image
+# Sonar Scanner CLI Image for Flutter
 
-> Sonar Scanner CLI bundled in a container image.
+> Sonar Scanner CLI with Flutter dependencies bundled in a container image.
 
 ## Usage
 
@@ -13,7 +13,7 @@ into SonarScanner via CLI prompt.
 To run the container image locally using Docker:
 
 ```bash
-docker run -it -v $(pwd):/home/sonar/workspace addianto/sonar-scanner-cli:latest bash
+docker run -it -v $(pwd):/home/sonar/workspace ichlaffterlalu/sonar-scanner-flutter-cli:latest bash
 sonar-scanner [sonar-scanner options]
 ```
 
@@ -23,15 +23,38 @@ sonar-scanner [sonar-scanner options]
 Example:
 
 ```bash
-docker run -it -v $(pwd):/home/sonar/workspace addianto/sonar-scanner-cli:latest bash
+docker run -it -v $(pwd):/home/sonar/workspace ichlaffterlalu/sonar-scanner-flutter-cli:latest bash
 sonar-scanner -Dsonar.host.url=https://pmpl.cs.ui.ac.id/sonarqube -Dsonar.login=[YOUR TOKEN]
 ```
 
-To use the container image as a base image for a CI job on GitLab CI/CD:
+To use the container image as a base image for a CI job on GitLab CI/CD (sample includes multi-branch
+analysis support):
 
 ```yaml
+SonarScanner Analysis Dev:
+  image: ichlaffterlalu/sonar-scanner-flutter-cli:latest
+  # Ideally you want to run SonarScanner after the test suite has generated
+  # test & coverage report. The following is only an example to run
+  # SonarScanner concurrently with CI job(s) in `test` stage.
+  stage: test
+  script:
+    # Obtain the host and token from GitLab CI environment variables
+    # Short-lived branches has a target (parent) branch, which in this case
+    # is `staging`.
+    - sonar-scanner
+      -Dsonar.host.url=$SONARQUBE_HOST
+      -Dsonar.login=$SONARQUBE_TOKEN
+      -Dsonar.projectKey=$SONARQUBE_PROJECT_KEY
+      -Dsonar.branch.name=$CI_COMMIT_REF_NAME
+      -Dsonar.branch.target=staging
+  except:
+    # Perform SonarScanner analysis for short-lived branches
+    # (exclude `master` and `staging`)
+    - master
+    - staging
+
 SonarScanner Analysis:
-  image: addianto/sonar-scanner-cli:latest
+  image: ichlaffterlalu/sonar-scanner-flutter-cli:latest
   # Ideally you want to run SonarScanner after the test suite has generated
   # test & coverage report. The following is only an example to run
   # SonarScanner concurrently with CI job(s) in `test` stage.
@@ -41,14 +64,19 @@ SonarScanner Analysis:
     - sonar-scanner
       -Dsonar.host.url=$SONARQUBE_HOST
       -Dsonar.login=$SONARQUBE_TOKEN
+      -Dsonar.projectKey=$SONARQUBE_PROJECT_KEY
+      -Dsonar.branch.name=$CI_COMMIT_REF_NAME
   only:
-    # Perform SonarScanner analysis only on `master` branch
+    # Perform SonarScanner analysis for long-lived branches only on
+    # `master` and `staging` branch
     - master
+    - staging
 ```
 
 ## Maintainers
 
-- [Daya Adianto](https://gitlab.com/addianto)
+- [Daya Adianto](https://gitlab.com/addianto): Original maintainer of SonarScanner CLI Image
+- [Ichlasul Affan](https://gitlab.com/ichlasul.affan)
 
 ## License
 
diff --git a/sonar-project.properties b/sonar-project.properties
index 6154ca5..5ac46cc 100644
--- a/sonar-project.properties
+++ b/sonar-project.properties
@@ -4,13 +4,12 @@
 ### sonar.host.url=[pass URL via CLI]
 
 ## Project Configuration
-sonar.projectKey=to.adian:sonar-scanner-cli-image
 sonar.exclusions=/.devcontainer/,/.gitlab/
 sonar.scm.provider=git
 
 ## Project Identity
-sonar.projectName=SonarQube Scanner CLI Image
+sonar.projectName=SonarQube Scanner CLI Image for Flutter
 sonar.projectVersion=latest
 
 ## Authentication
-### sonar.login=[pass token via CLI]
\ No newline at end of file
+### sonar.login=[pass token via CLI]
-- 
GitLab