diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index 13d55816a1..07e917bda3 100644 --- a/.github/workflows/ci-tests.yml +++ b/.github/workflows/ci-tests.yml @@ -6,6 +6,7 @@ on: push: branches: - master + - develop pull_request: branches: - develop @@ -81,25 +82,40 @@ jobs: chmod +w tmp/parallel_runtime_test.log - name: Run Functional Tests - id: run-tests + id: functional-tests env: TEST_RETRY_COUNT: 3 run: | docker-compose exec -e TEST_RETRY_COUNT=$TEST_RETRY_COUNT -T -e PATTERN='models mailers integration workers lib contract' api test/run-tests.sh - - name: After functional Tests - id: after-functional-tests + - name: After Functional Test env: - GIT_SHA: ${{ github.sha }} - GIT_COMMITED_AT: ${{ github.event.head_commit.timestamp }} - run: | - docker-compose exec -T -e GIT_COMMIT_SHA=${{ github.sha }} \ - -e GIT_COMMITTED_AT=${{ github.event.head_commit.timestamp }} \ + GITHUB_PULL_REQUEST: ${{ github.event_name}} + GIT_BRANCH: ${{ github.head_ref || github.ref_name }} + GITHUB_REPO: ${{ github.repository }} + GITHUB_TEST_RESULT: ${{ steps.functional-tests.outcome}} + GITHUB_BUILD_NUMBER: ${{ github.run_number }} + GITHUB_COMMIT_SHA: ${{ github.sha }} + GITHUB_JOB_NAME: ${{ github.job }} + CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + ROLE_TO_ASSUME: ${{ secrets.AWS_ROLE_TO_ASSUME }} + AWS_REGION: eu-west-1 + run: | + docker-compose exec -T -e GIT_BRANCH=$GIT_BRANCH \ + -e GITHUB_PULL_REQUEST=$GITHUB_PULL_REQUEST \ + -e GITHUB_TEST_RESULT=$GITHUB_TEST_RESULT \ + -e GITHUB_REPO=$GITHUB_REPO \ + -e GITHUB_BUILD_NUMBER=$GITHUB_BUILD_NUMBER \ + -e GIT_COMMIT_SHA=$GITHUB_COMMIT_SHA \ -e CC_TEST_REPORTER_ID=$CC_TEST_REPORTER_ID \ - -e PATH=$PATH \ - -e JOB_NAME=functional-tests \ - -e AWS_CONFIG_FILE=/app/credentials \ - api test/test-coverage.sh + -e GITHUB_JOB_NAME=$GITHUB_JOB_NAME \ + -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \ + -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \ + -e ROLE_TO_ASSUME=$AWS_ROLE_TO_ASSUME \ + -e AWS_REGION=$AWS_REGION \ + -e AWS_CONFIG_FILE=/app/credentials api test/test-coverage.sh unit-tests: @@ -169,25 +185,40 @@ jobs: chmod +w tmp/parallel_runtime_test.log - name: Run Unit Tests - id: run-tests + id: unit-tests env: TEST_RETRY_COUNT: 3 run: | docker-compose exec -e TEST_RETRY_COUNT=$TEST_RETRY_COUNT -T -e PATTERN='controllers contract' api test/run-tests.sh - - name: After unit Tests - id: unit-tests + - name: After Unit Test env: - GIT_SHA: ${{ github.sha }} - GIT_COMMITED_AT: ${{ github.event.head_commit.timestamp }} - run: | - docker-compose exec -T -e GIT_COMMIT_SHA=${{ github.sha }} \ - -e GIT_COMMITTED_AT=${{ github.event.head_commit.timestamp }} \ + GITHUB_PULL_REQUEST: ${{ github.event_name}} + GIT_BRANCH: ${{ github.head_ref || github.ref_name }} + GITHUB_REPO: ${{ github.repository }} + GITHUB_TEST_RESULT: ${{ steps.unit-tests.outcome}} + GITHUB_BUILD_NUMBER: ${{ github.run_number }} + GITHUB_COMMIT_SHA: ${{ github.sha }} + GITHUB_JOB_NAME: ${{ github.job }} + CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + ROLE_TO_ASSUME: ${{ secrets.AWS_ROLE_TO_ASSUME }} + AWS_REGION: eu-west-1 + run: | + docker-compose exec -T -e GIT_BRANCH=$GIT_BRANCH \ + -e GITHUB_PULL_REQUEST=$GITHUB_PULL_REQUEST \ + -e GITHUB_TEST_RESULT=$GITHUB_TEST_RESULT \ + -e GITHUB_REPO=$GITHUB_REPO \ + -e GITHUB_BUILD_NUMBER=$GITHUB_BUILD_NUMBER \ + -e GIT_COMMIT_SHA=$GITHUB_COMMIT_SHA \ -e CC_TEST_REPORTER_ID=$CC_TEST_REPORTER_ID \ - -e PATH=$PATH \ - -e JOB_NAME=unit-tests \ - -e AWS_CONFIG_FILE=/app/credentials \ - api test/test-coverage.sh + -e GITHUB_JOB_NAME=$GITHUB_JOB_NAME \ + -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \ + -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \ + -e ROLE_TO_ASSUME=$AWS_ROLE_TO_ASSUME \ + -e AWS_REGION=$AWS_REGION \ + -e AWS_CONFIG_FILE=/app/credentials api test/test-coverage.sh contract-tests: @@ -265,17 +296,32 @@ jobs: TEST_RETRY_COUNT: 3 run: | docker-compose exec -e TEST_RETRY_COUNT=$TEST_RETRY_COUNT -T -e PATTERN='controllers models mailers integration workers lib' api test/run-tests.sh - - - name: After contract Tests - id: after-tests + + - name: After Contract Test env: - GIT_SHA: ${{ github.sha }} - GIT_COMMITED_AT: ${{ github.event.head_commit.timestamp }} - run: | - docker-compose exec -T -e GIT_COMMIT_SHA=${{ github.sha }} \ - -e GIT_COMMITTED_AT=${{ github.event.head_commit.timestamp }} \ + GITHUB_PULL_REQUEST: ${{ github.event_name}} + GIT_BRANCH: ${{ github.head_ref || github.ref_name }} + GITHUB_REPO: ${{ github.repository }} + GITHUB_TEST_RESULT: ${{ steps.run-tests.outcome}} + GITHUB_BUILD_NUMBER: ${{ github.run_number }} + GITHUB_COMMIT_SHA: ${{ github.sha }} + GITHUB_JOB_NAME: ${{ github.job }} + CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + ROLE_TO_ASSUME: ${{ secrets.AWS_ROLE_TO_ASSUME }} + AWS_REGION: eu-west-1 + run: | + docker-compose exec -T -e GIT_BRANCH=$GIT_BRANCH \ + -e GITHUB_PULL_REQUEST=$GITHUB_PULL_REQUEST \ + -e GITHUB_TEST_RESULT=$GITHUB_TEST_RESULT \ + -e GITHUB_REPO=$GITHUB_REPO \ + -e GITHUB_BUILD_NUMBER=$GITHUB_BUILD_NUMBER \ + -e GIT_COMMIT_SHA=$GITHUB_COMMIT_SHA \ -e CC_TEST_REPORTER_ID=$CC_TEST_REPORTER_ID \ - -e PATH=$PATH \ - -e JOB_NAME=contract-tests \ - -e AWS_CONFIG_FILE=/app/credentials \ - api test/test-coverage.sh + -e GITHUB_JOB_NAME=$GITHUB_JOB_NAME \ + -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \ + -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \ + -e ROLE_TO_ASSUME=$AWS_ROLE_TO_ASSUME \ + -e AWS_REGION=$AWS_REGION \ + -e AWS_CONFIG_FILE=/app/credentials api test/test-coverage.sh \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 477a336451..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,63 +0,0 @@ -language: minimal -dist: jammy -before_install: -- export RECORD_RUNTIME=true -- export LC_ALL=C.UTF-8 -- export LANG=C.UTF-8 -- export LANGUAGE=C.UTF-8 -- export PATH=/root/.local/bin:$PATH -- rm -rf tmp/cache tmp/cache1 tmp/cache2 tmp/cache3 tmp/cache4 tmp/cache5 && mkdir -p tmp/cache tmp/cache1 - tmp/cache2 tmp/cache3 tmp/cache4 tmp/cache5 -before_script: -- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin -- echo '[default]' > credentials && echo "aws_access_key_id = $AWS_ACCESS_KEY_ID" >> credentials && echo "aws_secret_access_key = $AWS_SECRET_ACCESS_KEY" >> credentials -- cp config/config.yml.example config/config.yml -- cp config/database.yml.example config/database.yml -- cp config/sidekiq.yml.example config/sidekiq.yml -- cp config/credentials.json.example config/credentials.json -- cp config/sidekiq-test.yml.example config/sidekiq-test.yml -- docker-compose build -- docker-compose run api bash -c 'touch /tmp/no-syntax-errors && find app lib config -name *.rb -exec bash -c "ruby -c {} >/dev/null || rm /tmp/no-syntax-errors" ";" && ls /tmp/no-syntax-errors' -- docker-compose -f docker-compose.yml -f docker-test.yml up -d -- tail -f log/test.log & -- until curl --silent -I -f --fail http://localhost:3000 ; do printf .; sleep 1; done -- docker-compose exec api test/setup-parallel-env.sh -- docker-compose exec api bundle exec rake assets:precompile -- sleep 10 -- touch tmp/parallel_runtime_test.log -- chmod +w tmp/parallel_runtime_test.log -after_script: -- docker-compose exec - -e TRAVIS_BRANCH=$TRAVIS_BRANCH - -e TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - -e TRAVIS_TEST_RESULT=$TRAVIS_TEST_RESULT - -e TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG - -e TRAVIS_BUILD_NUMBER=$TRAVIS_BUILD_NUMBER - -e GIT_COMMIT_SHA=$GIT_COMMIT_SHA - -e GIT_COMMITTED_AT=$GIT_COMMITTED_AT - -e CC_TEST_REPORTER_ID=$CC_TEST_REPORTER_ID - -e PATH=$PATH - -e TRAVIS_JOB_NAME=$TRAVIS_JOB_NAME - -e AWS_CONFIG_FILE=/app/credentials - api test/test-coverage.sh -jobs: - include: - - stage: tests - name: functional-tests - script: docker-compose exec -e TEST_RETRY_COUNT=3 -e PATTERN='models mailers integration workers lib contract' api test/run-tests.sh - - stage: tests - name: unit-tests - script: docker-compose exec -e TEST_RETRY_COUNT=3 -e PATTERN='controllers contract' api test/run-tests.sh - - stage: tests - name: contract-tests - script: docker-compose exec -e TEST_RETRY_COUNT=3 -e PATTERN='controllers models mailers integration workers lib' api test/run-tests.sh -notifications: - slack: - secure: dhqNhrJ0FVPnjtxa7R6k0s+1h/gMFNeK8zYJLZw+mK/FJ41K1u82Y8E6IDFbgNcKyAJ27ielvzGgWGSkDVltEnPR+ph15OMcy05TM9Pr2tWNusbDECOaEQgn4vGOq0shmiahE9tTOQpgc1TzhzIF9o1xgocah2PCLKiiH06kiiRlNZkaeQSJRFrXsPDDK8jIUtkLLUvFGQA6fq/lOh4tN6/N+K6+fo86wSxarkjv3d6h2flqvQqvqkbNpkv/UBC2Y1QACP+EX6uA0ySer8K5X6Q0Trrkjjacwvo5j74UVa+UYrBD+vr7Mgnr5aNFNId6M2nHd92ZiPM+6VDllCWsDLvJ2qFFy8cOO693EjrU7puaPp29+sptriIC71dk1oHSIEpPWwuaEZKzpwP4Swe322ne2th2VrjMhIye2Ru0519Lr2Dl4iTVV+hxoeVta3Nng23rUjrGoAbcw2FO1jmhANp8JWatv/V4PmlrS1/kYbiCfltWOMbKAD9f1EOTFnPCJsp3hPL238Ic+kvNJ8LM+ItNNR5cly+JPto6nSnMO8uhig9i78Mp2hVpnvrwhDLYntWEP2vcaNhP8oRys7X2iq5PRmsRwr9SyJReczd6i5gnvskXqKat6mNfPeGMBKSYof/1ve3Um0wEtwaYxvU5y/ZezFc3Kzzi6vt4P86j+mg= -env: - global: - - secure: NwJYV3kghSW2hReSDOnY0sG1oe7IDcix/pZprWHkfkpc+520355n71uj7gofQ2tOO7x2rg2+j9q1GVx9hbP0EsOCIl2u0csnA7lrfe9COp9cGdM7gMzSN6CvuwW9OME9eark37ACSHW1LD1TGB6OcjOkoQxTCM4E00Nj1zAYdT4gbhnBLnxW0FPpEqRB+0XN6ev53HdE5+KrwOIG/chYL/FdaTUdjfyikoduJp5pPjHt1Nd+LSoEt3WbYs8IJeSJIdzCYrD/gXHdjGF1f8v4PFCFyl1ashFtLPMuS+4DBZjR4grSbhpTBwoJAr6oRbWJNAkmaxC26s574U/7QgP6MFlJzhgKim2gvyGUmTSKgxZViyn1y7oend+vWE0281lHDMPqtO3fNel6HteFm/GoJ3lSvZPd8ddveJNacPZB6+K7KzvJWEoRy5eYdUjaejA6KiaSkblpqXoMWwDH+RjCde/HANxMhrECa9yCZlLKBdI5dPccyQwxKnebyZkU37VeWFc9fw2EUy9gmAunV5SH/Osz7b+IX+h3Mf8WxSvQutCUrD+1kspzkEVEXX41SawKD30OfMX9ZBZB9ueisyjB4kW0GzvCGlANMAQ4VDS4/FOmc+5IhcDN8i8PvzE5IGooETOtcwMWVZMrbA0/vq2Z44WQpS2Lq1NYGYhqAN947lk= - - secure: lLyERoM5p4ggOme89E1b/LW8PRwZvMyn14KRU0qa5Ce4DWPQ5qNB96fpXPeshAaD5163rxWGGA2z0a1XbMa98QH7XO0u88Azg1Y/d5yMJiHsFvKaIR7oEJqtgIs1sSgnC2q0/B0Sk8Zyqx45IvND0VRuHE2pI2IkZR3H65ro78BsuXzwX3zwoqU0Es7n9MawBoiTbZMs4MZiaHXgnQj2AdbWEx9jdigBM3omMc/29WRTVyFtPCL/RHg5TVe00Z5vNU2+uLYqF1U+HB+Cru0tyRJsPcCay3ksAy8PpHqX0KrFF04vSaN4K0RVScVk/0cXvXGuuud2GRujDyqcoClkuJCwyqRN1wJKto7B3kr+MblEIdTW13ef+VABIFR71+2uVlJJduMrmX2pzdIoroi0dg1T32sxxL8jes6hE437YGKtx1UKcJr94+ZhOHWyCbNF9mRRqBluFet8YyNaBdQKp5V685izsmpVrn/xShmcUWL7+MlDNbekEi3GDKMqmVNs8TNZZROSLiA1wwyn8AuB2u2/3sPHZGwroiRVUIx73Rg765KYfoR+gyonNgbn+AhXT0+7mAuLwqu/6msHjuNk0RRdRq4h+G8bh3jf7hbzUaiQC4F7J0Il+F3/DeegdwWNGWrE2+8Aa5619mJD3o+brOlLdmMHv3hLixx8ogBUKbo= - - secure: lB1eqOWmQVA6seElLmHg9tRzJN8jjDQ4UT6pcROGubk2Ru94gIsJnkFAeCqbp3AyfFWJAHIdCQH1q34krOMfEc+bEQnC5hSjY8PeYbdRnpTx32EDd2bl3ErnUuYq7OyXbHUpono7rzLiUWCjnsGOlz40R7LvN+wIIdP8cUD3F2OezalVSyNwIQPKmwTwIcTQrMcUdeOvlTTZ0BtbNZbHWKd6UZ7RTUOfnPy1un2dS3DAtQIbLM9Q4f4FpsZOqNntFuC8XfC+7wc1u4BA3mjat6iX9J46q2XThlhYqbIG/X79CqIB1lfpnh6Uh9yn4drrmldfnJbhl9w7T8yAF7kt2QzmydH8pnj1X5VcvtaTdMyox2ivCysfpQWkO62i0PbCxqX2+UMy9LHj3Wmis3ydx1flaRxjstykgySOFO9gvx4JOBfS9FjeRyd04YKDn/z9dbVZ9eJ3HYusf8QyPv1ZcaURpVqUszxEjg1bH36gtBC5fMoKF9Mk/SXJY1P6yQ5tRMy0C5A343HQ8xI6rUFomxe2Pk089wP92anphtF0KlF8ZjSEDAPbEXN6qsh+GCszVZQ3YRlQoLGj2fpJI236y28GgbcMmEhlKT2P/AtC78sMQyjGIY2rOH0pVBtYQz1qch2h/6z9tDvSOwI/SmcLwhE7tawIOiCWI3d/oXRFJMM= - - secure: vwNGJmMth0yKn0Y2I9UzSlmTctcZ070P3iZsf7pVn0swEyGgSpNPugVQ66H8lAYU28F24ANlKQGutzg1+LoNvwV2gHhvppe229yUQBUTsdfCOXnL586agNNzgfP5eTveuXSMvQfvrHohhsFSXAR5PoDTw3lfnvwO1L9gguhc0DIU6iIE6drmN/89Cj3tA7hFkbkDmfAJHhwF8djrUw4qBuiMUapGDtSsGT1adINJgngbpV5magNIg8MSEsvJfyTSVVCBqQGZWzNF82KGPtxMk8JWq5afwf76wFzE246VjAEtKlnSfme8KDhhKzyl7aLMo3mPC6FZdfavlGVYe18ZF9XE/c7jqMFtDS6OgybFlN+0rVpuUR+DGDpOUt9x7EJKamfCkjCO4a8m+Nhc63YkwLOwGDUtTjSI/iDQY/HxMqrzZqNZLb4972ZdezY6wFwfLldE8eGL7rM98SlS4RIWL4voJ31PEW3PwQRsPp7KbemSU2E/F2Je3MgdU+meK6esEaPDZqNwe51kT8amNM44srHazl05EsIo50pofMxTvjp7ZLa8i+O2JySSABfuX2weZMLwMBgvYS5qaWz85KXOCyiVcO3xl01MXLqKwp9l9vBkseFTZ1Hi/My5tif0W+a3HN2Zk333gwt85wKbbaHvHpYwm2kK/vZgQz3Rrw+l7rw= - - secure: u8gX2CSDCD9q4g9LfUodDZOCd1YpfhP3F5LTbwBpXVV3Nz9Dp3sl6vZXN0IJJQQ/sC6DMWL5+38oL+OmaMCZ2M9PzFbNoW6Lez9ZEm1YVVBbWU5/VGaGX86VfJAh70AGP0R7SurgfcRQARgt1kIzckSl5hAnSf2Wxw+TU+anaFCzvpGHaHbpr4HtPts1MQU49u7/wFhlPe6c+1LH95k1xIHKVISjpBam5E6mbt5hsqV9lsKoXmFttdfSrub8Pg+Ntivzcv8yimQPMr5KjbnuWBm/8eJfiKosUdKqo83oalC47Lex4KXvf8WW4DXEHH7VD5i+PibMPPcerwk5y3mXwUIA8ZzC+yi8MvBoqQ+Bi1tpMtyRZiCcqDyFqyNi9/8vu6LJ/zthzc09kkJX10rQD9EDz6jBPWiGepAWPEMN5PBC8Zp+Gia/eilg+F+6ux1atkdH8ll5noWy016yYW+Ib6TlTciKN2lj3nZ30J1t7UGeisjqVG/wGMT0yU0Pfh0dUppGkXM6AKpQz7HgftWGiuHXe2cD3E9Ag4D2ZlIoelc3SMYbtuR2cLMtHfUZA1QIbGfVcDjJ1X5OqQ3i0Ax9/KORMYERnk7UxB4W4rNieTO1vJPdsTcPijQm6EjyGvuceMsZfBxbxEeUtHarC85rKWm5c3bpLINYkka26XvEa2w= diff --git a/test/format-coverage.sh b/test/format-coverage.sh index c959a1d58c..12b97293d4 100755 --- a/test/format-coverage.sh +++ b/test/format-coverage.sh @@ -2,8 +2,9 @@ apt-get install -y awscli -if [ "$TRAVIS_PULL_REQUEST" == "false" ] +if [ "$GITHUB_PULL_REQUEST" == "pull_request" ] then - ./test/cc-test-reporter format-coverage -t simplecov --output ../coverage/codeclimate.$TRAVIS_JOB_NAME.json ../coverage/.resultset.json - aws s3 cp ../coverage/codeclimate.$TRAVIS_JOB_NAME.json s3://check-api-travis/codeclimate/$TRAVIS_REPO_SLUG/$TRAVIS_BUILD_NUMBER/codeclimate.$TRAVIS_JOB_NAME.json +./test/cc-test-reporter format-coverage -t simplecov --output ../coverage/codeclimate.$GITHUB_JOB_NAME.json ../coverage/.resultset.json +aws s3 cp ../coverage/codeclimate.$GITHUB_JOB_NAME.json s3://check-api-github/codeclimate/$GITHUB_REPO/$GITHUB_BUILD_NUMBER/codeclimate.$GITHUB_JOB_NAME.json fi + diff --git a/test/sum-upload-coverage.sh b/test/sum-upload-coverage.sh index 402caaaa43..8d2cb7612d 100755 --- a/test/sum-upload-coverage.sh +++ b/test/sum-upload-coverage.sh @@ -1,9 +1,9 @@ #!/bin/bash -if [[ "$TRAVIS_PULL_REQUEST" == "false" ]] && [[ $TRAVIS_TEST_RESULT == 0 ]] +if [[ "$GITHUB_PULL_REQUEST" == "pull_request" ]] && [[ "$GITHUB_TEST_RESULT" == 'success' ]] then rm -rf ../coverage/* - aws s3 cp --recursive s3://check-api-travis/codeclimate/$TRAVIS_REPO_SLUG/$TRAVIS_BUILD_NUMBER/ ../coverage + aws s3 cp --recursive s3://check-api-github/codeclimate/$GITHUB_REPO/$GITHUB_BUILD_NUMBER/ ../coverage if [[ $(ls ../coverage/codeclimate.* | wc -l) -eq 3 ]] then # Make sure we are not dealing with a file that is still being uploaded @@ -15,7 +15,7 @@ then sleep 5 size=$(du -s ../coverage/ | cut -f1) done - ./cc-test-reporter sum-coverage --output - --parts 3 ../coverage/codeclimate.* | sed 's/\/home\/travis\/build\/meedan\/check-api\///g' > ../coverage/codeclimate.json + ./cc-test-reporter sum-coverage --output - --parts 3 ../coverage/codeclimate.* | sed 's/\/home\/runner\/work\/check-api\///g' > ../coverage/codeclimate.json cat ../coverage/codeclimate.json | ./cc-test-reporter upload-coverage --input - ./cc-test-reporter show-coverage ../coverage/codeclimate.json fi