diff --git a/.flutter b/.flutter new file mode 160000 index 0000000..2663184 --- /dev/null +++ b/.flutter @@ -0,0 +1 @@ +Subproject commit 2663184aa79047d0a33a14a3b607954f8fdd8730 diff --git a/.github/workflows/sprint_release.yml b/.github/workflows/sprint_release.yml new file mode 100644 index 0000000..2e0dbe7 --- /dev/null +++ b/.github/workflows/sprint_release.yml @@ -0,0 +1,84 @@ +# This workflow builds the release variants for Android and iOS, uploads them to a new release +# and distributes them via firebase +# It is triggered by the creation of a sprint release tag +# Please note that the KeyStore credentials have to be created as secrets in your project +# For more information about best practices, see: +# https://grandcentrix.atlassian.net/wiki/spaces/TENG/pages/31180230199/GitHub+Actions+Best+Practices + +name: Build Sprint Release + +on: + push: + tags: + - 'release/sprint*' + +jobs: + build_sprint_release_android: + name: Build Sprint Release Android + runs-on: ubuntu-latest + outputs: + version-name: ${{ steps.version.outputs.version-name }} + timeout-minutes: 60 + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: Enable private dependencies + run: git config --global url."https://${{ github.actor }}:${{ secrets.REPO_READ_TOKEN }}@github.com/".insteadOf "git@github.com:" + - name: Cache dart packages + uses: actions/cache@v2.1.6 + with: + path: | + /opt/hostedtoolcache/flutter + ~/.pub-cache + key: ${{ runner.os }}-flutter-android + - name: Accept Android licenses + run: yes | ${ANDROID_HOME}/tools/bin/sdkmanager --licenses + - name: Run Flutter doctor + run: ./flutterw doctor --verbose + timeout-minutes: 10 + - name: Get Dart packages + run: ./flutterw pub get + timeout-minutes: 10 + - name: Get version name for release name + id: version + run: | + pubspecVersion=$(cat pubspec.yaml | grep 'version\:\ ' | sed -e "s/^.*[[:blank:]]//" -e "s/^\"//" -e "s/\"$//") + sprintNumber=${GITHUB_REF#refs/*/release/*} + echo "::set-output name=version-name::$pubspecVersion-$sprintNumber" + - name: Build Release + run: ./flutterw build apk --release --build-number=${{ github.run_number }} --build-name=${{ steps.version.outputs.version-name }} --target=lib/main.dart + timeout-minutes: 20 + - name: Upload workflow artifact + uses: actions/upload-artifact@v2 + with: + name: apk + path: "build/app/outputs/flutter-apk/app-release.apk" + + release_n_upload: + name: Release and upload to Firebase + runs-on: ubuntu-latest + timeout-minutes: 10 + needs: + - build_sprint_release_android + steps: + - name: Download workflow artifacts + uses: actions/download-artifact@v2 + with: + path: artifacts + - name: Create GitHub release + id: github_release + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + name: Sprint Release ${{needs.build_sprint_release_android.outputs.version-name}} + files: "**/artifacts/**" + prerelease: true + - name: Upload Android app to Firebase + uses: wzieba/Firebase-Distribution-Github-Action@v1.3.2 + with: + appId: ${{secrets.FIREBASE_ANDROID_APP_ID}} + token: ${{secrets.FIREBASE_TOKEN}} + file: artifacts/apk/app-release.apk + groups: gcx + releaseNotes: Sprint Release ${{needs.build_sprint_release_android.outputs.version-name}} diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..5ea16b4 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule ".flutter"] + path = .flutter + url = https://github.com/flutter/flutter.git + branch = stable + +[submodule "nrf_mesh_plugin"] + path = nrf_mesh_plugin + url = https://github.com/OZEO-DOOZ/nrf_mesh_plugin + branch = feature/vendor_model_message diff --git a/android/app/build.gradle b/android/app/build.gradle index dd6501a..f8d3dae 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -30,6 +30,15 @@ android { versionName = flutter.versionName } + signingConfigs { + debug { + storeFile file("../debug.jks") + storePassword "grandcentrix" + keyAlias "grandcentrix" + keyPassword "grandcentrix" + } + } + buildTypes { release { // TODO: Add your own signing config for the release build. diff --git a/flutterw b/flutterw new file mode 100755 index 0000000..944283e --- /dev/null +++ b/flutterw @@ -0,0 +1,113 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Flutter start up script for UN*X +## Version: v1.3.1 +## Date: 2024-09-16 15:37:42 +## +## 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. +## +############################################################################## + +echoerr() { echo "$@" 1>&2; } + +# 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' +GIT_HOME=$(git -C "${APP_HOME}" rev-parse --show-toplevel) +FLUTTER_DIR="${GIT_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 + +# Fix not initialized flutter submodule +if [ ! -f "${FLUTTER_DIR}/bin/flutter" ]; then + echoerr "$FLUTTER_SUBMODULE_NAME submodule not initialized. Initializing..." + git submodule update --init "${FLUTTER_DIR}" +fi + +# Detect detach HEAD and fix it. commands like upgrade expect a valid branch, not a detached HEAD +FLUTTER_SYMBOLIC_REF=$(git -C "${FLUTTER_DIR}" symbolic-ref -q HEAD) +if [ -z "${FLUTTER_SYMBOLIC_REF}" ]; then + FLUTTER_REV=$(git -C "${FLUTTER_DIR}" rev-parse HEAD) + FLUTTER_CHANNEL=$(git -C "${GIT_HOME}" config -f .gitmodules submodule.${FLUTTER_SUBMODULE_NAME}.branch) + + if [ -z "${FLUTTER_CHANNEL}" ]; then + echoerr "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." + echoerr "Fix this by adding a specific channel with:" + echoerr " - './flutterw channel ' or" + echoerr " - Add 'branch = ' to '$FLUTTER_SUBMODULE_NAME' submodule in .gitmodules" + else + echoerr "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_DIR}" branch -q -D "${FLUTTER_CHANNEL}" 2> /dev/null || true + git -C "${FLUTTER_DIR}" fetch -q origin + + # bind current HEAD to channel defined in .gitmodules + git -C "${FLUTTER_DIR}" checkout -q -b "${FLUTTER_CHANNEL}" "${FLUTTER_REV}" + git -C "${FLUTTER_DIR}" branch -q -u "origin/${FLUTTER_CHANNEL}" "${FLUTTER_CHANNEL}" + echoerr "Fixed! Migrated to channel '$FLUTTER_CHANNEL' while staying at commit $FLUTTER_REV. './flutterw upgrade' now works without problems!" + git -C "${FLUTTER_DIR}" status -bs + fi +fi + +# Wrapper tasks done, call flutter binary with all args +set -e +"$FLUTTER_DIR/bin/flutter" "$@" +set +e + +# 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 + if [ -n "$2" ]; then + # make sure .gitmodules is updated as well + CHANNEL=${2} # second arg + git config -f "${GIT_HOME}/.gitmodules" "submodule.${FLUTTER_SUBMODULE_NAME}.branch" "${CHANNEL}" + # makes sure nobody forgets to do commit all changed files + git add "${GIT_HOME}/.gitmodules" + git add "${FLUTTER_DIR}" + fi + fi + + # ./flutterw upgrade + if echo "$@" | grep -q "upgrade"; then + # makes sure nobody forgets to do commit the changed submodule + git add "${FLUTTER_DIR}" + # flutter packages get runs automatically. Stage those changes as well + if [ -f pubspec.lock ]; then + git add pubspec.lock + fi + fi +fi + +exit ${FLUTTER_EXIT_STATUS}