Merge pull request #692 from Jigsaw-Code/fortuna-travis

Clarify Travis build
This commit is contained in:
Vinicius Fortuna 2020-06-12 12:34:19 -04:00 • committed by GitHub
commit 6e73e68f92
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 41 deletions

View file

@ -23,25 +23,21 @@ before_install:
fi;
stages:
- name: tag
- name: "Server Daily Release"
if: type = cron
- name: build and unit test
- name: Test
if: type != cron
- name: integration test
if: type != cron
- name: deploy
if: tag =~ ^daily
- name: release
- name: "deploy"
if: tag =~ ^server-
- name: "Manager Release"
if: tag =~ ^v[0-9]
# Stages with the same name define multiple jobs which run in parallel.
# To make it more apparent in the Travis UI exactly what each job is
# doing, we add a descriptive environment variable.
jobs:
include:
- stage: tag
- stage: "Server Daily Release"
script:
- RELEASE_NAME=daily-$(date -I)
- RELEASE_NAME=server-$(date -I)
- curl --data '{"tag_name":"'$RELEASE_NAME'","name":"'$RELEASE_NAME'","prerelease":true}' https://api.github.com/repos/Jigsaw-Code/outline-server/releases?access_token=$CI_USER_TOKEN
# Ideally, we would split this stage in some way, e.g. by component or by
@ -49,8 +45,10 @@ jobs:
# command failed. However, since each stage incurs a significantly start-up
# cost, we combine test and build commands for all components into one fast
# stage.
- stage: build and unit test
- stage: Test
name: Unit Tests
script:
- yarn lint
- yarn do metrics_server/build
- yarn do sentry_webhook/build
- yarn do shadowbox/server/build
@ -60,7 +58,8 @@ jobs:
- yarn do server_manager/web_app/build
- yarn do server_manager/web_app/test
- stage: integration test
- stage: Test
name: Server Integration Test
sudo: required
services: docker
script:
@ -70,11 +69,10 @@ jobs:
curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m) > docker-compose
chmod +x docker-compose
sudo mv docker-compose /usr/local/bin
- yarn do shadowbox/integration_test/run
- yarn do shadowbox/docker/build && cd src/shadowbox/integration_test && ./test.sh
- stage: deploy
env:
- DESC=shadowbox docker image
name: Server Docker Image
sudo: required
services: docker
script:
@ -86,8 +84,7 @@ jobs:
- docker push quay.io/outline/shadowbox:daily
- stage: deploy
env:
- DESC=linux manager
name: Manager Linux
addons:
apt:
packages:
@ -96,8 +93,7 @@ jobs:
# https://www.electron.build/multi-platform-build
- stage: deploy
env:
- DESC=windows manager
name: Manager Windows
sudo: required
services: docker
script:
@ -111,28 +107,25 @@ jobs:
/bin/bash -c "yarn do server_manager/electron_app/package_only_windows" || travis_terminate $?
- stage: deploy
env:
- DESC=macos manager
name: Manager macOS
os: osx
script: yarn do server_manager/electron_app/package_macos
# Note that because we cannot currently sign Windows binaries on Travis,
# these must be manually built and uploaded to the releases page.
- stage: release
env:
- DESC=linux manager
- stage: "Manager Release"
name: Manager Linux
addons:
apt:
packages:
- rpm
script: yarn do server_manager/electron_app/release_linux
- stage: release
- stage: "Manager Release"
os: osx
# electron-builder requires macOS >=10.13.6 for signing to work.
osx_image: xcode10.1
env:
- DESC=macos manager
name: Manager macOS
script:
- openssl aes-256-cbc -K $encrypted_61a49da75942_key -iv $encrypted_61a49da75942_iv -in macos-signing-certificate.p12.enc -out macos-signing-certificate.p12 -d
- export CSC_LINK=$(pwd)/macos-signing-certificate.p12

View file

@ -15,14 +15,15 @@
},
"scripts": {
"clean": "rm -rf src/*/node_modules/ build/ node_modules/ src/server_manager/install_scripts/do_install_script.ts",
"do": "bash ./scripts/do_action.sh"
"do": "bash ./scripts/do_action.sh",
"lint": "tslint 'src/**/*.ts' -e '**/node_modules/**'"
},
"workspaces": [
"src/*"
],
"husky": {
"hooks": {
"pre-commit": "yarn tslint --fix 'src/**/*.ts' -e '**/node_modules/**' && yarn git-clang-format && yarn pretty-quick --staged --pattern '**/*.html'"
"pre-commit": "yarn run lint && yarn git-clang-format && yarn pretty-quick --staged --pattern '**/*.html'"
}
}
}

View file

@ -64,7 +64,7 @@ function ss_arguments_for_user() {
# Runs curl on the client container.
function client_curl() {
docker exec $CLIENT_CONTAINER curl --silent --show-error "$@"
docker exec $CLIENT_CONTAINER curl --silent --show-error --connect-timeout 5 --retry 5 "$@"
}
function fail() {
@ -74,9 +74,9 @@ function fail() {
function cleanup() {
status=$?
if (($DEBUG != 0)); then
if ((DEBUG != 1)); then
docker-compose --project-name=integrationtest down
rm -r ${TMP_STATE_DIR}
rm -rf ${TMP_STATE_DIR} || echo "Failed to cleanup files at ${TMP_STATE_DIR}"
fi
return $status
}
@ -84,14 +84,14 @@ function cleanup() {
# Start a subprocess for trap
(
set -eu
(($DEBUG != 0)) && set -x
# Make the certificate
source ../scripts/make_test_certificate.sh /tmp
((DEBUG == 1)) && set -x
# Ensure proper shut down on exit if not in debug mode
trap "cleanup" EXIT
# Make the certificate
source ../scripts/make_test_certificate.sh /tmp
# Sets everything up
export SB_API_PREFIX=TestApiPrefix
SB_API_URL=https://shadowbox/${SB_API_PREFIX}
@ -105,11 +105,11 @@ function cleanup() {
# Verify that the client cannot access or even resolve the target
# Exit code 28 for "Connection timed out".
docker exec $CLIENT_CONTAINER curl --silent --connect-timeout 1 $TARGET_IP > /dev/null && \
docker exec $CLIENT_CONTAINER curl --silent --connect-timeout 5 $TARGET_IP > /dev/null && \
fail "Client should not have access to target IP" || (($? == 28))
# Exit code 6 for "Could not resolve host".
docker exec $CLIENT_CONTAINER curl --silent --connect-timeout 1 http://target > /dev/null && \
docker exec $CLIENT_CONTAINER curl --silent --connect-timeout 5 http://target > /dev/null && \
fail "Client should not have access to target host" || (($? == 6))
# Wait for shadowbox to come up.
@ -130,7 +130,7 @@ function cleanup() {
# Start Shadowsocks client and wait for it to be ready
declare -r LOCAL_SOCKS_PORT=5555
docker exec -d $CLIENT_CONTAINER \
/go/bin/go-shadowsocks2 $SS_USER_ARGUMENTS -socks :$LOCAL_SOCKS_PORT -verbose \
/go/bin/go-shadowsocks2 $SS_USER_ARGUMENTS -socks localhost:$LOCAL_SOCKS_PORT -verbose \
|| fail "Could not start shadowsocks client"
while ! docker exec $CLIENT_CONTAINER nc -z localhost $LOCAL_SOCKS_PORT; do
sleep 0.1
@ -148,7 +148,7 @@ function cleanup() {
# Verify we can't access the URL anymore after the key is deleted
client_curl --insecure -X DELETE ${SB_API_URL}/access-keys/0 > /dev/null
# Exit code 56 is "Connection reset by peer".
client_curl -x socks5h://localhost:$LOCAL_SOCKS_PORT --connect-timeout 1 $INTERNET_TARGET_URL &> /dev/null \
client_curl -x socks5h://localhost:$LOCAL_SOCKS_PORT $INTERNET_TARGET_URL &> /dev/null \
&& fail "Deleted access key is still active" || (($? == 56))
# Verify that we can change the port for new access keys