.gitlab-ci.yml 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. variables:
  2. DEBIAN_FRONTEND: noninteractive
  3. REPRODUCIBLE_FLAGS: -trimpath -ldflags=-buildid=
  4. # set up apt for automated use
  5. .apt-template: &apt-template
  6. - export LC_ALL=C.UTF-8
  7. - export DEBIAN_FRONTEND=noninteractive
  8. - echo Etc/UTC > /etc/timezone
  9. - echo 'quiet "1";'
  10. 'APT::Install-Recommends "0";'
  11. 'APT::Install-Suggests "0";'
  12. 'APT::Acquire::Retries "20";'
  13. 'APT::Get::Assume-Yes "true";'
  14. 'Dpkg::Use-Pty "0";'
  15. > /etc/apt/apt.conf.d/99gitlab
  16. - apt-get update
  17. - apt-get dist-upgrade
  18. # Set things up to use the OS-native packages for Go. Anything that
  19. # is downloaded by go during the `go fmt` stage is not coming from the
  20. # Debian/Ubuntu repo. So those would need to be packaged for this to
  21. # make it into Debian and/or Ubuntu.
  22. .debian-native-template: &debian-native-template
  23. variables:
  24. GOPATH: /usr/share/gocode
  25. before_script:
  26. - apt-get update
  27. - apt-get -qy install --no-install-recommends
  28. build-essential
  29. ca-certificates
  30. git
  31. golang
  32. golang-github-cheekybits-genny-dev
  33. golang-github-jtolds-gls-dev
  34. golang-github-klauspost-reedsolomon-dev
  35. golang-github-lucas-clemente-quic-go-dev
  36. golang-github-smartystreets-assertions-dev
  37. golang-github-smartystreets-goconvey-dev
  38. golang-github-tjfoc-gmsm-dev
  39. golang-github-xtaci-kcp-dev
  40. golang-github-xtaci-smux-dev
  41. golang-golang-x-crypto-dev
  42. golang-golang-x-net-dev
  43. golang-goptlib-dev
  44. golang-golang-x-sys-dev
  45. golang-golang-x-text-dev
  46. golang-golang-x-xerrors-dev
  47. lbzip2
  48. # use Go installed as part of the official, Debian-based Docker images
  49. .golang-docker-debian-template: &golang-docker-debian-template
  50. before_script:
  51. - apt-get update
  52. - apt-get -qy install --no-install-recommends
  53. ca-certificates
  54. git
  55. lbzip2
  56. .go-test: &go-test
  57. - test -z "$(go fmt ./...)"
  58. - go vet ./...
  59. - go test -v -race ./...
  60. - cd $CI_PROJECT_DIR/client/
  61. - go get
  62. - go build $REPRODUCIBLE_FLAGS
  63. .test-template: &test-template
  64. artifacts:
  65. name: "${CI_PROJECT_PATH}_${CI_JOB_STAGE}_${CI_JOB_ID}_${CI_COMMIT_REF_NAME}_${CI_COMMIT_SHA}"
  66. paths:
  67. - client/*.aar
  68. - client/*.jar
  69. - client/client
  70. expire_in: 1 week
  71. when: on_success
  72. after_script:
  73. - echo "Download debug artifacts from https://gitlab.com/${CI_PROJECT_PATH}/-/jobs"
  74. # this file changes every time but should not be cached
  75. - rm -f $GRADLE_USER_HOME/caches/modules-2/modules-2.lock
  76. - rm -rf $GRADLE_USER_HOME/caches/*/plugin-resolution/
  77. # -- jobs ------------------------------------------------------------
  78. android:
  79. image: debian:bullseye-backports
  80. variables:
  81. ANDROID_HOME: /usr/lib/android-sdk
  82. GOPATH: "/go"
  83. LANG: C.UTF-8
  84. PATH: "/go/bin:/usr/lib/go-1.16/bin:/usr/bin:/bin"
  85. cache:
  86. paths:
  87. - .gradle/wrapper
  88. - .gradle/caches
  89. <<: *test-template
  90. before_script:
  91. - *apt-template
  92. - apt-get install
  93. android-sdk-platform-23
  94. android-sdk-platform-tools
  95. build-essential
  96. curl
  97. default-jdk-headless
  98. git
  99. gnupg
  100. unzip
  101. wget
  102. - apt-get install -t bullseye-backports golang-1.16
  103. - ndk=android-ndk-r21e-linux-x86_64.zip
  104. - wget --continue --no-verbose https://dl.google.com/android/repository/$ndk
  105. - echo "ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e $ndk" > $ndk.sha256
  106. - sha256sum -c $ndk.sha256
  107. - unzip -q $ndk
  108. - rm ${ndk}*
  109. - mv android-ndk-* $ANDROID_HOME/ndk-bundle/
  110. - chmod -R a+rX $ANDROID_HOME
  111. script:
  112. - *go-test
  113. - export GRADLE_USER_HOME=$CI_PROJECT_DIR/.gradle
  114. - go version
  115. - go env
  116. - go get golang.org/x/mobile/cmd/gomobile
  117. - go get golang.org/x/mobile/cmd/gobind
  118. - go install golang.org/x/mobile/cmd/gobind
  119. - go install golang.org/x/mobile/cmd/gomobile
  120. - gomobile init
  121. - cd $CI_PROJECT_DIR/client
  122. # gomobile builds a shared library not a CLI executable
  123. - sed -i 's,^package main$,package snowflakeclient,' *.go
  124. - go get golang.org/x/mobile/bind
  125. - gomobile bind -v -target=android $REPRODUCIBLE_FLAGS .
  126. go-1.16:
  127. image: golang:1.16-stretch
  128. <<: *golang-docker-debian-template
  129. <<: *test-template
  130. script:
  131. - *go-test
  132. go-1.17:
  133. image: golang:1.17-stretch
  134. <<: *golang-docker-debian-template
  135. <<: *test-template
  136. script:
  137. - *go-test
  138. go-1.18:
  139. image: golang:1.18-stretch
  140. <<: *golang-docker-debian-template
  141. <<: *test-template
  142. script:
  143. - *go-test
  144. debian-testing:
  145. image: debian:testing
  146. <<: *debian-native-template
  147. <<: *test-template
  148. script:
  149. - *go-test
  150. generate_tarball:
  151. stage: deploy
  152. image: golang:1.17-stretch
  153. rules:
  154. - if: $CI_COMMIT_TAG
  155. script:
  156. - go mod vendor
  157. - tar czf ${CI_PROJECT_NAME}-${CI_COMMIT_TAG#v}.tar.gz --transform "s,^,${CI_PROJECT_NAME}-${CI_COMMIT_TAG#v}/," *
  158. after_script:
  159. - echo TAR_JOB_ID=$CI_JOB_ID >> generate_tarball.env
  160. artifacts:
  161. paths:
  162. - ${CI_PROJECT_NAME}-${CI_COMMIT_TAG#v}.tar.gz
  163. reports:
  164. dotenv: generate_tarball.env
  165. release-job:
  166. stage: deploy
  167. image: registry.gitlab.com/gitlab-org/release-cli:latest
  168. rules:
  169. - if: $CI_COMMIT_TAG
  170. needs:
  171. - job: generate_tarball
  172. artifacts: true
  173. script:
  174. - echo "running release_job"
  175. release:
  176. name: 'Release $CI_COMMIT_TAG'
  177. description: 'Created using the release-cli'
  178. tag_name: '$CI_COMMIT_TAG'
  179. ref: '$CI_COMMIT_TAG'
  180. assets:
  181. links:
  182. - name: '${CI_PROJECT_NAME}-${CI_COMMIT_TAG#v}.tar.gz'
  183. url: '${CI_PROJECT_URL}/-/jobs/${TAR_JOB_ID}/artifacts/file/${CI_PROJECT_NAME}-${CI_COMMIT_TAG#v}.tar.gz'