stages: - test - generate_tag_or_version - build-artifacts - release-artifacts - notification - clean-up variables: LC_ALL: "en_US.UTF-8" LANG: "en_US.UTF-8" .build_rule: tags: - macos - flutter rules: - if: $CI_COMMIT_BRANCH == "develop_sky" - if: $CI_COMMIT_BRANCH == "release_sky" - if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/ - if: $CI_COMMIT_BRANCH == "canary_release_sky" - if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?(_sky)?$/ .notify_rule: tags: - macos - flutter rules: - if: $CI_COMMIT_BRANCH == "develop_sky" - if: $CI_COMMIT_BRANCH == "release_sky" - if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/ .generate_tag_rule: tags: - macos - flutter rules: - if: $CI_COMMIT_BRANCH == "master_sky" .generate_next_version_rule: tags: - macos - flutter rules: - if: $CI_COMMIT_BRANCH == "develop_sky" - if: $CI_COMMIT_BRANCH == "release_sky" - if: $CI_COMMIT_BRANCH == "canary_release_sky" - if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/ .print_env: stage: test extends: .build_rule before_script: - java --version - printenv | while IFS='=' read -r key value; do echo "$key=$value"; done after_script: - echo "finished" .setup_fastlane_android: extends: .build_rule before_script: - export PUB_HOSTED_URL=https://pub.flutter-io.cn - export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn - ls -li - export NEXT_VERSION="$(cat app_new.version)" # - flutter pub get - export PATH="/opt/homebrew/bin:$PATH" - eval "$(rbenv init -)" - rbenv global 2.6.10 # 你实际用的 Ruby 版本 - ruby -v - which ruby - gem env - bundle config mirror.https://rubygems.org https://mirrors.aliyun.com/rubygems/ - bundle install --gemfile android/Gemfile --path vendor/bundle_android --quiet - flutter clean cache: paths: - app_new.version .setup_fastlane_ios: extends: .build_rule before_script: - export PUB_HOSTED_URL=https://pub.flutter-io.cn - export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn - ls -li - export NEXT_VERSION="$(cat app_new.version)" - export PATH="/opt/homebrew/bin:$PATH" - eval "$(rbenv init -)" - rbenv global 2.6.10 # 你实际用的 Ruby 版本 - ruby -v - which ruby - gem env - bundle config mirror.https://rubygems.org https://mirrors.aliyun.com/rubygems/ - bundle install --gemfile ios/Gemfile --path vendor/bundle_ios --quiet - flutter clean cache: paths: - app_new.version test_lint_check: stage: test extends: .print_env script: - echo "run lint check or per-test here" tags: - macos - flutter generate_git_tag: stage: generate_tag_or_version extends: .generate_tag_rule before_script: - bash pre_build.sh sky - project_url=$(echo $CI_PROJECT_URL | sed 's/http:\/\///') - echo "project_url:$project_url" - echo "CI_SERVER_FQDN:$CI_SERVER_FQDN/CI_PROJECT_ROOT_NAMESPACE:$CI_PROJECT_ROOT_NAMESPACE/CI_PROJECT_NAME:$CI_PROJECT_NAME" - git remote set-url origin git@$CI_SERVER_FQDN:$CI_PROJECT_ROOT_NAMESPACE/$CI_PROJECT_NAME.git script: - bash tag_generator.sh generate_tag generate_next_version: stage: generate_tag_or_version extends: .generate_next_version_rule script: - bash tag_generator.sh generate_version cache: paths: - app_new.version build_android: stage: build-artifacts extends: .setup_fastlane_android script: bash android/build.sh artifacts: paths: - build/app/outputs/flutter-apk/ build_ios: stage: build-artifacts extends: .setup_fastlane_ios script: - bash ios/build.sh artifacts: paths: - build/app/outputs/flutter-ipa create-release: stage: release-artifacts extends: .build_rule dependencies: - build_android - build_ios needs: - job: build_android artifacts: true - job: build_ios artifacts: true rules: - if: $CI_COMMIT_TAG before_script: - echo "start create release" - bash release_description_generator.sh - export RELEASE_DESCRIPTION="$(cat changelog.md)" - echo "${RELEASE_DESCRIPTION}" script: - export StarLock_VERSION=${CI_COMMIT_TAG#*-} - echo "Uploading StarLock-${StarLock_VERSION} packages to ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/StarLock-${StarLock_VERSION}-*" - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.apk "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.apk"' - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.aab "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.aab"' - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-ipa/starlock-sky-release-${CI_COMMIT_TAG}.ipa "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.ipa"' release: name: '$CI_COMMIT_TAG' description: '$(cat changelog.md)' tag_name: '$CI_COMMIT_TAG' ref: '$CI_COMMIT_TAG' assets: links: - name: 'sky apk binary package' url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-sky-release-${CI_COMMIT_TAG}.apk' link_type: 'package' - name: 'sky bundle binary package' url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-sky-release-${CI_COMMIT_TAG}.aab' link_type: 'package' - name: 'sky ipa binary package' url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-sky-release-${CI_COMMIT_TAG}.ipa' link_type: 'package' notify_success: stage: notification extends: .notify_rule before_script: - printenv | while IFS='=' read -r key value; do echo "$key=$value"; done script: - bash notify.sh success allow_failure: true when: on_success notify_failure: stage: notification extends: .notify_rule before_script: - printenv | while IFS='=' read -r key value; do echo "$key=$value"; done script: - bash notify.sh failure allow_failure: true when: on_failure clean_up: stage: clean-up extends: .build_rule script: - git reset --hard when: always