Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adds GitHub Actions and build containers #1648

Merged
merged 1 commit into from
Feb 10, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
### Github Actions Workflow

This build file replaces the existing `Jenkins.ci` build process.

`lint.yaml` replaces the `Static code validation` stage of the Jenkins build.

`build.yaml` replaces the `Build / Test` stage of the Jenkins build.

Many of the other stages are replaced merely by the fact we're using Github Actions, we use prebuild Docker containers so we don't have to replicate the steps for building containers.

The `Build result notification` stage was not moved to GHA, build failures will be reports via GHA.

The build process for `Jenkins.nightly` was not ported to GHA.

#### Configuring actions

If you are cloning or forking this repo you will need to configure two secrets for Actions to run correctly.

Secrets can be set via Settings -> Secrets -> New repository secret.

CR_USER is your GH username.
CR_PAT can be created by following [these directions](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)

Once you have run the build once with those secrets, you have to make then package public.
Access the package at https://ghcr.io/USER/indy-node/indy-node-build or https://ghcr.io/USER/indy-node/indy-node-lint then change the visibility in 'Package Settings' to 'Public' then re-run the build.
117 changes: 117 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
name: indy-node-build
on: [ push, pull_request ]

jobs:
workflow-setup:
runs-on: ubuntu-latest
outputs:
CACHE_KEY_LINT: ${{ steps.cache.outputs.CACHE_KEY_LINT }}
CACHE_KEY_BUILD: ${{ steps.cache.outputs.CACHE_KEY_BUILD }}
# Expose the lowercase version of the GitHub repository name
# to all subsequent jobs that reference image repositories
# as the push and pull operations require the URL of the repository
# to be in lowercase.
GITHUB_REPOSITORY_NAME: ${{ steps.cache.outputs.GITHUB_REPOSITORY_NAME }}
steps:
- name: Git checkout
uses: actions/checkout@v2
- name: Set outputs
id: cache
run: |
echo "::set-output name=CACHE_KEY_LINT::${{ hashFiles('.github/workflows/lint/Dockerfile') }}"
echo "::set-output name=CACHE_KEY_BUILD::${{ hashFiles('.github/workflows/build/Dockerfile') }}"
echo "::set-output name=GITHUB_REPOSITORY_NAME::$(echo ${GITHUB_REPOSITORY,,})"

build-lint-image:
needs: workflow-setup
runs-on: ubuntu-latest
env:
DOCKER_BUILDKIT: 1
CACHE_KEY_LINT: ${{ needs.workflow-setup.outputs.CACHE_KEY_LINT }}
GITHUB_REPOSITORY_NAME: ${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }}
steps:
- name: Git checkout
uses: actions/checkout@v2
- name: Try load from cache.
id: cache-image-lint
uses: actions/cache@v2
with:
path: ${GITHUB_WORKSPACE}/cache
key: ${{ env.CACHE_KEY_LINT }}
- name: If NOT found in cache, build and push image.
if: steps.cache-image-lint.outputs.cache-hit != 'true'
run: |
echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin
docker build -f .github/workflows/lint/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} .
docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:latest
docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:latest
mkdir -p ${GITHUB_WORKSPACE}/cache
touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_LINT }}

build-test-image:
needs: workflow-setup
runs-on: ubuntu-latest
env:
DOCKER_BUILDKIT: 1
CACHE_KEY_BUILD: ${{ needs.workflow-setup.outputs.CACHE_KEY_BUILD }}
GITHUB_REPOSITORY_NAME: ${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }}
steps:
- name: Git checkout
uses: actions/checkout@v2
- name: Try load from cache.
id: cache-image-build
uses: actions/cache@v2
with:
path: ${GITHUB_WORKSPACE}/cache
key: ${{ env.CACHE_KEY_BUILD }}
- name: If NOT found in cache, build and push image.
if: steps.cache-image-build.outputs.cache-hit != 'true'
run: |
echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin
docker build -f .github/workflows/build/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} .
docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:latest
docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:latest
mkdir -p ${GITHUB_WORKSPACE}/cache
touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_BUILD }}

indy_node:
name: Build Indy Node
needs: build-test-image
runs-on: ubuntu-18.04
container:
image: ghcr.io/${{ github.repository }}/indy-node-build
strategy:
matrix:
module: [indy_node, indy_common]
slice: [1, 2, 3, 4 ,5, 6, 7,8, 9, 10, 11]
fail-fast: false
steps:
- name: Check out code
uses: actions/checkout@v2

- name: Install dependencies
run: pip install .[tests]
continue-on-error: true

- name: Run Indy Node ${{ matrix.module }} test slice ${{ matrix.slice }}/${{ strategy.job-total }}
run: RUSTPYTHONASYNCIODEBUG=0 python3 runner.py --pytest "python3 -m pytest -l -vv --junitxml=test-result-indy-node-${{ matrix.module }}-${{ matrix.slice }}.xml" --dir "${{ matrix.module }}" --output "test-result-indy-node-${{ matrix.slice }}.txt" --test-only-slice "${{ matrix.slice }}/${{ strategy.job-total }}"

- name: Publish Test Report
uses: scacap/action-surefire-report@v1
with:
check_name: Indy Node ${{ matrix.module }} ${{ matrix.slice }}/${{ strategy.job-total }} Test Report
github_token: ${{ secrets.GITHUB_TOKEN }}
report_paths: test-result-indy-node-${{ matrix.module }}-${{ matrix.slice }}.xml

lint:
name: Lint
runs-on: ubuntu-latest
container:
image: ghcr.io/${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }}/indy-node-lint
needs: [workflow-setup, build-lint-image]
steps:
- name: Check out code
uses: actions/checkout@v2

- name: flake8
run: python3 -m flake8
17 changes: 17 additions & 0 deletions .github/workflows/build/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
FROM hyperledger/indy-core-baseci:0.0.3-master
askolesov marked this conversation as resolved.
Show resolved Hide resolved
LABEL maintainer="Hyperledger <hyperledger-indy@lists.hyperledger.org>"

RUN apt-get update -y && apt-get install -y \
python3-nacl \
libindy-crypto=0.4.5 \
libindy=1.13.0~1420 \
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: bump to 1.15.0

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Toktar, @m00sey did try this, but it caused errors in Jenkins build; #1645 (comment)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then I suggest bumping libindy and libindy's wrapper to the last master because it's a bad idea to have different versions. But we can do it in the next PR.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@WadeBarnes How can it affect Jenkins? Maybe this version is just missing in the repository?

Copy link
Member

@WadeBarnes WadeBarnes Feb 10, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Likely, I was going off the related Jenkins build error from this change; #1645 (comment). But I see they are separate docker files now.

# rocksdb python wrapper
libbz2-dev \
zlib1g-dev \
liblz4-dev \
libsnappy-dev \
rocksdb=5.8.8 \
ursa=0.3.2-2 \
jq

RUN indy_image_clean
3 changes: 3 additions & 0 deletions .github/workflows/build/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Building the build image

This `Dockerfile` is used as part of the workflow, any changes to it will force the docker image to be rebuilt and that new image will be used to run the downstream workflow.
21 changes: 21 additions & 0 deletions .github/workflows/lint/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Development
FROM ubuntu:18.04
LABEL maintainer="Kevin Griffin <griffin.kev@gmail.com>"

RUN apt-get update && apt-get dist-upgrade -y

# Install environment
RUN apt-get install -y \
git \
wget \
python3.5 \
python3-pip \
python-setuptools \
python3-nacl

RUN pip3 install -U \
'pip<10.0.0' \
setuptools \
pep8==1.7.1 \
pep8-naming==0.6.1 \
flake8==3.5.0
3 changes: 3 additions & 0 deletions .github/workflows/lint/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Building the lint image

This `Dockerfile` is used as part of the workflow, any changes to it will force the docker image to be rebuilt and that new image will be used to run the downstream workflow.
16 changes: 13 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ var/
*.egg
*.eggs

# Needed for GitHub Actions
!.github/workflows/build

# Installer logs
pip-log.txt
pip-delete-this-directory.txt
Expand Down Expand Up @@ -72,8 +75,15 @@ include/
# generated doc files
docs/source/api_docs/

# hidden files
.*
# IntelliJ specific config
*.idea
*.iml

#vscode
.vscode

# Vagrant files
.vagrant
.vagrant

# test output from working with GitHub actions
test-result-node.xml
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
BASE_DIR = os.path.join(os.path.expanduser("~"), ".indy")

tests_require = ['attrs==19.1.0', 'pytest==3.3.1', 'pytest-xdist==1.22.1', 'pytest-forked==0.2',
'python3-indy==1.13.0-dev-1420', 'pytest-asyncio==0.8.0']
'python3-indy==1.15.0', 'pytest-asyncio==0.8.0']

setup(
name=metadata['__title__'],
Expand Down