# Copyright (c) 2022 Proton Technologies AG # # This file is part of ProtonMail Bridge. # # ProtonMail Bridge is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ProtonMail Bridge is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with ProtonMail Bridge. If not, see . --- image: harbor.protontech.ch/docker.io/library/golang:1.18 variables: GOPRIVATE: gitlab.protontech.ch GOMAXPROCS: $(( ${CI_TAG_CPU} / 2 )) before_script: - apt update && apt-get -y install libsecret-1-dev - git config --global url.https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}.insteadOf https://${CI_SERVER_HOST} stages: - test - build .rules-branch-and-MR-always: rules: - if: $CI_COMMIT_BRANCH || $CI_PIPELINE_SOURCE == "merge_request_event" when: always allow_failure: false - when: never .rules-branch-and-MR-manual: rules: - if: $CI_COMMIT_BRANCH || $CI_PIPELINE_SOURCE == "merge_request_event" when: manual allow_failure: true - when: never .rules-branch-manual-MR-always: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: always allow_failure: false - if: $CI_COMMIT_BRANCH when: manual allow_failure: true - when: never # Stage: TEST lint: stage: test extends: - .rules-branch-and-MR-always script: - make lint tags: - medium test-linux: stage: test extends: - .rules-branch-manual-MR-always script: - make test tags: - medium test-linux-race: stage: test extends: - .rules-branch-and-MR-manual script: - make test-race tags: - medium test-integration: stage: test extends: - .rules-branch-manual-MR-always script: - make test-integration tags: - large test-integration-race: stage: test extends: - .rules-branch-and-MR-manual script: - make test-integration-race tags: - large dependency-updates: stage: test script: - make updates # Stage: BUILD .build-base: stage: build needs: ["lint"] rules: # GODT-1833: use `=~ /qa/` after mac and windows runners are fixed - if: $CI_JOB_NAME =~ /build-linux-qa/ && $CI_PIPELINE_SOURCE == "merge_request_event" when: always allow_failure: false - if: $CI_COMMIT_BRANCH || $CI_PIPELINE_SOURCE == "merge_request_event" when: manual allow_failure: true - when: never before_script: - mkdir -p .cache/bin - export PATH=$(pwd)/.cache/bin:$PATH - export GOPATH="$CI_PROJECT_DIR/.cache" - export PATH=$PATH:$QT6DIR/bin - $(git config --global -l | grep -o 'url.*gitlab.protontech.ch.*insteadof' | xargs -L 1 git config --global --unset &> /dev/null) || echo "nothing to remove" - git config --global url.https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}.insteadOf https://${CI_SERVER_HOST} script: - make build - git diff && git diff-index --quiet HEAD - make vault-editor artifacts: # Note: The latest artifacts for refs are locked against deletion, and kept # regardless of the expiry time. Introduced in GitLab 13.0 behind a # disabled feature flag, and made the default behavior in GitLab 13.4. expire_in: 1 day when: always paths: - bridge_*.tgz - vault-editor tags: - large build-linux: extends: .build-base image: gitlab.protontech.ch:4567/go/bridge-internal:qt6 variables: VCPKG_DEFAULT_BINARY_CACHE: ${CI_PROJECT_DIR}/.cache cache: key: linux-vcpkg paths: - .cache when: 'always' artifacts: name: "bridge-linux-$CI_COMMIT_SHORT_SHA" build-linux-qa: extends: build-linux variables: BUILD_TAGS: "build_qa" artifacts: name: "bridge-linux-qa-$CI_COMMIT_SHORT_SHA" .build-darwin-base: extends: .build-base before_script: - export PATH=/usr/local/bin:$PATH - export PATH=/usr/local/opt/git/bin:$PATH - export PATH=/usr/local/opt/make/libexec/gnubin:$PATH - export PATH=/usr/local/opt/go@1.13/bin:$PATH - export PATH=/usr/local/opt/gnu-sed/libexec/gnubin:$PATH - export GOPATH=~/go - export PATH=$GOPATH/bin:$PATH - export CGO_CPPFLAGS='-Wno-error -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-builtin-requires-header' - $(git config --global -l | grep -o 'url.*gitlab.protontech.ch.*insteadof' | xargs -L 1 git config --global --unset &> /dev/null) || echo "nothing to remove" - git config --global url.https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}.insteadOf https://${CI_SERVER_HOST} script: - go version - make build-nogui - git diff && git diff-index --quiet HEAD - make vault-editor cache: {} tags: - macOS build-darwin: extends: .build-darwin-base artifacts: name: "bridge-darwin-$CI_COMMIT_SHORT_SHA" build-darwin-qa: extends: .build-darwin-base variables: BUILD_TAGS: "build_qa" artifacts: name: "bridge-darwin-qa-$CI_COMMIT_SHORT_SHA" .build-windows-base: extends: .build-base before_script: - export GOROOT=/c/Go1.18/ - export PATH=$GOROOT/bin:$PATH - export GOARCH=amd64 - export GOPATH=~/go18 - export GO111MODULE=on - export PATH="${GOPATH}/bin:${PATH}" - export MSYSTEM= - export QT6DIR=/c/grrrQt/6.3.1/msvc2019_64 - export PATH=$PATH:${QT6DIR}/bin - export PATH="/c/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin:$PATH" - $(git config --global -l | grep -o 'url.*gitlab.protontech.ch.*insteadof' | xargs -L 1 git config --global --unset &> /dev/null) || echo "nothing to remove" - git config --global url.https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}.insteadOf https://${CI_SERVER_HOST} script: - make build-nogui - git diff && git diff-index --quiet HEAD - make vault-editor tags: - windows-bridge build-windows: extends: .build-windows-base artifacts: name: "bridge-windows-$CI_COMMIT_SHORT_SHA" build-windows-qa: extends: .build-windows-base variables: BUILD_TAGS: "build_qa" artifacts: name: "bridge-windows-qa-$CI_COMMIT_SHORT_SHA" # TODO: PUT BACK ALL THE JOBS! JUST DID THIS FOR NOW TO GET CI WORKING AGAIN...