From 63d77fb2fce95dcb806073b06f8b8661d43c7bbb Mon Sep 17 00:00:00 2001 From: Yaron Date: Thu, 7 Sep 2023 21:42:16 +0700 Subject: [PATCH] Add workflow for GitHub action from master. --- .github/workflows/ci-image-dev.yml | 44 +++++++++++++++++ .github/workflows/ci-image-release.yml | 66 ++++++++++++++++++++++++++ .github/workflows/ci-image-test.yml | 63 ++++++++++++++++++++++++ docker/Dockerfile | 17 +++++++ docker/Dockerfile.test | 17 +++++++ 5 files changed, 207 insertions(+) create mode 100644 .github/workflows/ci-image-dev.yml create mode 100644 .github/workflows/ci-image-release.yml create mode 100644 .github/workflows/ci-image-test.yml create mode 100644 docker/Dockerfile.test diff --git a/.github/workflows/ci-image-dev.yml b/.github/workflows/ci-image-dev.yml new file mode 100644 index 000000000..fd73ac2c7 --- /dev/null +++ b/.github/workflows/ci-image-dev.yml @@ -0,0 +1,44 @@ +name: CI - Development + +on: + workflow_dispatch: + inputs: + commitOrTag: + description: 'Commit or tag' + required: false + default: '' + push: + branches-ignore: [] + +jobs: + push-to-ecr: + permissions: + id-token: write + contents: write + name: build + runs-on: docker + steps: + - name: Clean environment + # Prune the Docker resources created over 10 days before the current execution (change the value for a more/less aggressive cleanup). + shell: bash + run: | + docker system df + docker system prune -a -f --filter "until=168h" + docker system df + - name: 'Checkout scm ${{ inputs.commitOrTag }}' + uses: actions/checkout@v3 + with: + fetch-depth: 0 + ref: ${{ inputs.commitOrTag }} + - name: Docker build and push + uses: Zilliqa/gh-actions-workflows/actions/ci-dockerized-app-build-push@v1 + with: + file: docker/Dockerfile + push: true + tag: ${{ secrets.AWS_ACCOUNT_ID_ZILLIQA }}.dkr.ecr.${{ secrets.AWS_REGION_ZILLIQA }}.amazonaws.com/scilla + tag-length: 8 + registry: ${{ secrets.AWS_ACCOUNT_ID_ZILLIQA }}.dkr.ecr.${{ secrets.AWS_REGION_ZILLIQA }}.amazonaws.com + aws-region: ${{ secrets.AWS_REGION_ZILLIQA }} + role-to-assume: ${{ secrets.ECR_DEPLOYER_ROLE }} + oidc-role: ${{ secrets.OIDC_ROLE }} + cache-key: ${{ github.event.repository.name }} diff --git a/.github/workflows/ci-image-release.yml b/.github/workflows/ci-image-release.yml new file mode 100644 index 000000000..f112ff90d --- /dev/null +++ b/.github/workflows/ci-image-release.yml @@ -0,0 +1,66 @@ +name: CI - Release + +on: + workflow_dispatch: + inputs: + commitOrTag: + description: 'Commit or tag' + required: false + default: '' + push: + tags: + - v* + +jobs: + release-image: + permissions: + id-token: write + contents: write + runs-on: docker + steps: + - name: 'Checkout scm ${{ inputs.commitOrTag }}' + uses: actions/checkout@v3 + with: + fetch-depth: 0 + ref: ${{ inputs.commitOrTag }} + - name: Check if the commit or tag was passed manually + id: set-tag + run: | + if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then + echo "tag=$(git rev-parse HEAD | cut -c1-8)" >> $GITHUB_OUTPUT + else + echo "tag=${{ github.ref_name }}" >> $GITHUB_OUTPUT + fi + shell: bash + - name: Check if the tag head is the same as release-v0.13.4 head + id: check-latest + if: github.event_name != 'workflow_dispatch' + run: | + if test $(git rev-parse origin/release-v0.13.4) = $(git rev-parse HEAD); then + echo "latest=true" >> $GITHUB_OUTPUT + else + echo "latest=false" >> $GITHUB_OUTPUT + fi + shell: bash + - name: Docker build and push + uses: Zilliqa/gh-actions-workflows/actions/ci-dockerized-app-build-push@v1 + with: + file: docker/Dockerfile + push: true + tag: ${{ secrets.AWS_ACCOUNT_ID_ZILLIQA }}.dkr.ecr.${{ secrets.AWS_REGION_ZILLIQA }}.amazonaws.com/scilla:${{ steps.set-tag.outputs.tag }} + tag-latest: ${{ steps.check-latest.outputs.latest }} + registry: ${{ secrets.AWS_ACCOUNT_ID_ZILLIQA }}.dkr.ecr.${{ secrets.AWS_REGION_ZILLIQA }}.amazonaws.com + aws-region: ${{ secrets.AWS_REGION_ZILLIQA }} + role-to-assume: ${{ secrets.ECR_DEPLOYER_ROLE }} + oidc-role: ${{ secrets.OIDC_ROLE }} + cache-key: ${{ github.event.repository.name }} + - name: Docker build and push (Dockerhub) + uses: Zilliqa/gh-actions-workflows/actions/ci-dockerized-app-build-push@v1 + with: + file: docker/Dockerfile + push: true + tag: Zilliqa/scilla:${{ steps.set-tag.outputs.tag }} + tag-latest: ${{ steps.check-latest.outputs.latest }} + cache-key: ${{ github.event.repository.name }} + registry-username: ${{ secrets.DOCKERHUB_USERNAME }} + registry-password: ${{ secrets.DOCKERHUB_PASSWORD }} diff --git a/.github/workflows/ci-image-test.yml b/.github/workflows/ci-image-test.yml new file mode 100644 index 000000000..6150e4836 --- /dev/null +++ b/.github/workflows/ci-image-test.yml @@ -0,0 +1,63 @@ +name: CI - Integration tests + +on: + workflow_dispatch: + inputs: + commitOrTag: + description: 'Commit or tag' + required: false + default: '' + pull_request: + branches: + - 'release-v**' + +jobs: + run-tests: + permissions: + id-token: write + contents: write + name: tests + runs-on: docker + steps: + - name: Clean environment + # Prune the Docker resources created over 10 days before the current execution (change the value for a more/less aggressive cleanup). + shell: bash + run: | + docker system df + docker system prune -a -f --filter "until=336h" + docker system df + - name: 'Checkout scm ${{ inputs.commitOrTag }}' + uses: actions/checkout@v3 + with: + fetch-depth: 0 + ref: ${{ inputs.commitOrTag }} + - name: Configure AWS Credentials + uses: Zilliqa/gh-actions-workflows/actions/configure-aws-credentials@v1 + with: + role-to-assume: ${{ secrets.ECR_DEPLOYER_ROLE }} + oidc-role: ${{ secrets.OIDC_ROLE }} + aws-region: ${{ secrets.AWS_REGION_ZILLIQA }} + - name: Login to the registry + uses: docker/login-action@v2 + with: + registry: ${{ secrets.AWS_ACCOUNT_ID_ZILLIQA }}.dkr.ecr.${{ secrets.AWS_REGION_ZILLIQA }}.amazonaws.com + - name: Build Docker images + run: | + DOCKER_BUILDKIT=1 docker build --target test_runner -t scilla:tests -f docker/Dockerfile . + shell: bash + - name: Run make test + run: | + docker run --rm -i scilla:tests bash -c 'eval $(opam env) && LD_LIBRARY_PATH=/scilla/0/vcpkg_installed/x64-linux-dynamic/lib make test' + shell: bash + - name: Run make test_server + run: | + docker run --rm -i scilla:tests bash -c 'eval $(opam env) && LD_LIBRARY_PATH=/scilla/0/vcpkg_installed/x64-linux-dynamic/lib make test_server' + shell: bash + - name: Run make coveralls + run: | + docker run --rm -i scilla:tests bash -c 'eval $(opam env) && LD_LIBRARY_PATH=/scilla/0/vcpkg_installed/x64-linux-dynamic/lib make coveralls TRAVIS_JOB_ID=${{ github.run_number }}' + shell: bash + - name: Run make lint + run: | + docker run --rm -i scilla:tests bash -c 'eval $(opam env) && LD_LIBRARY_PATH=/scilla/0/vcpkg_installed/x64-linux-dynamic/lib make lint' + shell: bash diff --git a/docker/Dockerfile b/docker/Dockerfile index 1e88c5e13..87e48b1b2 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -119,6 +119,23 @@ RUN mkdir -p ${VCPKG_INSTALL_LIB_DIR} \ && rm -rf vcpkg_installed \ && ln -s ${BUILD_DIR}/vcpkg_installed vcpkg_installed +FROM builder AS test_runner +RUN mkdir -p \ + ${SOURCE_DIR}/bin ${SOURCE_DIR}/src/stdlib ${SOURCE_DIR}/vcpkg_installed/x64-linux-dynamic \ + && ln -s /usr/local/lib ${SOURCE_DIR}/vcpkg_installed/x64-linux-dynamic + +# pour in scilla binaries +# COPY --from=builder ${SOURCE_DIR} ${SOURCE_DIR}/bin +# pour in scilla tests +# COPY --from=builder ${SOURCE_DIR}/tests ${SOURCE_DIR}/tests +# pour in scilla conntract stdlibs +# COPY --from=builder ${SOURCE_DIR}/src/stdlib ${SOURCE_DIR}/src/stdlib + +# pour in zilliqa binaries and dynamic libs +WORKDIR ${SOURCE_DIR} +RUN ls -la && ./scripts/install_shellcheck_ubuntu.sh + + FROM ubuntu:22.04 RUN apt-get update -y \ diff --git a/docker/Dockerfile.test b/docker/Dockerfile.test new file mode 100644 index 000000000..f1e533cb7 --- /dev/null +++ b/docker/Dockerfile.test @@ -0,0 +1,17 @@ +ARG ACCOUNT_ID + +FROM ${ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/scilla:429e2f9 + +ENV VCPKG_ROOT="/vcpkg" +ENV SCILLA_REPO_ROOT="/scilla/0" + +WORKDIR /scilla/0/ +COPY . /scilla/0/ + +RUN apt update \ + && apt install -y sudo + +RUN eval $(opam env) \ + && LD_LIBRARY_PATH=/scilla/0/vcpkg_installed/x64-linux-dynamic/lib opam install reason.3.8.2 --yes + +RUN ./scripts/install_shellcheck_ubuntu.sh