diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b7fd956b..29bbf7f6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,29 +1,176 @@ -image: golang:1.10-stretch -cache: - paths: - - .gradle/wrapper - - .gradle/caches +# use the packages for Go +.ubuntu-template: &ubuntu-template + variables: + DEBIAN_FRONTEND: noninteractive + GOPATH: /usr/share/gocode + before_script: + - apt-get -qy update + - apt-get -qy install --no-install-recommends + build-essential + ca-certificates + golang-github-smartystreets-goconvey-dev + golang-race-detector-runtime + libx11-dev + +# use Go installed as part of the official, Debian-based Docker images +.golang-docker-debian-template: &golang-docker-debian-template + variables: + DEBIAN_FRONTEND: noninteractive + before_script: + - apt-get -qy update + - apt-get -qy install --no-install-recommends + ca-certificates + libx11-dev + - go get github.com/smartystreets/goconvey/convey -before_script: +.build_env_setup: &build_env_setup | + set -x + apt-get -qy update + apt-get -qy install --no-install-recommends git pkg-config wget # Create symbolic links under $GOPATH, this is needed for local build - - export src=$GOPATH/src - - mkdir -p $src/git.torproject.org/pluggable-transports - - mkdir -p $src/gitlab.com/$CI_PROJECT_NAMESPACE - - ln -s $CI_PROJECT_DIR $src/git.torproject.org/pluggable-transports/snowflake.git - - ln -s $CI_PROJECT_DIR $src/gitlab.com/$CI_PROJECT_PATH + export src=$GOPATH/src + mkdir -p $src/git.torproject.org/pluggable-transports + mkdir -p $src/github.com/keroserene + mkdir -p $src/gitlab.com/$CI_PROJECT_NAMESPACE + ln -s $CI_PROJECT_DIR $src/git.torproject.org/pluggable-transports/snowflake + ln -s $CI_PROJECT_DIR $src/git.torproject.org/pluggable-transports/snowflake.git + ln -s $CI_PROJECT_DIR $src/github.com/keroserene/snowflake + ln -s $CI_PROJECT_DIR $src/github.com/keroserene/snowflake.git + ln -s $CI_PROJECT_DIR $src/gitlab.com/$CI_PROJECT_PATH + ln -s $CI_PROJECT_DIR $src/gitlab.com/${CI_PROJECT_PATH}.git + git checkout -B $CI_COMMIT_REF_NAME origin/$CI_COMMIT_REF_NAME # force to a branch for `go get -u` + set +x -build: +.artifacts-template: &artifacts-template + stage: deploy + artifacts: + name: "${CI_PROJECT_PATH}_${CI_JOB_STAGE}_${CI_COMMIT_REF_NAME}_${CI_COMMIT_SHA}" + untracked: true + paths: + - client/client + - client/*.aar + - client/*.jar + when: + always + expire_in: 1 day + after_script: + - echo "Download debug artifacts from https://gitlab.com/${CI_PROJECT_PATH}/-/jobs" + +.script-template: &script-template script: - - apt-get -qy update - - apt-get -qy install libx11-dev - - cd $src/gitlab.com/$CI_PROJECT_PATH/client + - *build_env_setup + - cd $src/github.com/keroserene/snowflake - go get ./... - go build ./... - go vet ./... - go test -v -race ./... -after_script: - # this file changes every time but should not be cached - - rm -f $GRADLE_USER_HOME/caches/modules-2/modules-2.lock - - rm -fr $GRADLE_USER_HOME/caches/*/plugin-resolution/ + - wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash + - export NVM_DIR="$HOME/.nvm" + - . "$NVM_DIR/nvm.sh" + - export TRAVIS_NODE_VERSION="4.2" + - nvm install $TRAVIS_NODE_VERSION + - cd proxy + - npm install + - npm run-script lint + - npm test + +# -- jobs ------------------------------------------------------------ + +android: + image: registry.gitlab.com/eighthave/ci-image-gomobile + <<: *artifacts-template + variables: + GOPATH: "/go" + script: + - *build_env_setup + - cd $src/github.com/keroserene/snowflake/client + - go get -d -u ./... + - cp $src/github.com/keroserene/go-webrtc/webrtc-android-armeabi-v7a.pc + $src/github.com/keroserene/go-webrtc/webrtc-linux-arm.pc # cgo uses both on Android :-/ + - export CGO_CXXFLAGS=-D_GLIBCXX_USE_CXX_ABI=1 + - export CGO_CFLAGS="-fsanitize=address" + - export CGO_LDFLAGS="-fsanitize=address" + # gomobile bind won't build code with 'package main' + - sed -i 's,^package main$,package snowflakeclient,' snowflake.go + - gomobile bind -v -x -target=android/arm github.com/keroserene/snowflake/client + +# build against Debian/testing and publish .deb to local apt repo +pages: + image: debian:stretch-backports + <<: *artifacts-template + variables: + DEBIAN_FRONTEND: noninteractive + GOPATH: /usr/share/gocode + script: + - *build_env_setup + - apt-get -qy update + - apt-get -qy install --no-install-recommends -t stretch-backports + aptly + golang-github-smartystreets-goconvey-dev + - apt-get -qy install --no-install-recommends + build-essential + ca-certificates + gnupg1 + libx11-dev + - cd $src/github.com/keroserene/snowflake + - go get ./... + - go build ./... + - ./build-deb + + # build apt repo from freshly built .debs + - rm -rf public $HOME/.aptly + - ln -s $CI_PROJECT_DIR $HOME/.aptly + - export aptly="aptly -gpg-provider=internal" + - export DEB_BUILD_ARCH=`dpkg --print-architecture` + - $aptly repo create autobuilt || true + - $aptly repo add autobuilt *.deb + - $aptly publish repo --skip-signing --distribution autobuilt --architectures all,$DEB_BUILD_ARCH autobuilt + || $aptly publish update --skip-signing --architectures all,$DEB_BUILD_ARCH autobuilt + # ease debugging since directory indices are disabled + - export JOB_URL="$CI_PROJECT_URL/-/jobs/$CI_JOB_ID" + - export COMMIT_URL="$CI_PROJECT_URL/commit/$CI_COMMIT_SHA" + - export BRANCH_URL="$CI_PROJECT_URL/commits/$CI_COMMIT_REF_NAME" + - cd public + - printf "
%s%sdeb [allow-insecure=yes] https://${CI_PROJECT_NAMESPACE}.gitlab.io/${CI_PROJECT_NAME} autobuilt mainapt-get install --allow-unauthenticated -t autobuilt snowflake%s