├── README.md ├── android.yaml ├── dotnetcore-powershell.yaml ├── dotnetcore-with-docker.yaml ├── email.html ├── golang-parallel.yaml ├── golang.yaml ├── helloworld.yaml ├── ios-xcode.yaml ├── maven.yaml ├── npm.yaml ├── php.yaml ├── ruby.yaml └── templates.json /README.md: -------------------------------------------------------------------------------- 1 | # YAML Configuration Template 2 | 3 | the yaml tempaltes can be used for docker setup 4 | 5 | - [Hello World](./helloworld.yaml): list per-installed environments and say hello from docker image 'hello world' 6 | - [Maven](./maven.yaml): git clone spring demo project and run maven unit test, package 7 | - [Golang](./golang.yaml): to run go lint, test, and upload test coverage report 8 | - [Golang-Parallel](./golang-parallel.yaml): to run go lint, test, and upload test coverage report in parallel 9 | - [Npm](./npm.yaml): to run npm install, lint, test and upload test coverage report 10 | - [Ruby](./ruby.yaml): bundle install, rubocop and test 11 | - [PHP](./php.yaml): composer install, run phpunit and upload coverage report 12 | - [Android-Gradle](./android.yaml): build android project with gradle 13 | - [.NetCore](./dotnetcore-powershell.yaml): build .netcore porject with powershell, run from windows Agent 14 | - [.NetCore-Docker](./dotnetcore-with-docker.yaml): build .netcore porject within docker 15 | -------------------------------------------------------------------------------- /android.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Android Project Template with Gradle 3 | # 4 | 5 | envs: 6 | FLOWCI_GIT_URL: "https://github.com/hidroh/materialistic.git" 7 | 8 | GRADLE_USER_HOME: "${FLOWCI_AGENT_WORKSPACE}/.gradle" 9 | GRADLE_OPTS: "-Dorg.gradle.daemon=false" 10 | 11 | docker: 12 | image: openjdk:11-jdk 13 | 14 | steps: 15 | - name: setup android sdk 16 | envs: 17 | ANDROID_COMPILE_SDK: "28" 18 | ANDROID_BUILD_TOOLS: "28.0.2" 19 | plugin: android-sdk-setup 20 | 21 | - name: clone 22 | docker: 23 | image: flowci/debian-git 24 | plugin: 'gitclone' 25 | 26 | - name: lint 27 | bash: | 28 | cd ${FLOWCI_GIT_REPO} 29 | ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint 30 | 31 | - name: build 32 | bash: | 33 | cd ${FLOWCI_GIT_REPO} 34 | ./gradlew assembleDebug 35 | 36 | - name: test 37 | timeout: 7200 38 | bash: | 39 | cd ${FLOWCI_GIT_REPO} 40 | ./gradlew -Pci --console=plain :app:testDebug 41 | 42 | - name: jacoco 43 | bash: | 44 | cd ${FLOWCI_GIT_REPO} 45 | mkdir -p ${PWD}/app/build/intermediates/classes 46 | ln -s ${PWD}/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes ${PWD}/app/build/intermediates/classes/debug 47 | ./gradlew -Pci --console=plain jacocoTestReport 48 | 49 | - name: upload report 50 | docker: 51 | image: ubuntu:18.04 52 | envs: 53 | # report from jacoco 54 | REPORT_PATH: ${FLOWCI_GIT_REPO}/app/build/reports/coverage 55 | REPORT_NAME: Code Coverage 56 | plugin: report-upload 57 | 58 | - name: build release 59 | bash: | 60 | cd ${FLOWCI_GIT_REPO} 61 | ./gradlew assembleRelease 62 | 63 | 64 | ############################################### 65 | ### to sign apk, it needs to create a 'secret' in admin page, 66 | ### and put the secret name to `SIGN_SECRET` 67 | ############################################### 68 | 69 | # - name: sign apk 70 | # envs: 71 | # SIGN_FILE_PATTERN: '*-unsigned.apk' 72 | # SIGN_SECRET: android-demo 73 | # docker: 74 | # image: openjdk:8-jdk 75 | # plugin: android-signing 76 | 77 | # - name: upload singed apk 78 | # docker: 79 | # image: ubuntu:18.04 80 | # envs: 81 | # artifact_pattern: '*-signed.apk' 82 | # plugin: 'artifact-upload' 83 | -------------------------------------------------------------------------------- /dotnetcore-powershell.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Example YAML for flow.ci 3 | # 4 | envs: 5 | FLOWCI_GIT_URL: https://gitlab.com/tobiaskoch/gitlab-ci-example-dotnetcore.git 6 | 7 | steps: 8 | - name: clone 9 | pwsh: | 10 | Remove-Item $env:FLOWCI_GIT_REPO -Force -ErrorAction SilentlyContinue 11 | git clone $env:FLOWCI_GIT_URL $env:FLOWCI_GIT_REPO 12 | echo "$env:FLOWCI_GIT_URL has been cloned" 13 | 14 | - name: test 15 | pwsh: | 16 | cd $env:FLOWCI_GIT_REPO 17 | dotnet --version 18 | dotnet test 19 | 20 | - name: publish 21 | pwsh: | 22 | cd $env:FLOWCI_GIT_REPO 23 | # output to publish directory 24 | dotnet publish -c Release -o publish MyProject/MyProject.csproj -------------------------------------------------------------------------------- /dotnetcore-with-docker.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Example YAML for flow.ci 3 | # 4 | envs: 5 | FLOWCI_GIT_URL: https://gitlab.com/tobiaskoch/gitlab-ci-example-dotnetcore.git 6 | 7 | docker: 8 | image: mcr.microsoft.com/dotnet/core/sdk:2.2.301 9 | 10 | steps: 11 | - name: clone 12 | docker: 13 | image: flowci/debian-git 14 | plugin: 'gitclone' 15 | 16 | - name: test 17 | bash: | 18 | cd $FLOWCI_GIT_REPO 19 | echo | dotnet --version 20 | dotnet tool install dotnet-reportgenerator-globaltool --tool-path tools 21 | dotnet test 22 | 23 | - name: publish 24 | bash: | 25 | cd $FLOWCI_GIT_REPO 26 | 27 | # output to publish directory 28 | dotnet publish -c Release -o ../publish MyProject/MyProject.csproj 29 | 30 | - name: upload 31 | envs: 32 | artifact_path: '${FLOWCI_AGENT_JOB_DIR}/${FLOWCI_GIT_REPO}/publish/' 33 | plugin: 'artifact-upload' -------------------------------------------------------------------------------- /email.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 43 | 44 | 45 | 46 |
47 | #if( $FLOWCI_JOB_STATUS == 'SUCCESS' ) 48 |

flow.ci report: $FLOWCI_FLOW_NAME $FLOWCI_JOB_BUILD_NUM

49 | #elseif( $FLOWCI_JOB_STATUS == 'FAILURE') 50 |

flow.ci report: $FLOWCI_FLOW_NAME $FLOWCI_JOB_BUILD_NUM

51 | #elseif( $FLOWCI_JOB_STATUS == 'CANCELLED') 52 |

flow.ci report: $FLOWCI_FLOW_NAME $FLOWCI_JOB_BUILD_NUM

53 | #elseif( $FLOWCI_JOB_STATUS == 'TIMEOUT') 54 |

flow.ci report: $FLOWCI_FLOW_NAME $FLOWCI_JOB_BUILD_NUM

55 | #end 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | #if ( $FLOWCI_JOB_TRIGGER == 'PUSH' || $$FLOWCI_JOB_TRIGGER == 'TAG' ) 86 | 87 | 100 | 101 | #end 102 | 103 | 104 | #if ( $FLOWCI_JOB_TRIGGER == 'PR_OPENED' || $$FLOWCI_JOB_TRIGGER == 'PR_MERGED' ) 105 | 106 | 125 | 126 | #end 127 | 128 | 129 | 130 | 139 | 140 | 141 |
State:$FLOWCI_JOB_STATUS
Trigger:$FLOWCI_JOB_TRIGGER
Triggered By:$FLOWCI_JOB_TRIGGER_BY
Start At:$FLOWCI_JOB_START_AT
Finish At:$FLOWCI_JOB_FINISH_AT
Duration:$FLOWCI_JOB_DURATION (s)
88 |
Git Info:
89 |
90 | Branch: $FLOWCI_GIT_BRANCH 91 |
92 |
93 | Commit ID: 94 | $FLOWCI_GIT_COMMIT_ID 95 |
96 |
97 | Commit Message: $FLOWCI_GIT_COMMIT_MESSAGE 98 |
99 |
107 |
Git Info:
108 |
109 | Title: 110 | $FLOWCI_GIT_PR_TITLE 111 |
112 |
113 | Message: $FLOWCI_GIT_PR_MESSAGE 114 |
115 |
116 | Number: $FLOWCI_GIT_PR_NUMBER 117 |
118 |
119 | Head Repo: $FLOWCI_GIT_PR_HEAD_REPO_NAME, $FLOWCI_GIT_PR_HEAD_REPO_BRANCH 120 |
121 |
122 | Base Repo: $FLOWCI_GIT_PR_BASE_REPO_NAME, $FLOWCI_GIT_PR_BASE_REPO_BRANCH 123 |
124 |
131 |
Steps:
132 | #foreach( $item in $$FLOWCI_JOB_STEPS.split(";") ) 133 |
134 | #set ( $stepInfo = $item.split("=") ) 135 | $stepInfo[0] : $stepInfo[1] 136 |
137 | #end 138 |
142 |
143 | 144 | -------------------------------------------------------------------------------- /golang-parallel.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Build Golang project with parallel 3 | # 4 | 5 | envs: 6 | # Git config 7 | FLOWCI_GIT_URL: "https://github.com/FlowCI/gin.git" 8 | 9 | ## Credential name if git repo url is ssh or login required for http 10 | # FLOWCI_GIT_CREDENTIAL: "the credentail name your created" 11 | 12 | steps: 13 | - name: clone 14 | docker: 15 | image: flowci/debian-git 16 | plugin: 'gitclone' 17 | cache: 18 | key: repo 19 | paths: 20 | - "./${FLOWCI_GIT_REPO}" 21 | 22 | - parallel: 23 | lint-flow: 24 | steps: 25 | - name: lint 26 | plugin: 'go-lint' 27 | allow_failure: true 28 | cache: 29 | key: repo 30 | 31 | test-flow: 32 | steps: 33 | - name: test 34 | docker: 35 | image: golang:1.13 36 | plugin: 'go-test' 37 | cache: 38 | key: repo -------------------------------------------------------------------------------- /golang.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Golang Project Template 3 | # 4 | 5 | envs: 6 | # Git config 7 | FLOWCI_GIT_URL: "https://github.com/FlowCI/gin.git" 8 | 9 | ## Credential name if git repo url is ssh or login required for http 10 | # FLOWCI_GIT_CREDENTIAL: "the credentail name your created" 11 | 12 | steps: 13 | - name: clone 14 | docker: 15 | image: flowci/debian-git 16 | plugin: 'gitclone' 17 | allow_failure: false 18 | 19 | - name: lint 20 | plugin: 'go-lint' 21 | allow_failure: true 22 | 23 | - name: test 24 | docker: 25 | image: golang:1.13 26 | plugin: 'go-test' 27 | -------------------------------------------------------------------------------- /helloworld.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Example YAML for flow.ci 3 | # 4 | 5 | # environment variables in flow level which can be used in every steps 6 | envs: 7 | # Define Flow level variables 8 | EXAMPLE_VAR: "Hi, I'am an example YAML" 9 | 10 | steps: 11 | - name: run script 12 | envs: 13 | SAY_HELLO: "hello.flow.ci" 14 | allow_failure: true 15 | bash: | 16 | echo ${SAY_HELLO} ${EXAMPLE_VAR} 17 | sleep 1 18 | 19 | - name: build in envs 20 | bash: | 21 | echo "Server URL = ${FLOWCI_SERVER_URL}" 22 | echo "Ttoken = ${FLOWCI_AGENT_TOKEN}" 23 | echo "Port = ${FLOWCI_AGENT_PORT}" 24 | echo "Workspace = ${FLOWCI_AGENT_WORKSPACE}" 25 | echo "Current job dir = ${FLOWCI_AGENT_JOB_DIR}" 26 | echo "Plugin dir = ${FLOWCI_AGENT_PLUGIN_DIR}" 27 | echo "IP of en0 = ${FLOWCI_AGENT_IP_en0}" 28 | 29 | - name: state example 30 | docker: 31 | image: ubuntu:18.04 32 | bash: | 33 | echo 'this will executed on each sub steps' 34 | steps: 35 | - name: install dep A 36 | bash: | 37 | echo 'install something about A' 38 | echo 'the docker image from parent step will be used' 39 | - name: install dep B 40 | docker: 41 | image: node:14 42 | bash: | 43 | echo 'install something about B' 44 | echo 'the docker image on current step will be used' 45 | 46 | - name: run from docker 47 | envs: 48 | COND_VAR: "hello" 49 | condition: | 50 | return "$COND_VAR" == "hello" 51 | docker: 52 | image: golang:1.12 53 | bash: | 54 | go get github.com/golang/example/hello 55 | $GOPATH/bin/hello 56 | 57 | - name: run mutiple dockers 58 | dockers: 59 | - image: flowci/debian-docker 60 | is_runtime: true 61 | 62 | - image: mysql:5.6 63 | environment: 64 | MYSQL_ROOT_PASSWORD: 12345 65 | bash: | 66 | ## print container id 67 | echo "ubuntu:18.04 id = $CONTAINER_ID_0" 68 | echo "mysql:5.6 id = $CONTAINER_ID_1" 69 | 70 | ## print container ip, network mode is 'bridge' by default 71 | echo "ubuntu:18.04 ip = $CONTAINER_IP_0" 72 | echo "mysql:5.6 ip = $CONTAINER_IP_1" 73 | 74 | python3 --version 75 | 76 | ## wait-for-it.sh is built-in command to wait for other service, bash only 77 | wait-for-it.sh ${CONTAINER_IP_1}:3306 -t 30 78 | if [ $? == 0 ];then 79 | docker run --network ${FLOWCI_AGENT_DOCKER_NETWORK} --rm mysql:5.6 mysql -h${CONTAINER_IP_1} -uroot -p12345 mysql -e "select * from user" 80 | fi 81 | -------------------------------------------------------------------------------- /ios-xcode.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # iOS Project Template with xcode 3 | # 4 | 5 | envs: 6 | # Git config 7 | FLOWCI_GIT_URL: "https://github.com/FlowCI/FaceLandmarksDetection.git" 8 | 9 | ## Credential name if git repo url is ssh or login required for http 10 | # FLOWCI_GIT_CREDENTIAL: "the credentail name your created" 11 | 12 | IOS_PROJECT_NAME: DetectFaceLandmarks.xcodeproj 13 | 14 | # schema name could be selected from 'xcodebuild -list' 15 | IOS_SCHEME_NAME: DetectFaceLandmarks 16 | 17 | steps: 18 | - name: clone 19 | plugin: 'gitclone' 20 | allow_failure: false 21 | 22 | # sudo gem install cocoapods 23 | - name: pod install 24 | allow_failure: true 25 | bash: | 26 | cd ${FLOWCI_GIT_REPO} 27 | pod install 28 | 29 | # If 'xcodebuild' not found, please install xcode and run 'sudo xcode-select -s /Applications/Xcode.app/Contents/Developer' 30 | # gem install xcpretty 31 | - name: test 32 | envs: 33 | TEST_DEST: 'platform=iOS Simulator,name=iPhone 11,OS=15.0' 34 | bash: | 35 | xcodebuild clean -project $IOS_PROJECT_NAME -scheme $IOS_SCHEME_NAME 36 | xcodebuild test -project $IOS_PROJECT_NAME -scheme $IOS_SCHEME_NAME -destination $TEST_DEST 37 | 38 | - name: archive 39 | bash: | 40 | xcodebuild clean archive -archivePath build/${IOS_PROJECT_NAME} -scheme ${IOS_SCHEME_NAME} 41 | xcodebuild archive -project ${IOS_PROJECT_NAME} -scheme ${IOS_SCHEME_NAME} -archivePath ./${IOS_SCHEME_NAME}.xcarchive -exportProvisioningProfile "ProvisioningProfileName" -------------------------------------------------------------------------------- /maven.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Maven Project Template 3 | # 4 | 5 | envs: 6 | # Git config 7 | FLOWCI_GIT_URL: "https://github.com/FlowCI/spring-petclinic-sample.git" 8 | 9 | ## Credential name if git repo url is ssh or login required for http 10 | # FLOWCI_GIT_CREDENTIAL: "the credentail name your created" 11 | 12 | docker: 13 | image: "maven:3.6-jdk-8" 14 | 15 | steps: 16 | - name: clone 17 | docker: 18 | image: flowci/debian-git 19 | plugin: 'gitclone' 20 | allow_failure: false 21 | 22 | - name: run unit test 23 | envs: 24 | MVN_CMD: "mvn clean test" 25 | plugin: 'maven-runner' 26 | 27 | - name: junit upload 28 | plugin: "junit-report-uploader" 29 | 30 | - name: jacoco upload 31 | plugin: "jacoco-report-uploader" 32 | 33 | - name: package 34 | envs: 35 | MVN_CMD: "mvn package -Dmaven.test.skip=true" 36 | plugin: 'maven-runner' 37 | 38 | - name: upload 39 | envs: 40 | artifact_pattern: "*.jar" 41 | plugin: 'artifact-upload' -------------------------------------------------------------------------------- /npm.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # NPM Project Template 3 | # 4 | 5 | envs: 6 | FLOWCI_GIT_URL: "https://github.com/hexojs/hexo.git" 7 | 8 | ## default docker image for steps 9 | docker: 10 | image: node:12 11 | 12 | steps: 13 | - name: clone 14 | docker: 15 | image: flowci/debian-git 16 | plugin: 'gitclone' 17 | 18 | - name: install 19 | envs: 20 | NPM_CMD: "npm install" 21 | plugin: 'npm-runner' 22 | 23 | - name: lint 24 | envs: 25 | NPM_CMD: "npm run eslint" 26 | plugin: 'npm-runner' 27 | 28 | - name: test 29 | envs: 30 | NPM_CMD: "npm run test-cov" 31 | plugin: 'npm-runner' 32 | 33 | - name: gen-report 34 | envs: 35 | NPM_CMD: "nyc report --reporter=html" 36 | plugin: 'npm-runner' 37 | 38 | - name: report upload 39 | docker: 40 | image: ubuntu:18.04 41 | envs: 42 | REPORT_PATH: "${FLOWCI_GIT_REPO}/coverage" 43 | REPORT_NAME: "Code Coverage" 44 | plugin: 'report-upload' 45 | -------------------------------------------------------------------------------- /php.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # PHP Project Template 3 | # 4 | 5 | envs: 6 | FLOWCI_GIT_URL: "https://gitlab.com/gitlab-examples/php.git" 7 | 8 | steps: 9 | - name: clone 10 | docker: 11 | image: flowci/debian-git 12 | plugin: 'gitclone' 13 | 14 | - name: composer install 15 | docker: 16 | image: composer:2 17 | bash: | 18 | cd $FLOWCI_GIT_REPO 19 | composer install 20 | 21 | - name: unit test 22 | dockers: 23 | - image: php:7.4 24 | is_runtime: true 25 | - image: mysql:5.7 26 | name: mysql 27 | environment: 28 | MYSQL_DATABASE: hello_world_test 29 | MYSQL_ROOT_PASSWORD: mysql 30 | bash: | 31 | cd $FLOWCI_GIT_REPO 32 | 33 | ## install db driver 34 | docker-php-ext-install pdo_mysql 35 | 36 | ## install phpunit test coverage driver 37 | pecl install xdebug && docker-php-ext-enable xdebug 38 | 39 | ## make sure mysql is upon running 40 | wait-for-it.sh mysql:3306 -t 30 41 | 42 | ## run phpunit 43 | ./vendor/bin/phpunit --configuration phpunit_mysql.xml --coverage-html reports 44 | 45 | - name: upload report 46 | docker: 47 | image: ubuntu:18.04 48 | envs: 49 | REPORT_PATH: "${FLOWCI_GIT_REPO}/reports" 50 | REPORT_NAME: "Code Coverage" 51 | plugin: 'report-upload' 52 | -------------------------------------------------------------------------------- /ruby.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # Ruby Project Template 3 | # 4 | 5 | envs: 6 | # Git config 7 | FLOWCI_GIT_URL: "https://github.com/rack/rack.git" 8 | 9 | ## Credential name if git repo url is ssh or login required for http 10 | # FLOWCI_GIT_CREDENTIAL: "the credentail name your created" 11 | 12 | GEM_HOME: ${FLOWCI_AGENT_WORKSPACE}/.gem_home 13 | 14 | docker: 15 | image: ruby:2.7 16 | 17 | steps: 18 | - name: clone 19 | docker: 20 | image: flowci/debian-git 21 | plugin: 'gitclone' 22 | 23 | - name: install 24 | bash: | 25 | cd $FLOWCI_GIT_REPO 26 | bundle install 27 | 28 | - name: rubocop 29 | bash: | 30 | cd $FLOWCI_GIT_REPO 31 | ${GEM_HOME}/bin/rubocop --format html -o rubocop.html 32 | allow_failure: true 33 | 34 | - name: upload report 35 | envs: 36 | REPORT_PATH: "${FLOWCI_GIT_REPO}/rubocop.html" 37 | REPORT_NAME: "Rubocop" 38 | REPORT_ENTRY_FILE: "rubocop.html" 39 | plugin: 'report-upload' 40 | 41 | - name: test 42 | bash: | 43 | cd $FLOWCI_GIT_REPO 44 | bundle exec rake test 45 | allow_failure: true 46 | -------------------------------------------------------------------------------- /templates.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "url": "https://raw.githubusercontent.com/FlowCI/templates/master/helloworld.yaml", 4 | "url_cn": "https://gitee.com/flow_ci/flow-templates/raw/master/helloworld.yaml", 5 | "title": "Hello World", 6 | "desc": "Sample template shows how to define steps", 7 | "default": true 8 | }, 9 | { 10 | "url": "https://raw.githubusercontent.com/FlowCI/templates/master/maven.yaml", 11 | "url_cn": "https://gitee.com/flow_ci/flow-templates/raw/master/maven.yaml", 12 | "title": "Maven", 13 | "desc": "Template of how to build, test Maven project" 14 | }, 15 | { 16 | "url": "https://raw.githubusercontent.com/FlowCI/templates/master/golang.yaml", 17 | "url_cn": "https://gitee.com/flow_ci/flow-templates/raw/master/golang.yaml", 18 | "title": "Golang", 19 | "desc": "Template of how to build, test Golang project" 20 | }, 21 | { 22 | "url": "https://raw.githubusercontent.com/FlowCI/templates/master/npm.yaml", 23 | "url_cn": "https://gitee.com/flow_ci/flow-templates/raw/master/npm.yaml", 24 | "title": "npm", 25 | "desc": "Template of how to build, test NPM project" 26 | }, 27 | { 28 | "url": "https://raw.githubusercontent.com/FlowCI/templates/master/ruby.yaml", 29 | "url_cn": "https://gitee.com/flow_ci/flow-templates/raw/master/ruby.yaml", 30 | "title": "Ruby", 31 | "desc": "Template of how to build, test Ruby project" 32 | }, 33 | { 34 | "url": "https://raw.githubusercontent.com/FlowCI/templates/master/php.yaml", 35 | "url_cn": "https://gitee.com/flow_ci/flow-templates/raw/master/php.yaml", 36 | "title": "PHP", 37 | "desc": "Template of how to build, test PHP project" 38 | }, 39 | { 40 | "url": "https://raw.githubusercontent.com/FlowCI/templates/master/android.yaml", 41 | "url_cn": "https://gitee.com/flow_ci/flow-templates/raw/master/android.yaml", 42 | "title": "Android", 43 | "desc": "Template of how to build, test Android project by Gradle" 44 | }, 45 | { 46 | "url": "https://raw.githubusercontent.com/FlowCI/templates/master/dotnetcore-powershell.yaml", 47 | "url_cn": "https://gitee.com/flow_ci/flow-templates/raw/master/dotnetcore-powershell.yaml", 48 | "title": ".NetCore with PowerShell", 49 | "desc": "Template of how to build, test .NetCore project with PowerShell" 50 | }, 51 | { 52 | "url": "https://raw.githubusercontent.com/FlowCI/templates/master/dotnetcore-with-docker.yaml", 53 | "url_cn": "https://gitee.com/flow_ci/flow-templates/raw/master/dotnetcore-with-docker.yaml", 54 | "title": ".NetCore within Docker", 55 | "desc": "Template of how to build, test .NetCore project within docker" 56 | } 57 | ] --------------------------------------------------------------------------------