123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- variables:
- DEBIAN_FRONTEND: noninteractive
- REPRODUCIBLE_FLAGS: -trimpath -ldflags=-buildid=
- # set up apt for automated use
- .apt-template: &apt-template
- - export LC_ALL=C.UTF-8
- - export DEBIAN_FRONTEND=noninteractive
- - echo Etc/UTC > /etc/timezone
- - echo 'quiet "1";'
- 'APT::Install-Recommends "0";'
- 'APT::Install-Suggests "0";'
- 'APT::Acquire::Retries "20";'
- 'APT::Get::Assume-Yes "true";'
- 'Dpkg::Use-Pty "0";'
- > /etc/apt/apt.conf.d/99gitlab
- - apt-get update
- - apt-get dist-upgrade
- # Set things up to use the OS-native packages for Go. Anything that
- # is downloaded by go during the `go fmt` stage is not coming from the
- # Debian/Ubuntu repo. So those would need to be packaged for this to
- # make it into Debian and/or Ubuntu.
- .debian-native-template: &debian-native-template
- variables:
- GOPATH: /usr/share/gocode
- before_script:
- - apt-get update
- - apt-get -qy install --no-install-recommends
- build-essential
- ca-certificates
- git
- golang
- golang-github-cheekybits-genny-dev
- golang-github-jtolds-gls-dev
- golang-github-klauspost-reedsolomon-dev
- golang-github-lucas-clemente-quic-go-dev
- golang-github-smartystreets-assertions-dev
- golang-github-smartystreets-goconvey-dev
- golang-github-tjfoc-gmsm-dev
- golang-github-xtaci-kcp-dev
- golang-github-xtaci-smux-dev
- golang-golang-x-crypto-dev
- golang-golang-x-net-dev
- golang-goptlib-dev
- golang-golang-x-sys-dev
- golang-golang-x-text-dev
- golang-golang-x-xerrors-dev
- lbzip2
- # use Go installed as part of the official, Debian-based Docker images
- .golang-docker-debian-template: &golang-docker-debian-template
- before_script:
- - apt-get update
- - apt-get -qy install --no-install-recommends
- ca-certificates
- git
- lbzip2
- .go-test: &go-test
- - test -z "$(go fmt ./...)"
- - go vet ./...
- - go test -v -race ./...
- - cd $CI_PROJECT_DIR/client/
- - go get
- - go build $REPRODUCIBLE_FLAGS
- .test-template: &test-template
- artifacts:
- name: "${CI_PROJECT_PATH}_${CI_JOB_STAGE}_${CI_JOB_ID}_${CI_COMMIT_REF_NAME}_${CI_COMMIT_SHA}"
- paths:
- - client/*.aar
- - client/*.jar
- - client/client
- expire_in: 1 week
- when: on_success
- after_script:
- - echo "Download debug artifacts from https://gitlab.com/${CI_PROJECT_PATH}/-/jobs"
- # this file changes every time but should not be cached
- - rm -f $GRADLE_USER_HOME/caches/modules-2/modules-2.lock
- - rm -rf $GRADLE_USER_HOME/caches/*/plugin-resolution/
- # -- jobs ------------------------------------------------------------
- android:
- image: debian:bullseye-backports
- variables:
- ANDROID_HOME: /usr/lib/android-sdk
- GOPATH: "/go"
- LANG: C.UTF-8
- PATH: "/go/bin:/usr/lib/go-1.16/bin:/usr/bin:/bin"
- cache:
- paths:
- - .gradle/wrapper
- - .gradle/caches
- <<: *test-template
- before_script:
- - *apt-template
- - apt-get install
- android-sdk-platform-23
- android-sdk-platform-tools
- build-essential
- curl
- default-jdk-headless
- git
- gnupg
- unzip
- wget
- - apt-get install -t bullseye-backports golang-1.16
- - ndk=android-ndk-r21e-linux-x86_64.zip
- - wget --continue --no-verbose https://dl.google.com/android/repository/$ndk
- - echo "ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e $ndk" > $ndk.sha256
- - sha256sum -c $ndk.sha256
- - unzip -q $ndk
- - rm ${ndk}*
- - mv android-ndk-* $ANDROID_HOME/ndk-bundle/
- - chmod -R a+rX $ANDROID_HOME
- script:
- - *go-test
- - export GRADLE_USER_HOME=$CI_PROJECT_DIR/.gradle
- - go version
- - go env
- - go get golang.org/x/mobile/cmd/gomobile
- - go get golang.org/x/mobile/cmd/gobind
- - go install golang.org/x/mobile/cmd/gobind
- - go install golang.org/x/mobile/cmd/gomobile
- - gomobile init
- - cd $CI_PROJECT_DIR/client
- # gomobile builds a shared library not a CLI executable
- - sed -i 's,^package main$,package snowflakeclient,' *.go
- - go get golang.org/x/mobile/bind
- - gomobile bind -v -target=android $REPRODUCIBLE_FLAGS .
- go-1.16:
- image: golang:1.16-stretch
- <<: *golang-docker-debian-template
- <<: *test-template
- script:
- - *go-test
- go-1.17:
- image: golang:1.17-stretch
- <<: *golang-docker-debian-template
- <<: *test-template
- script:
- - *go-test
- go-1.18:
- image: golang:1.18-stretch
- <<: *golang-docker-debian-template
- <<: *test-template
- script:
- - *go-test
- debian-testing:
- image: debian:testing
- <<: *debian-native-template
- <<: *test-template
- script:
- - *go-test
- generate_tarball:
- stage: deploy
- image: golang:1.17-stretch
- rules:
- - if: $CI_COMMIT_TAG
- script:
- - go mod vendor
- - tar czf ${CI_PROJECT_NAME}-${CI_COMMIT_TAG#v}.tar.gz --transform "s,^,${CI_PROJECT_NAME}-${CI_COMMIT_TAG#v}/," *
- after_script:
- - echo TAR_JOB_ID=$CI_JOB_ID >> generate_tarball.env
- artifacts:
- paths:
- - ${CI_PROJECT_NAME}-${CI_COMMIT_TAG#v}.tar.gz
- reports:
- dotenv: generate_tarball.env
- release-job:
- stage: deploy
- image: registry.gitlab.com/gitlab-org/release-cli:latest
- rules:
- - if: $CI_COMMIT_TAG
- needs:
- - job: generate_tarball
- artifacts: true
- script:
- - echo "running release_job"
- release:
- name: 'Release $CI_COMMIT_TAG'
- description: 'Created using the release-cli'
- tag_name: '$CI_COMMIT_TAG'
- ref: '$CI_COMMIT_TAG'
- assets:
- links:
- - name: '${CI_PROJECT_NAME}-${CI_COMMIT_TAG#v}.tar.gz'
- url: '${CI_PROJECT_URL}/-/jobs/${TAR_JOB_ID}/artifacts/file/${CI_PROJECT_NAME}-${CI_COMMIT_TAG#v}.tar.gz'
-
|