image: $CI_REGISTRY_IMAGE/flutter:1.1.2 variables: ANDROID_APK_PATH: build/app/outputs/apk/debug/ ANDROID_AAB_PATH: build/app/outputs/bundle/release/ check_internet: allow_failure: true stage: .pre image: rancher/curlimages-curl:7.73.0 script: - curl --connect-timeout 1 google.com after_script: - echo "CI_JOB_STATUS_CHECK_INTERNET=$CI_JOB_STATUS" >> build.env artifacts: when: always reports: dotenv: build.env set_mirror: stage: .pre image: rancher/curlimages-curl:7.73.0 allow_failure: true before_script: - if [ "$CI_JOB_STATUS_CHECK_INTERNET" == "success" ]; then exit 1; fi script: - echo "PUB_HOSTED_URL=https://pub.flutter-io.cn" >> build.env - echo "FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn" >> build.env needs: [ "check_internet" ] artifacts: when: always reports: dotenv: build.env code_quality: stage: build before_script: - if [ "$CI_JOB_STATUS_CHECK_INTERNET" == "success" ]; then exit 0; fi - sh ./scripts/generate_intl.sh script: - flutter analyze ./lib --no-fatal-infos - dart pub global activate flutter_analyze_reporter - cd lib && dart pub global run flutter_analyze_reporter --output=gl-code-quality-report.json --reporter=gitlab artifacts: reports: codequality: lib/gl-code-quality-report.json unit_test: stage: build before_script: - if [ "$CI_JOB_STATUS_CHECK_INTERNET" == "success" ]; then exit 0; fi - sh ./scripts/generate_intl.sh script: - sh ./scripts/check-all coverage: '/lines\.*: \d+\.\d+\%/' artifacts: name: "test-coverage-report-$CI_COMMIT_SHORT_SHA" paths: - coverage expire_in: 5 days build_apk: stage: build allow_failure: true before_script: - if [ "$CI_JOB_STATUS_CHECK_INTERNET" == "success" ]; then exit 1; fi - sh ./scripts/generate_intl.sh script: - VERSION_NAME=$(cat pubspec.yaml | grep version | head -1 | awk '{print $2}' | awk -F+ '{print $1}') - VERSION_CODE=$(cat pubspec.yaml | grep version | head -1 | awk '{print $2}' | awk -F+ '{print $1}') - VERSION_CODE_NEW=$(date +%s) - VERSION_NEW=$VERSION_NAME+$VERSION_CODE_NEW - 'sed -i "s/version: $VERSION_NAME+.*/version: $VERSION_NEW/g" pubspec.yaml' - 'sed -i "s/\"versionCode\":.*/\"versionCode\": $VERSION_CODE_NEW,/g" updater.json' - 'sed -i "s/\"versionName\":.*/\"versionName\": \"$VERSION_NAME\",/g" updater.json' - echo $TEST_STORE_FILE | base64 -d > test-keystore.jks - flutter build apk --debug --dart-define=REQUEST_ENV=prod_env --dart-define=KEY_ALIAS=$TEST_KEY_ALIAS --dart-define=KEY_PASSWORD=$TEST_KEY_PASSWORD --dart-define=STORE_FILE=$(pwd)/test-keystore.jks --dart-define=STORE_PASSWORD=$TEST_STORE_PASSWORD --dart-define=OCP_APIM_SUBSCURIPTION_KEY=$OCP_APIM_SUBSCURIPTION_KEY --dart-define=ANDROID_BUILD_TYPE=debug - echo "VERSION_NAME=$VERSION_NAME" >> build.env artifacts: name: "android-apk" paths: - ${ANDROID_APK_PATH} - updater.json expire_in: 2 days reports: dotenv: build.env only: - main upload_apk: stage: deploy environment: testing needs: [ "build_apk" ] image: rancher/curlimages-curl:7.73.0 allow_failure: true before_script: - if [ "$CI_JOB_STATUS_CHECK_INTERNET" == "success" ]; then exit 1; fi script: - echo $VERSION_NAME - APK_FILENAME=$(basename build/app/outputs/apk/debug/*.apk) - echo $APK_FILENAME - APK_URL_PATH="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/jihu-gitlab-app/${VERSION_NAME}/" - echo $APK_URL_PATH - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${ANDROID_APK_PATH}/${APK_FILENAME} "${APK_URL_PATH}"' - APK_URL="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/jihu-gitlab-app/${VERSION_NAME}/${APK_FILENAME}" - echo $APK_URL - 'sed -i "s#\"url\":.*#\"url\": \"$APK_URL\"#g" updater.json' - UPDATER_URL_PATH="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/jihu-gitlab-app/updater/" - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file updater.json "${UPDATER_URL_PATH}"' only: - main build_aab: stage: build allow_failure: true before_script: - if [ "$CI_JOB_STATUS_CHECK_INTERNET" == "success" ]; then exit 1; fi - sh ./scripts/generate_intl.sh - 'sed -i "/android.permission.REQUEST_INSTALL_PACKAGES/d" $(find . -name AndroidManifest.xml)' script: - echo $PROD_STORE_FILE | base64 -d > prod-keystore.jks - flutter build appbundle --dart-define=KEY_ALIAS=$PROD_KEY_ALIAS --dart-define=KEY_PASSWORD=$PROD_KEY_PASSWORD --dart-define=STORE_FILE=$(pwd)/prod-keystore.jks --dart-define=STORE_PASSWORD=$PROD_STORE_PASSWORD --dart-define=OCP_APIM_SUBSCURIPTION_KEY=$OCP_APIM_SUBSCURIPTION_KEY --dart-define=ANDROID_BUILD_TYPE=release artifacts: name: "android-aab" paths: - ${ANDROID_AAB_PATH} expire_in: 2 days only: - main upload_aab: stage: deploy environment: production needs: [ "build_aab" ] image: rancher/curlimages-curl:7.73.0 allow_failure: true before_script: - if [ "$CI_JOB_STATUS_CHECK_INTERNET" != "success" ]; then exit 1; fi script: - curl -i google.com - ls -lh ${ANDROID_AAB_PATH} only: - main pages: stage: deploy image: rancher/curlimages-curl:7.73.0 allow_failure: true before_script: - if [ "$CI_JOB_STATUS_CHECK_INTERNET" != "success" ]; then exit 1; fi script: - cp assets/images/icon.png public/assets/icon.png artifacts: paths: - public only: - main