From 4cd54d9238f6c096e8b73e043ebff8f3fb11140c Mon Sep 17 00:00:00 2001 From: Roland Fredenhagen Date: Tue, 9 Mar 2021 14:19:41 +0100 Subject: [PATCH] build: :hammer: Adding flutterw for consitent flutter version --- .flutter | 1 + .gitmodules | 4 ++ flutterw | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 160000 .flutter create mode 100644 .gitmodules create mode 100755 flutterw diff --git a/.flutter b/.flutter new file mode 160000 index 00000000..9b2d32b6 --- /dev/null +++ b/.flutter @@ -0,0 +1 @@ +Subproject commit 9b2d32b605630f28625709ebd9d78ab3016b2bf6 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..ee9d7761 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule ".flutter"] + path = .flutter + url = https://github.com/flutter/flutter.git + branch = stable diff --git a/flutterw b/flutterw new file mode 100755 index 00000000..cc0a1c5d --- /dev/null +++ b/flutterw @@ -0,0 +1,108 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Flutter start up script for UN*X +## Version: v1.1.2 +## Date: 2021-03-09 13:41:00 +## +## Use this flutter wrapper to bundle Flutter within your project to make +## sure everybody builds with the same version. +## +## Read about the install and uninstall process in the README on GitHub +## https://github.com/passsy/flutter_wrapper +## +## Inspired by gradle-wrapper. +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ]; do + ls=$(ls -ld "$PRG") + link=$(expr "$ls" : '.*-> \(.*\)$') + if expr "$link" : '/.*' >/dev/null; then + PRG="$link" + else + PRG=$(dirname "$PRG")"/$link" + fi +done +SAVED="$(pwd)" +cd "$(dirname "$PRG")/" >/dev/null +APP_HOME="$(pwd -P)" +cd "$SAVED" >/dev/null + +FLUTTER_SUBMODULE_NAME='.flutter' +FLUTTER_DIR="$APP_HOME/$FLUTTER_SUBMODULE_NAME" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +# submodule starting with "-" are not initialized +init_status=$(git submodule | grep "\ $FLUTTER_SUBMODULE_NAME$" | cut -c 1) + +# Fix not initialized flutter submodule +if [ "$init_status" = "-" ]; then + echo "$FLUTTER_SUBMODULE_NAME submodule not initialized. Initializing..." + git submodule update --init ${FLUTTER_SUBMODULE_NAME} +fi + +# Detect detach HEAD and fix it. commands like upgrade expect a valid branch, not a detached HEAD +FLUTTER_SYMBOLIC_REF=$(git -C ${FLUTTER_SUBMODULE_NAME} symbolic-ref -q HEAD) +if [ -z ${FLUTTER_SYMBOLIC_REF} ]; then + FLUTTER_REV=$(git -C ${FLUTTER_SUBMODULE_NAME} rev-parse HEAD) + FLUTTER_CHANNEL=$(git config -f .gitmodules submodule.${FLUTTER_SUBMODULE_NAME}.branch) + + if [ -z $FLUTTER_CHANNEL ]; then + echo "Warning: Submodule '$FLUTTER_SUBMODULE_NAME' doesn't point to an official Flutter channel \ + (one of stable|beta|dev|master). './flutterw upgrade' will fail without a channel." + echo "Fix this by adding a specific channel with:" + echo "\t- './flutterw channel ' or" + echo "\t- Add 'branch = ' to '$FLUTTER_SUBMODULE_NAME' submodule in .gitmodules" + else + echo "Fixing detached HEAD: '$FLUTTER_SUBMODULE_NAME' submodule points to a specific commit $FLUTTER_REV, not channel '$FLUTTER_CHANNEL' (as defined in .gitmodules)." + # Make sure channel is fetched + # Remove old channel branch because it might be moved to an unrelated commit where fast-forward pull isn't possible + git -C ${FLUTTER_SUBMODULE_NAME} branch -q -D ${FLUTTER_CHANNEL} 2> /dev/null || true + git -C ${FLUTTER_SUBMODULE_NAME} fetch -q origin + + # bind current HEAD to channel defined in .gitmodules + git -C ${FLUTTER_SUBMODULE_NAME} checkout -q -b ${FLUTTER_CHANNEL} ${FLUTTER_REV} + git -C ${FLUTTER_SUBMODULE_NAME} branch -q -u origin/${FLUTTER_CHANNEL} ${FLUTTER_CHANNEL} + echo "Fixed! Migrated to channel '$FLUTTER_CHANNEL' while staying at commit $FLUTTER_REV. './flutterw upgrade' now works without problems!" + git -C ${FLUTTER_SUBMODULE_NAME} status -bs + fi +fi + +# Wrapper tasks done, call flutter binay with all args +set -e +"$FLUTTER_DIR/bin/flutter" "$@" + +# Post flutterw tasks. exit code from /bin/flutterw will be used as final exit +FLUTTER_EXIT_STATUS=$? +if [ ${FLUTTER_EXIT_STATUS} -eq 0 ]; then + + # ./flutterw channel CHANNEL + if echo "$@" | grep -q "channel"; then + # make sure .gitmodules is updated as well + CHANNEL=${2} # second arg + git config -f .gitmodules submodule.${FLUTTER_SUBMODULE_NAME}.branch ${CHANNEL} + # makes sure nobody forgets to do commit all changed files + git add .gitmodules + git add ${FLUTTER_SUBMODULE_NAME} + fi + + # ./flutterw upgrade + if echo "$@" | grep -q "upgrade"; then + # makes sure nobody forgets to do commit the changed submodule + git add ${FLUTTER_SUBMODULE_NAME} + # flutter packages get runs automatically. Stage those changes as well + git add pubspec.lock + fi +fi + +exit ${FLUTTER_EXIT_STATUS}