app-starlock/.gitlab-ci.yml

217 lines
6.5 KiB
YAML

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"
- if: $CI_COMMIT_BRANCH == "release"
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
- if: $CI_COMMIT_BRANCH == "canary_release"
- if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$/
.notify_rule:
tags:
- macos
- flutter
rules:
- if: $CI_COMMIT_BRANCH == "develop"
- if: $CI_COMMIT_BRANCH == "release"
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
.generate_tag_rule:
tags:
- macos
- flutter
rules:
- if: $CI_COMMIT_BRANCH == "master"
.generate_next_version_rule:
tags:
- macos
- flutter
rules:
- if: $CI_COMMIT_BRANCH == "develop"
- if: $CI_COMMIT_BRANCH == "release"
- if: $CI_COMMIT_BRANCH == "canary_release"
- 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
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)"
- 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 ios/Gemfile --path vendor/bundle_ios --quiet
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 xhj
- 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-xhj-release-${CI_COMMIT_TAG}.apk
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-release-${CI_COMMIT_TAG}.apk"'
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab"'
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-ipa/starlock-xhj-release-${CI_COMMIT_TAG}.ipa
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-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: 'xhj apk binary package'
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj-release-${CI_COMMIT_TAG}.apk'
link_type: 'package'
- name: 'xhj bundle binary package'
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab'
link_type: 'package'
- name: 'xhj ipa binary package'
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj-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