diff --git a/.github/workflows/beta_artifacts.yml b/.github/workflows/beta_artifacts.yml new file mode 100644 index 0000000000..7a70dec410 --- /dev/null +++ b/.github/workflows/beta_artifacts.yml @@ -0,0 +1,82 @@ +name: Beta + +on: + push: + tags: + - V*RC* + - V*DB* +env: + BETA: 1 + artifact: 1 + +jobs: + osx_job: + runs-on: macOS-latest + env: + BOOST_ROOT: /tmp/boost + steps: + - uses: actions/checkout@v1 + - uses: chrislennon/action-aws-cli@v1.1 + - name: tag + run: echo "::set-env name=TAG::`git describe --tags $GITHUB_SHA`" + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/osx/install_deps.sh + - name: Build Artifact + run: TRAVIS_TAG=${TAG} ci/build-deploy.sh "/tmp/qt/lib/cmake/Qt5"; + - name: Deploy Artifact + run: ci/actions/deploy.sh + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-2 + + linux_job: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v1 + - uses: chrislennon/action-aws-cli@v1.1 + - name: tag + run: echo "::set-env name=TAG::`git describe --tags $GITHUB_SHA`" + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/linux/install_deps.sh + - name: Build Artifact + run: docker run -v ${GITHUB_WORKSPACE}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && TRAVIS_TAG=${TAG} ci/build-deploy.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" + - name: Deploy Artifact + run: ci/actions/deploy.sh + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-2 + - name: Deploy Docker (nanocurrency/nano-beta) + run: ci/actions/linux/deploy-docker.sh + env: + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + + windows_job: + runs-on: windows-latest + steps: + - uses: actions/checkout@v1 + - uses: chrislennon/action-aws-cli@v1.1 + - name: tag + run: | + $TRAVIS_TAG=git describe --tags $GITHUB_SHA + echo "::set-env name=TAG::$TRAVIS_TAG" + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/windows/install_deps.ps1 + - name: Build Artifact + run: ci/actions/windows/build.ps1 + env: + CSC_LINK: ${{ secrets.CSC_LINK }} + CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} + - name: Deploy Artifact + run: ci/actions/windows/deploy.ps1 + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-2 \ No newline at end of file diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml new file mode 100644 index 0000000000..9f99401931 --- /dev/null +++ b/.github/workflows/develop.yml @@ -0,0 +1,19 @@ +name: Develop + +on: + push: + branches: + - develop +jobs: + linux_job: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v1 + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/linux/install_deps.sh + - name: Deploy Docker (nanocurrency/nano-env) + run: ci/actions/linux/deploy-docker.sh + env: + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} \ No newline at end of file diff --git a/.github/workflows/live_artifacts.yml b/.github/workflows/live_artifacts.yml new file mode 100644 index 0000000000..82539d2191 --- /dev/null +++ b/.github/workflows/live_artifacts.yml @@ -0,0 +1,81 @@ +name: Live + +on: + push: + tags-ignore: + - '*RC*' + - '*DB*' +env: + artifact: 1 + +jobs: + osx_job: + runs-on: macOS-latest + env: + BOOST_ROOT: /tmp/boost + steps: + - uses: actions/checkout@v1 + - uses: chrislennon/action-aws-cli@v1.1 + - name: tag + run: echo "::set-env name=TAG::`git describe --tags $GITHUB_SHA`" + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/osx/install_deps.sh + - name: Build Artifact + run: TRAVIS_TAG=${TAG} ci/build-deploy.sh "/tmp/qt/lib/cmake/Qt5"; + - name: Deploy Artifact + run: ci/actions/deploy.sh + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-2 + + linux_job: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v1 + - uses: chrislennon/action-aws-cli@v1.1 + - name: tag + run: echo "::set-env name=TAG::`git describe --tags $GITHUB_SHA`" + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/linux/install_deps.sh + - name: Build Artifact + run: docker run -v ${GITHUB_WORKSPACE}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && TRAVIS_TAG=${TAG} ci/build-deploy.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" + - name: Deploy Artifact + run: ci/actions/deploy.sh + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-2 + - name: Deploy Docker (nanocurrency/nano) + run: ci/actions/linux/deploy-docker.sh + env: + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + + windows_job: + runs-on: windows-latest + steps: + - uses: actions/checkout@v1 + - uses: chrislennon/action-aws-cli@v1.1 + - name: tag + run: | + $TRAVIS_TAG=git describe --tags $GITHUB_SHA + echo "::set-env name=TAG::$TRAVIS_TAG" + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/windows/install_deps.ps1 + - name: Build Artifact + run: ci/actions/windows/build.ps1 + env: + CSC_LINK: ${{ secrets.CSC_LINK }} + CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} + - name: Deploy Artifact + run: ci/actions/windows/deploy.ps1 + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-2 \ No newline at end of file diff --git a/.github/workflows/release_test.yml b/.github/workflows/release_test.yml new file mode 100644 index 0000000000..0bc42c7148 --- /dev/null +++ b/.github/workflows/release_test.yml @@ -0,0 +1,56 @@ +name: Release Tests + +on: + push: + tags: '*' + +env: + RELEASE: 1 + artifact: 0 + +jobs: + osx_test: + runs-on: macOS-latest + env: + BOOST_ROOT: /tmp/boost + steps: + - uses: actions/checkout@v1 + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: TEST=1 ci/actions/osx/install_deps.sh + - name: Run Tests + run: ci/build-travis.sh "/tmp/qt/lib/cmake/Qt5"; + + gcc_test: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v1 + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/linux/install_deps.sh + - name: Run Tests + run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" + + clang_test: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v1 + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/linux/install_deps.sh + - name: Run Tests + run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:clang /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" + + windows_test: + runs-on: windows-latest + steps: + - uses: actions/checkout@v1 + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/windows/install_deps.ps1 + - name: Run Tests + run: ci/actions/windows/build.ps1 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000000..9d715c551b --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,58 @@ +name: Tests + +on: [push, pull_request] + +env: + RELEASE: 0 + artifact: 1 + +jobs: + osx_test: + runs-on: macOS-latest + env: + BOOST_ROOT: /tmp/boost + steps: + - uses: actions/checkout@v1 + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: TEST=1 ci/actions/osx/install_deps.sh + - name: Run Tests + run: ci/build-travis.sh "/tmp/qt/lib/cmake/Qt5"; + + gcc_test: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v1 + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/linux/install_deps.sh + - name: Run Tests + run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" + + clang_test: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v1 + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/linux/install_deps.sh + - name: Run Tests + run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:clang /bin/bash -c "cd /workspace && RELEASE=0 ASAN=0 TSAN=0 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" + + windows_test: + runs-on: windows-latest + steps: + - uses: actions/checkout@v1 + - name: Windows Defender + run: ci/actions/windows/disable_windows_defender.ps1 + - name: Checkout Submodules + run: git submodule update --init --recursive + - name: Fetch Deps + run: ci/actions/windows/install_deps.ps1 + - name: Run Tests + env: + artifact: 0 + run: ci/actions/windows/build.ps1 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 97b013524c..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,201 +0,0 @@ -language: cpp - -stages: - - build_base - - build_env - - master_beta_docker - - tag_test - - test - - artifacts_beta - - artifacts_live -jobs: - include: - - stage: build_base - name: "base" - if: branch=master AND type=push - script: - - if [ -n "$DOCKER_PASSWORD" ]; then ci/deploy-docker.sh; fi; - - stage: build_env - name: "clang" - if: branch=master AND type=push - script: - - if [ -n "$DOCKER_PASSWORD" ]; then ci/deploy-docker.sh; fi; - - name: "gcc" - if: branch=master AND type=push - script: - - if [ -n "$DOCKER_PASSWORD" ]; then ci/deploy-docker.sh; fi; - - stage: master_beta_docker - name: "beta docker master tag" - if: tag =~RC|DB - script: - - if [ -n "$DOCKER_PASSWORD" ]; then TRAVIS_TAG="${TRAVIS_TAG}" ci/deploy-docker.sh; fi; - - - stage: tag_test - name: "gcc" - if: tag is present - os: linux - compiler: gcc - env: - - RELEASE=1 - before_install: - - sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; - - ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:gcc; - - name: "clang" - if: tag is present - os: linux - compiler: clang - env: - - RELEASE=1 - before_install: - - sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; - - ci/build-docker-image.sh docker/ci/Dockerfile-clang nanocurrency/nano-env:clang; - - name: "osx clang" - if: tag is present - os: osx - compiler: clang - env: - - RELEASE=1 - before_install: - - brew update; - - brew cask install xquartz; - - brew upgrade cmake; - - brew install rocksdb; - - util/build_prep/fetch_boost.sh - - util/build_prep/macosx/build_qt.sh - install: - - brew install ccache; - - export PATH="/usr/local/opt/ccache/libexec:$PATH"; - - - stage: test - name: "GCC + ONE_TIME_TESTS" - os: linux - compiler: gcc - dist: trusty - sudo: required - env: - - ONE_TIME_TESTS=true - addons: - apt: - packages: - - doxygen - before_install: - - sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; - - ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:gcc; - - name: "clang" - os: linux - compiler: clang - dist: trusty - sudo: required - before_install: - - sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; - - ci/build-docker-image.sh docker/ci/Dockerfile-clang nanocurrency/nano-env:clang; - - name: "osx" - os: osx - compiler: clang - before_install: - - brew update; - - brew cask install xquartz; - - brew upgrade cmake; - - brew install rocksdb; - - util/build_prep/fetch_boost.sh - - util/build_prep/macosx/build_qt.sh - install: - - brew install ccache; - - export PATH="/usr/local/opt/ccache/libexec:$PATH"; - - - stage: artifacts_live - name: "live docker" - if: tag IS present AND !tag=~RC|DB - script: - if [ -n "$DOCKER_PASSWORD" ]; then TRAVIS_TAG="${TRAVIS_TAG}" ci/deploy-docker.sh; fi; - - name: "live linux" - os: linux - compiler: gcc - dist: trusty - if: tag IS present AND !tag=~RC|DB - before_install: - - sudo apt-get update -y && sudo apt-get install -y python-pip - - pip install --user awscli - - aws --version - - sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; - - ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:gcc; - script: - - docker run -v $TRAVIS_BUILD_DIR:/workspace -v $HOME/.ccache:/ccache nanocurrency/nano-env:$TRAVIS_COMPILER /bin/bash -c "apt install ccache; cd /workspace && TRAVIS_TAG=${TRAVIS_TAG} CCACHE_DIR=/ccache ci/build-deploy.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}"; - - ci/deploy-travis.sh; - - name: "live osx" - os: osx - compiler: clang - before_install: - - brew update; - - brew cask install xquartz; - - brew upgrade cmake; - - util/build_prep/fetch_rocksdb.sh - - util/build_prep/fetch_boost.sh - - util/build_prep/macosx/build_qt.sh - install: - - pip install --user awscli - - brew install ccache; - - export PATH="$HOME/Library/Python/2.7/bin:/usr/local/opt/ccache/libexec:$PATH"; - - aws --version - script: - - ci/build-deploy.sh "/tmp/qt/lib/cmake/Qt5"; - - if [[ -n "$TRAVIS_TAG" ]]; then if [[ ! "${TRAVIS_TAG-0}" =~ ("RC"|"DB") ]]; then ci/deploy-travis.sh; fi; fi; - - - stage: artifacts_beta - name: "beta docker" - if: tag =~RC|DB - script: - - if [ -n "$DOCKER_PASSWORD" ]; then TRAVIS_TAG="${TRAVIS_TAG}" ci/deploy-docker.sh; fi; - - name: "beta linux" - os: linux - env: - - BETA=1 - compiler: gcc - dist: trusty - if: tag =~RC|DB - before_install: - - sudo apt-get update -y && sudo apt-get install -y python-pip - - pip install --user awscli - - aws --version - - sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; - - ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:gcc; - script: - - docker run -v $TRAVIS_BUILD_DIR:/workspace -v $HOME/.ccache:/ccache nanocurrency/nano-env:$TRAVIS_COMPILER /bin/bash -c "apt install ccache; cd /workspace && TRAVIS_TAG=${TRAVIS_TAG} BETA=1 CCACHE_DIR=/ccache ci/build-deploy.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - ci/deploy-travis.sh; - - name: "beta osx" - os: osx - compiler: clang - env: - - BETA=1 - if: tag =~RC|DB - before_install: - - brew update; - - brew cask install xquartz; - - brew upgrade cmake; - - util/build_prep/fetch_rocksdb.sh - - util/build_prep/fetch_boost.sh - - util/build_prep/macosx/build_qt.sh - install: - - pip install --user awscli - - brew install ccache; - - export PATH="$HOME/Library/Python/2.7/bin:/usr/local/opt/ccache/libexec:$PATH"; - - aws --version - script: - - ci/build-deploy.sh "/tmp/qt/lib/cmake/Qt5"; - - ci/deploy-travis.sh; -cache: - - ccache: true - - directories: - - $HOME/.local - - $HOME/Library/Caches/Homebrew - - $TRAVIS_BUILD_DIR/load-tester/target -script: - - if [ -n "$ONE_TIME_TESTS" ]; then ci/check-commit-format.sh; fi - - if [ -n "$ONE_TIME_TESTS" ]; then doxygen doxygen.config; fi # TODO also deploy the built HTML - - if [ "$TRAVIS_OS_NAME" = "osx" ]; then RELEASE=${RELEASE} ci/build-travis.sh "/tmp/qt/lib/cmake/Qt5"; fi - - if [ "$TRAVIS_OS_NAME" = "linux" ]; then docker run -v $TRAVIS_BUILD_DIR:/workspace -v $HOME/.ccache:/ccache nanocurrency/nano-env:$TRAVIS_COMPILER /bin/bash -c "apt install ccache; cd /workspace && RELEASE=${RELEASE} ASAN=${ASAN} TSAN=${TSAN} CCACHE_DIR=/ccache ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}"; fi -env: - global: - - secure: "k8kmpD+xRS57ukdvlvaXT0WN4H0rr/aHSjV+l5IUUFpKx5N+DEsb+7ElIepKzqQrGG6qE71cFwDyn6rDwW/Objb9aiEITnvJBzk1XrOVgbc5AnlqDm8LKvqToD/VnQiojyXhBQe2wa//nEZ3PC9dv7hE5zb/K/U5z+LaE9T1cPPk1jHQMCUAFT7QGCK0YeX/gAZqPbLZdHHQChEi+Gu/XY0gc5Bl8Idbp8W7Aky9Ps06lKXPORkE1G2xQfJFrNPB3CKjxev/eoXGBJmNYzxkJlUHmyenjwgdDh9TWiOK2uKH1K6olLIx/qFuIgFRVJFv0QFzCjqqjOJJF1EN9i1M21Lm4wi1iJxYShAP86ZKkC/WmtRn1xNTEMHZJeZ3TXX+B3ybLEWTamHS1Ia8HOif18nrQE3O0aRC/NNfH1kewX+94UNxmSfHtL5Waa41shxeG5waemyQg+HR5zCEtrb5l1btgbfGrR8BMbHYLLe4ywJqMx3n8Iy6ZzC6Xx8+X1zTZZ3zDYPBHUalA+ZoYu2rrFG2+SARP0W/VKqCIKaB+lQKYpbv7ojXGrrDJe7MA/raTLL2pTfSkcx0qxJvcsbPLGI1MdG3mD7M8HncrZbw+sKI1LZ04gyWt3til6d3vSlbIkd6kCxxZh69nd1/KJy8rYrMYjqxxNSTctkGyVb2DtY=" - - RELEASE=0 - - AWS_BUCKET=repo.nano.org diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 61ce811ad3..0000000000 --- a/appveyor.yml +++ /dev/null @@ -1,53 +0,0 @@ -version: 1.0.{build} -pull_requests: - do_not_increment_build_number: true -skip_branch_with_pr: true -max_jobs: 2 -image: Visual Studio 2017 -configuration: Release -platform: x64 -environment: - VCPKG_DIR: C:\Tools\vcpkg - matrix: - - network: nano_live_network - configuration: Release - - network: nano_beta_network - configuration: RelWithDebInfo -clone_folder: C:\projects\myproject -cache: $VCPKG_DIR%\installed\ -install: - - git submodule update --init --recursive - - echo set (VCPKG_LIBRARY_LINKAGE static) > temp.txt - - type %VCPKG_DIR%\ports\rocksdb\portfile.cmake >> temp.txt - - type temp.txt > %VCPKG_DIR%\ports\rocksdb\portfile.cmake - - del temp.txt - - echo set(VCPKG_BUILD_TYPE release) >> C:\Tools\vcpkg\triplets\x64-windows.cmake - - vcpkg install rocksdb:%PLATFORM%-windows - - IF NOT DEFINED APPVEYOR_REPO_TAG_NAME (set APPVEYOR_REPO_TAG_NAME=NOT_ARTIFACT) - - set TRAVIS_TAG=%APPVEYOR_REPO_TAG_NAME% - - cmake -DNANO_GUI=ON -DNANO_POW_SERVER=ON -DCI_BUILD=ON -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DACTIVE_NETWORK=%NETWORK% -DQt5_DIR="C:\Qt\5.9\msvc2017_64\lib\cmake\Qt5" -DNANO_SIMD_OPTIMIZATIONS=TRUE -DBoost_COMPILER="-vc141" -DBOOST_ROOT="C:/Libraries/boost_1_67_0" -DBOOST_LIBRARYDIR="C:/Libraries/boost_1_67_0/lib64-msvc-14.1" -G "Visual Studio 15 2017 Win64" -DNANO_ROCKSDB=ON -DROCKSDB_LIBRARIES="%VCPKG_DIR%\installed\x64-windows\lib\rocksdb.lib" -DROCKSDB_INCLUDE_DIRS="%VCPKG_DIR%\installed\x64_windows\include" -DZLIB_LIBRARY=%VCPKG_DIR%\installed\x64-windows\lib\zlib.lib -DZLIB_INCLUDE_DIR=%VCPKG_DIR%\installed\x64-windows\include -DIPHLPAPI_LIBRARY="C:/Program Files (x86)/Windows Kits/10/Lib/10.0.14393.0/um/x64/iphlpapi.lib" -DWINSOCK2_LIBRARY="C:/Program Files (x86)/Windows Kits/10/Lib/10.0.14393.0/um/x64/WS2_32.lib" . - - - ps: Invoke-WebRequest -Uri https://aka.ms/vs/15/release/vc_redist.x64.exe -OutFile .\vc_redist.x64.exe -build: - project: INSTALL.vcxproj - parallel: true - verbosity: minimal -after_build: -- ps: | - if (Test-Path env:CSC_LINK) { - $path = Join-Path -Path "$env:TMP" -ChildPath csc.p12 - [IO.File]::WriteAllBytes($path, [Convert]::FromBase64String($env:CSC_LINK)) - - $args = -split 'sign /a /ph /tr http://timestamp.digicert.com /td sha256 /fd sha256' - $args += @('/f', $path, '/p', $env:CSC_KEY_PASSWORD, "$env:APPVEYOR_BUILD_FOLDER\$env:CONFIGURATION\*.exe") - . 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe' $args - } -- cmd: >- - cpack -C %CONFIGURATION% --verbose --config ./CPackConfig.cmake - - cpack -G ZIP -C %CONFIGURATION% --verbose --config ./CPackConfig.cmake -artifacts: -- path: nano*.zip - name: nano_release_%network% -- path: nano-node-*.exe - name: nano-node-%network% diff --git a/ci/actions/deploy.sh b/ci/actions/deploy.sh new file mode 100755 index 0000000000..e203ed034b --- /dev/null +++ b/ci/actions/deploy.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -o errexit +set -o nounset +set -o xtrace +OS=`uname` + +if [[ "${BETA-0}" -eq 1 ]]; then + BUILD="beta" +else + BUILD="live" +fi + +if [[ "$OS" == 'Linux' ]]; then + aws s3 cp $GITHUB_WORKSPACE/build/nano-node-*-Linux.tar.bz2 s3://repo.nano.org/$BUILD/binaries/nano-node-$TAG-Linux.tar.bz2 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers +else + aws s3 cp $GITHUB_WORKSPACE/build/nano-node-*-Darwin.dmg s3://repo.nano.org/$BUILD/binaries/nano-node-$TAG-Darwin.dmg --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers +fi diff --git a/ci/actions/linux/deploy-docker.sh b/ci/actions/linux/deploy-docker.sh new file mode 100755 index 0000000000..734cb212e3 --- /dev/null +++ b/ci/actions/linux/deploy-docker.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +set -e + +if [ -n "$DOCKER_PASSWORD" ]; then + echo "$DOCKER_PASSWORD" | docker login -u nanoreleaseteam --password-stdin + + scripts="$PWD/ci" + TRAVIS_BRANCH=`git branch| cut -f2 -d' '` + if [[ "$GITHUB_WORKFLOW" = "Develop" ]]; then + "$scripts"/custom-timeout.sh 30 docker push "nanocurrency/nano-env:base" + "$scripts"/custom-timeout.sh 30 docker push "nanocurrency/nano-env:gcc" + "$scripts"/custom-timeout.sh 30 docker push "nanocurrency/nano-env:clang" + echo "Deployed nano-env" + exit 0 + else + tags=() + if [ -n "$TRAVIS_TAG" ]; then + tags+=("$TRAVIS_TAG" latest latest-including-rc) + elif [ -n "$TRAVIS_BRANCH" ]; then + TRAVIS_TAG=$TRAVIS_BRANCH + tags+=("$TRAVIS_BRANCH") + fi + if [[ "$GITHUB_WORKFLOW" = "Live" ]]; then + echo "Live" + network_tag_suffix='' + network="live" + elif [[ "$GITHUB_WORKFLOW" = "Beta" ]]; then + echo "Beta" + network_tag_suffix="-beta" + network="beta" + else + echo "Nothing to deploy" + exit 1 + fi + docker_image_name="nanocurrency/nano${network_tag_suffix}" + "$scripts"/custom-timeout.sh 30 docker build --build-arg NETWORK="$network" --build-arg CI_BUILD=true --build-arg TRAVIS_TAG="$TRAVIS_TAG" -f docker/node/Dockerfile -t "$docker_image_name" . + for tag in "${tags[@]}"; do + # Sanitize docker tag + # https://docs.docker.com/engine/reference/commandline/tag/ + tag="$(printf '%s' "$tag" | tr -c '[a-z][A-Z][0-9]_.-' -)" + if [ "$tag" != "latest" ]; then + docker tag "$docker_image_name" "${docker_image_name}:$tag" + fi + "$scripts"/custom-timeout.sh 30 docker push "${docker_image_name}:$tag" + done + fi + echo "$docker_image_name with tags ${tags[*]} deployed" +else + echo "\$DOCKER_PASSWORD environment variable required" + exit 1 +fi \ No newline at end of file diff --git a/ci/actions/linux/install_deps.sh b/ci/actions/linux/install_deps.sh new file mode 100755 index 0000000000..45c6f55496 --- /dev/null +++ b/ci/actions/linux/install_deps.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; + +ci/build-docker-image.sh docker/ci/Dockerfile-base nanocurrency/nano-env:base +ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:gcc +ci/build-docker-image.sh docker/ci/Dockerfile-clang nanocurrency/nano-env:clang diff --git a/ci/actions/osx/install_deps.sh b/ci/actions/osx/install_deps.sh new file mode 100755 index 0000000000..dae3c43498 --- /dev/null +++ b/ci/actions/osx/install_deps.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +brew update +brew install coreutils +brew cask install xquartz +if [[ ${TEST-0} -eq 1 ]]; then + brew install rocksdb; +else + util/build_prep/fetch_rocksdb.sh +fi +util/build_prep/bootstrap_boost.sh -m -c -B 1.70 && \ +util/build_prep/macosx/build_qt.sh diff --git a/ci/actions/windows/build.bat b/ci/actions/windows/build.bat new file mode 100644 index 0000000000..9cd4e8a3ef --- /dev/null +++ b/ci/actions/windows/build.bat @@ -0,0 +1,29 @@ +@echo off +set exit_code=0 + +goto %RUN% + +:test +cmake --build . ^ + --target core_test ^ + --config %BUILD_TYPE% ^ + -- /m:2 +set exit_code=%errorlevel% +if %exit_code% neq 0 goto exit +cmake --build . ^ + --target rpc_test ^ + --config %BUILD_TYPE% ^ + -- /m:2 +set exit_code=%errorlevel% +goto exit + +:artifact +cmake --build . ^ + --target INSTALL ^ + --config %BUILD_TYPE% ^ + -- /m:2 +set exit_code=%errorlevel% +goto exit + +:exit +exit /B %exit_code% \ No newline at end of file diff --git a/ci/actions/windows/build.ps1 b/ci/actions/windows/build.ps1 new file mode 100644 index 0000000000..c532c730f5 --- /dev/null +++ b/ci/actions/windows/build.ps1 @@ -0,0 +1,57 @@ +# Stop immediately if any error happens +$ErrorActionPreference = "Stop" + +if (${env:artifact} -eq 1) { + if ( ${env:BETA} -eq 1 ) { + $env:NETWORK_CFG = "beta" + $env:BUILD_TYPE = "RelWithDebInfo" + } else { + $env:NETWORK_CFG = "live" + $env:BUILD_TYPE = "Release" + } + $env:ROCKS_LIB = '-DROCKSDB_LIBRARIES="c:\vcpkg\installed\x64-windows-static\lib\rocksdb.lib"' + $env:NANO_TEST = "-DNANO_TEST=OFF" + $env:TRAVIS_TAG = ${env:TAG} + + $env:CI = "-DCI_BUILD=ON" + $env:RUN = "artifact" +} else { + if ( ${env:RELEASE} -eq 1 ) { + $env:BUILD_TYPE = "RelWithDebInfo" + $env:ROCKS_LIB = '-DROCKSDB_LIBRARIES="c:\vcpkg\installed\x64-windows-static\lib\rocksdb.lib"' + } else { + $env:BUILD_TYPE = "Debug" + $env:ROCKS_LIB = '-DROCKSDB_LIBRARIES="c:\vcpkg\installed\x64-windows-static\debug\lib\rocksdbd.lib"' + } + $env:NETWORK_CFG = "test" + $env:NANO_TEST = "-DNANO_TEST=ON" + $env:CI = "-DCI_BUILD=OFF" + $env:RUN = "test" +} + +mkdir build +Push-Location build + +& ..\ci\actions\windows\configure.bat +if (${LastExitCode} -ne 0) { + throw "Failed to configure" +} + +if (${env:RUN} -eq "artifact") { + $p = Get-Location + Invoke-WebRequest -Uri https://aka.ms/vs/15/release/vc_redist.x64.exe -OutFile "$p\vc_redist.x64.exe" +} + +& ..\ci\actions\windows\build.bat +if (${LastExitCode} -ne 0) { + throw "Failed to build ${env:RUN}" +} +$env:cmake_path = Split-Path -Path(get-command cmake.exe).Path +. "$PSScriptRoot\signing.ps1" + +& ..\ci\actions\windows\run.bat +if (${LastExitCode} -ne 0) { + throw "Failed to Pass Test ${env:RUN}" +} + +Pop-Location \ No newline at end of file diff --git a/ci/actions/windows/configure.bat b/ci/actions/windows/configure.bat new file mode 100644 index 0000000000..9dd6d80377 --- /dev/null +++ b/ci/actions/windows/configure.bat @@ -0,0 +1,28 @@ +@echo off +set exit_code=0 + +echo "BUILD TYPE %BUILD_TYPE%" +echo "RUN %RUN%" + +cmake .. ^ + -Ax64 ^ + %NANO_TEST% ^ + %CI% ^ + -DNANO_ROCKSDB=ON ^ + %ROCKS_LIB% ^ + -DROCKSDB_INCLUDE_DIRS="c:\vcpkg\installed\x64-windows-static\include" ^ + -DZLIB_LIBRARY_RELEASE="c:\vcpkg\installed\x64-windows-static\lib\zlib.lib" ^ + -DZLIB_LIBRARY_DEBUG="c:\vcpkg\installed\x64-windows-static\debug\lib\zlibd.lib" ^ + -DZLIB_INCLUDE_DIR="c:\vcpkg\installed\x64-windows-static\include" ^ + -DQt5_DIR="c:\qt\5.13.1\msvc2017_64\lib\cmake\Qt5" ^ + -DNANO_GUI=ON ^ + -DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^ + -DACTIVE_NETWORK=nano_%NETWORK_CFG%_network ^ + -DNANO_SIMD_OPTIMIZATIONS=TRUE ^ + -Dgtest_force_shared_crt=on + +set exit_code=%errorlevel% +if %exit_code% neq 0 goto exit + +:exit +exit /B %exit_code% \ No newline at end of file diff --git a/ci/actions/windows/deploy.ps1 b/ci/actions/windows/deploy.ps1 new file mode 100644 index 0000000000..948df01f4e --- /dev/null +++ b/ci/actions/windows/deploy.ps1 @@ -0,0 +1,13 @@ +# Stop immediately if any error happens +$ErrorActionPreference = "Stop" + +if ( ${env:BETA} -eq 1 ) { + $network_cfg="beta" +} else { + $network_cfg="live" +} + +$exe=Resolve-Path -Path $env:GITHUB_WORKSPACE\build\nano-node-*-win64.exe +$zip=Resolve-Path -Path $env:GITHUB_WORKSPACE\build\nano-node-*-win64.zip +aws s3 cp $exe s3://repo.nano.org/$network_cfg/binaries/nano-node-$env:TAG-win64.exe --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers +aws s3 cp "$zip" s3://repo.nano.org/$network_cfg/binaries/nano-node-$env:TAG-win64.zip --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers \ No newline at end of file diff --git a/ci/actions/windows/disable_windows_defender.ps1 b/ci/actions/windows/disable_windows_defender.ps1 new file mode 100644 index 0000000000..3184a2634a --- /dev/null +++ b/ci/actions/windows/disable_windows_defender.ps1 @@ -0,0 +1,3 @@ +Set-MpPreference -DisableArchiveScanning $true +Set-MpPreference -DisableRealtimeMonitoring $true +Set-MpPreference -DisableBehaviorMonitoring $true \ No newline at end of file diff --git a/ci/actions/windows/install_deps.ps1 b/ci/actions/windows/install_deps.ps1 new file mode 100644 index 0000000000..3bf40e6ee7 --- /dev/null +++ b/ci/actions/windows/install_deps.ps1 @@ -0,0 +1,68 @@ +function Get-RedirectedUri { + <# + .SYNOPSIS + Gets the real download URL from the redirection. + .DESCRIPTION + Used to get the real URL for downloading a file, this will not work if downloading the file directly. + .EXAMPLE + Get-RedirectedURL -URL "https://download.mozilla.org/?product=firefox-latest&os=win&lang=en-US" + .PARAMETER URL + URL for the redirected URL to be un-obfuscated + .NOTES + Code from: Redone per issue #2896 in core https://github.com/PowerShell/PowerShell/issues/2896 + #> + + [CmdletBinding()] + param ( + [Parameter(Mandatory = $true)] + [string]$Uri + ) + process { + do { + try { + $request = Invoke-WebRequest -Method Head -Uri $Uri + if ($null -ne $request.BaseResponse.ResponseUri) { + # This is for Powershell 5 + $redirectUri = $request.BaseResponse.ResponseUri.AbsoluteUri + } + elseif ($null -ne $request.BaseResponse.RequestMessage.RequestUri) { + # This is for Powershell core + $redirectUri = $request.BaseResponse.RequestMessage.RequestUri.AbsoluteUri + } + + $retry = $false + } + catch { + if (($_.Exception.GetType() -match "HttpResponseException") -and ($_.Exception -match "302")) { + $Uri = $_.Exception.Response.Headers.Location.AbsoluteUri + $retry = $true + } + else { + throw $_ + } + } + } while ($retry) + + $redirectUri + } +} + +$qt5_root = "c:\qt" +$rocksdb_url = Get-RedirectedUri "https://repo.nano.org/artifacts/rocksdb-msvc14.1-latest.7z" +$qt5base_url = Get-RedirectedUri "https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5131/qt.qt5.5131.win64_msvc2017_64/5.13.1-0-201909031231qtbase-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64.7z" +$qt5winextra_url = Get-RedirectedUri "https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5131/qt.qt5.5131.win64_msvc2017_64/5.13.1-0-201909031231qtwinextras-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64.7z" +$rocksdb_artifact = "${env:TMP}\rocksdb.7z" +$qt5base_artifact = "${env:TMP}\qt5base.7z" +$qt5winextra_artifact = "${env:TMP}\qt5winextra.7z" + +(New-Object System.Net.WebClient).DownloadFile($qt5base_url, $qt5base_artifact) +(New-Object System.Net.WebClient).DownloadFile($qt5winextra_url, $qt5winextra_artifact) +mkdir $qt5_root +Push-Location $qt5_root +7z x "${env:TMP}\qt5*.7z" +Pop-Location + +Push-Location ${env:VCPKG_INSTALLATION_ROOT} +(New-Object System.Net.WebClient).DownloadFile($rocksdb_url, $rocksdb_artifact) +7z x $rocksdb_artifact +Pop-Location \ No newline at end of file diff --git a/ci/actions/windows/run.bat b/ci/actions/windows/run.bat new file mode 100644 index 0000000000..97e2c16c10 --- /dev/null +++ b/ci/actions/windows/run.bat @@ -0,0 +1,26 @@ +@echo off +set exit_code=0 +set count=0 + +goto %RUN% + +:test +if %count% equ 10 goto rpc_test +call %BUILD_TYPE%\core_test.exe +set core_code=%errorlevel% +set /a count=count+1 +if %core_code% neq 0 goto test + +:rpc_test +call %BUILD_TYPE%\rpc_test.exe +set rpc_code=%errorlevel% +echo Core Test %core_code% +echo RPC Test %rpc_code% + +exit /B %core_code% + +:artifact +echo "Packaging NSIS" +call "%cmake_path%\cpack.exe" -C %BUILD_TYPE% +echo "Packaging ZIP" +call "%cmake_path%\cpack.exe" -G ZIP -C %BUILD_TYPE% diff --git a/ci/actions/windows/signing.ps1 b/ci/actions/windows/signing.ps1 new file mode 100644 index 0000000000..4cbe63f772 --- /dev/null +++ b/ci/actions/windows/signing.ps1 @@ -0,0 +1,7 @@ +if (Test-Path env:CSC_LINK) { + $path = Join-Path -Path "$env:TMP" -ChildPath csc.p12 + [IO.File]::WriteAllBytes($path, [Convert]::FromBase64String($env:CSC_LINK)) + $args = -split 'sign /a /ph /tr http://timestamp.digicert.com /td sha256 /fd sha256' + $args += @('/f', $path, '/p', $env:CSC_KEY_PASSWORD, "$env:BUILD_TYPE\*.exe") + . "C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" $args +} \ No newline at end of file diff --git a/ci/build-deploy.sh b/ci/build-deploy.sh index bf396f6535..6f5bb2e580 100755 --- a/ci/build-deploy.sh +++ b/ci/build-deploy.sh @@ -31,7 +31,6 @@ cmake \ -DCMAKE_VERBOSE_MAKEFILE=ON \ -DBOOST_ROOT=/tmp/boost/ \ -DQt5_DIR=${qt_dir} \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCI_BUILD=true \ .. diff --git a/ci/build-travis.sh b/ci/build-travis.sh index dc49275863..6698cc1e8a 100755 --- a/ci/build-travis.sh +++ b/ci/build-travis.sh @@ -61,7 +61,6 @@ cmake \ -DCMAKE_VERBOSE_MAKEFILE=ON \ -DBOOST_ROOT=/tmp/boost/ \ -DQt5_DIR=${qt_dir} \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ ${SANITIZERS} \ ..