diff --git a/.circleci-matrix.yml b/.circleci-matrix.yml new file mode 100644 index 0000000..9df4b5a --- /dev/null +++ b/.circleci-matrix.yml @@ -0,0 +1,56 @@ +env: + - IMAGE=android-arm + - IMAGE=browser-asmjs + - IMAGE=linux-arm64 + - IMAGE=linux-armv5 + - IMAGE=linux-armv6 + - IMAGE=linux-armv7 + - IMAGE=linux-ppc64le + - IMAGE=linux-x64 + - IMAGE=linux-x86 + - IMAGE=manylinux-x64 + - IMAGE=manylinux-x86 + - IMAGE=windows-x64 + - IMAGE=windows-x86 +command: + - | + if [[ $TASK == "test" ]]; then + if [[ $CIRCLE_NODE_INDEX == 0 ]]; then + if [[ -e ~/docker/base.tar ]]; then docker load -i ~/docker/base.tar; fi + docker pull dockcross/base + make base.test + mkdir -p ~/docker; docker save dockcross/base > ~/docker/base.tar + touch ~/BASE_READY + else + if [[ ! -f ~/BASE_LOADED ]]; then + echo "Waiting for node0" + while true; do + sleep 5 + ssh -q node0 [[ -f ~/BASE_READY ]] + exit_code=$? + if [[ $exit_code -eq 0 ]]; then break; elif [[ $exit_code -eq 1 ]]; then echo -n "."; else exit $exit_code;fi + done + echo "" + echo "Copying base image from node0" + mkdir -p ~/docker; scp node0:~/docker/base.tar ~/docker/base.tar + docker load -i ~/docker/base.tar + docker pull dockcross/base + touch ~/BASE_LOADED + else + echo "Base image already loaded" + fi + fi + if [[ -e ~/docker/$IMAGE.tar ]]; then docker load -i ~/docker/$IMAGE.tar; fi + docker pull dockcross/$IMAGE + make $IMAGE.test + mkdir -p ~/docker; docker save dockcross/$IMAGE > ~/docker/$IMAGE.tar + fi + - | + if [[ $TASK == "deploy" ]]; then + docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS + if [[ $CIRCLE_NODE_INDEX == 0 ]] && [[ ! -f ~/BASE_PUSHED ]]; then + docker push dockcross/base + touch ~/BASE_PUSHED + fi + docker push dockcross/$IMAGE + fi diff --git a/circle.yml b/circle.yml index 0b2d266..389e051 100644 --- a/circle.yml +++ b/circle.yml @@ -12,54 +12,22 @@ dependencies: override: - docker info - - if [[ -e ~/docker/base.tar ]]; then docker load -i ~/docker/base.tar; fi - - docker pull dockcross/base - - | - for image in $(make display_images); do - if [[ -e ~/docker/$image.tar ]]; then - echo "Loading $image.tar" - docker load -i ~/docker/$image.tar; - fi - docker pull dockcross/$image - done + - curl -fsSL https://git.io/v2Ifs -o ~/bin/circleci-matrix + - chmod +x ~/bin/circleci-matrix test: override: - - make base.test - - mkdir -p ~/docker; docker save dockcross/base > ~/docker/base.tar - - make android-arm.test - - mkdir -p ~/docker; docker save dockcross/android-arm > ~/docker/android-arm.tar - - make browser-asmjs.test - - mkdir -p ~/docker; docker save dockcross/browser-asmjs > ~/docker/browser-asmjs.tar - - make linux-arm64.test - - mkdir -p ~/docker; docker save dockcross/linux-arm64 > ~/docker/linux-arm64.tar - - make linux-armv5.test - - mkdir -p ~/docker; docker save dockcross/linux-armv5 > ~/docker/linux-armv5.tar - - make linux-armv6.test - - mkdir -p ~/docker; docker save dockcross/linux-armv6 > ~/docker/linux-armv6.tar - - make linux-armv7.test - - mkdir -p ~/docker; docker save dockcross/linux-armv7 > ~/docker/linux-armv7.tar - - make linux-ppc64le.test - - mkdir -p ~/docker; docker save dockcross/linux-ppc64le > ~/docker/linux-ppc64le.tar - - make linux-x64.test - - mkdir -p ~/docker; docker save dockcross/linux-x64 > ~/docker/linux-x64.tar - - make linux-x86.test - - mkdir -p ~/docker; docker save dockcross/linux-x86 > ~/docker/linux-x86.tar - - make manylinux-x64.test - - mkdir -p ~/docker; docker save dockcross/manylinux-x64 > ~/docker/manylinux-x64.tar - - make manylinux-x86.test - - mkdir -p ~/docker; docker save dockcross/manylinux-x86 > ~/docker/manylinux-x86.tar - - make windows-x64.test: + - circleci-matrix: + parallel: true timeout: 3000 - - mkdir -p ~/docker; docker save dockcross/windows-x64 > ~/docker/windows-x64.tar - - make windows-x86.test: - timeout: 3000 - - mkdir -p ~/docker; docker save dockcross/windows-x86 > ~/docker/windows-x86.tar + environment: + TASK: test deployment: hub: branch: master commands: - - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS - - docker push dockcross/base - - for image in $(make display_images); do docker push dockcross/$image; done + - circleci-matrix: + parallel: true + environment: + TASK: deploy