-
Notifications
You must be signed in to change notification settings - Fork 68
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
Feature/GitHub actions #635
Open
AmitaiMazliah
wants to merge
101
commits into
master
Choose a base branch
from
feature/github-actions
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 96 commits
Commits
Show all changes
101 commits
Select commit
Hold shift + click to select a range
f11a38c
Added github workflow
AmitaiMazliah bae384e
Remove publish steps for testing
AmitaiMazliah 866baab
Remove circleci
AmitaiMazliah e4de273
Added needs to jobs
AmitaiMazliah f46e7f2
Added key input to cache steps
AmitaiMazliah 9ce69f2
Added path input to cache steps
AmitaiMazliah 4c58a6d
Fix parameter
AmitaiMazliah 8532301
Trying to run sh script
AmitaiMazliah 16bf539
Trying to run sh script
AmitaiMazliah 1d90b10
Trying to run sh script
AmitaiMazliah 7240929
Added timeout
AmitaiMazliah 7eea706
Trying script
AmitaiMazliah ee0b61b
Trying script
AmitaiMazliah 3826e50
Trying script
AmitaiMazliah af13f3a
Trying script
AmitaiMazliah 307a69d
Trying script
AmitaiMazliah c3a85cf
Trying script
AmitaiMazliah 656c2ec
Trying script
AmitaiMazliah d10e699
Trying script
AmitaiMazliah 6ee8c3f
Trying script
AmitaiMazliah 9700f64
Trying script
AmitaiMazliah f2d2f25
Trying script
AmitaiMazliah af5201a
Trying script
AmitaiMazliah faf36d6
Trying script
AmitaiMazliah 3f3677c
Trying script
AmitaiMazliah 175d013
Trying script
AmitaiMazliah cc7760e
Trying script
AmitaiMazliah 13e2090
Trying script
AmitaiMazliah 76e0bf0
Trying script
AmitaiMazliah c94d579
Trying script
AmitaiMazliah 632e0b5
Trying script
AmitaiMazliah acb2879
Trying script
AmitaiMazliah 4bbde00
Trying script
AmitaiMazliah fa36a9c
Trying script
AmitaiMazliah 2a419f4
Trying script
AmitaiMazliah 5ce4650
Trying script
AmitaiMazliah f1aa857
Trying script
AmitaiMazliah 784758b
Trying script
AmitaiMazliah bbc51b5
Trying script
AmitaiMazliah 2a28164
Trying script
AmitaiMazliah 810fed0
Trying script
AmitaiMazliah 3e58f27
Trying script
AmitaiMazliah 7c8beee
Trying script
AmitaiMazliah 2db4476
Trying script
AmitaiMazliah 1ac3a18
Trying script
AmitaiMazliah 691e45a
Trying script
AmitaiMazliah 059bd60
Trying script
AmitaiMazliah ee42f6e
Trying script
AmitaiMazliah 7e50ed1
Trying script
AmitaiMazliah e1dfceb
Trying script
AmitaiMazliah 76b1dc7
Trying script
AmitaiMazliah 63aac5a
Trying script
AmitaiMazliah c1632ef
Trying script
AmitaiMazliah 57d454f
Trying script
AmitaiMazliah a78dbfe
Trying script
AmitaiMazliah 9d3e366
Trying script
AmitaiMazliah a7fd0f8
Trying script
AmitaiMazliah fd3a07f
trying script
AmitaiMazliah 122aa74
Trying script
AmitaiMazliah 1b5f9f6
Trying script
AmitaiMazliah 75fdcdb
trying script
AmitaiMazliah e903a27
trying script
AmitaiMazliah db035b7
Trying script
AmitaiMazliah 843d9e9
Trying script
AmitaiMazliah fa71603
Trying script
AmitaiMazliah 62df539
trying script
AmitaiMazliah 2d99fea
trying script
AmitaiMazliah 61524ce
trying script
AmitaiMazliah 3d2e459
trying script
AmitaiMazliah 6f206c2
trying
AmitaiMazliah d9a7b06
trying script
AmitaiMazliah 07eb88b
Trying script
AmitaiMazliah 813c49d
trying script
AmitaiMazliah 102b9bb
trying script
AmitaiMazliah e8056d3
trying script
AmitaiMazliah 40e9cd3
trying script
AmitaiMazliah 2a9866c
trying script
AmitaiMazliah 5cce05c
trying script
AmitaiMazliah a705ed8
trying script
AmitaiMazliah ecbf116
Trying script
AmitaiMazliah eae7258
trying script
AmitaiMazliah 980185c
Trying script
AmitaiMazliah b053a31
Removed lint on old file
AmitaiMazliah a5e9a46
Added GOOGLE_APPLICATION_CREDENTIALS
AmitaiMazliah 7229af0
Added GOOGLE_APPLICATION_CREDENTIALS
AmitaiMazliah 0a33412
Added GOOGLE_APPLICATION_CREDENTIALS
AmitaiMazliah 0cd9f60
Added ActiveDirectory__ClientSecret
AmitaiMazliah b0bde3a
Print if file exists
AmitaiMazliah f19050c
Print env var
AmitaiMazliah 6af6bdd
Trying secrets
AmitaiMazliah 64689e9
Added more secrets
AmitaiMazliah b4c3ba8
Added env vars
AmitaiMazliah c7c3904
Added more env vars
AmitaiMazliah 0c487f5
Added publishing steps to pipeline
AmitaiMazliah 32ed95c
Added GHCR_PASSWORD and username
AmitaiMazliah 4b5bbbe
new lines in readme
AmitaiMazliah b654dad
Fix PR comments
AmitaiMazliah 169a1ef
Fix version
AmitaiMazliah 4f5b8fd
Fix crd tests to run local
AmitaiMazliah 3ffc3bb
bump kind and comment host change
1997fc0
Merge branch 'master' into feature/github-actions
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
bin\ | ||
obj\ | ||
bin/ | ||
obj/ | ||
cmd/ | ||
**/bin/* | ||
**/obj/* | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,329 @@ | ||
name: Publish Kamus | ||
|
||
on: | ||
push: | ||
branches: | ||
- master | ||
pull_request: | ||
branches: | ||
- master | ||
|
||
jobs: | ||
test_cli: | ||
name: Test Kamus cli | ||
runs-on: ubuntu-latest | ||
container: | ||
image: timbru31/node-alpine-git:14 | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
- name: Install dependencies | ||
working-directory: "cli" | ||
run: yarn | ||
- name: Check link | ||
working-directory: "cli" | ||
run: yarn eslint | ||
- name: Run tests | ||
working-directory: "cli" | ||
run: yarn test | ||
|
||
build_api: | ||
name: Build Kamus api components | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
- name: Build decryptor docker image | ||
run: docker build . -t kamus-decryptor --label org.opencontainers.image.source=https://github.com/${{github.repository}} | ||
- name: Build encryptor docker image | ||
run: docker build . -t kamus-encryptor --build-arg PROJECT_NAME=encrypt-api --label org.opencontainers.image.source=https://github.com/${{github.repository}} | ||
- name: Build CRD controller docker image | ||
run: docker build . -t crd-controller --build-arg PROJECT_NAME=crd-controller --label org.opencontainers.image.source=https://github.com/${{github.repository}} | ||
- name: Save docker image | ||
run: | | ||
mkdir -p docker-cache-api | ||
docker save -o docker-cache-api/kamus-decryptor.tar kamus-decryptor | ||
docker save -o docker-cache-api/kamus-encryptor.tar kamus-encryptor | ||
docker save -o docker-cache-api/crd-controller.tar crd-controller | ||
- name: Cache docker images | ||
uses: actions/cache@v2 | ||
with: | ||
key: docker_api_cache_key-{{ .Revision }} | ||
path: docker-cache-api | ||
|
||
test_blackbox: | ||
name: Run black box tests | ||
runs-on: ubuntu-latest | ||
needs: build_api | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
- name: Restore docker images cache | ||
uses: actions/cache@v2 | ||
with: | ||
key: docker_api_cache_key-{{ .Revision }} | ||
path: docker-cache-api | ||
- name: Restore images | ||
run: | | ||
docker load < docker-cache-api/kamus-decryptor.tar | ||
docker load < docker-cache-api/kamus-encryptor.tar | ||
- name: Run black box tests | ||
env: | ||
ENCRYPTOR_IMAGE: kamus-encryptor | ||
DECRYPTOR_IMAGE: kamus-decryptor | ||
run: docker-compose -f tests/blackbox/compose/docker-compose.yaml up --build --exit-code-from black-box --abort-on-container-exit | ||
- name: Parse Zap's Report | ||
run: | | ||
docker run --rm -v $(pwd)/tests/blackbox/compose/reports/:/input -v $(pwd)/glue/:/config soluto/glue-ci:1551818801630 sh -x /app/run_glue.sh /config/glue.json /input/report.json | ||
|
||
test_crd: | ||
name: Test KamusSecret CRD | ||
runs-on: ubuntu-latest | ||
needs: build_api | ||
strategy: | ||
matrix: | ||
k8s_version: ["v1.18.15", "v1.19.7", "v1.20.2"] | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
- name: Restore docker images cache | ||
uses: actions/cache@v2 | ||
with: | ||
key: docker_api_cache_key-{{ .Revision }} | ||
path: docker-cache-api | ||
- uses: engineerd/[email protected] | ||
with: | ||
version: "v0.11.1" | ||
config: tests/crd-controller/kind-config.yaml | ||
image: kindest/node:${{ matrix.k8s_version }} | ||
name: e2e-test | ||
- name: Load CRD controller | ||
run: | | ||
kind load image-archive docker-cache-api/crd-controller.tar --name e2e-test | ||
- name: Setup .NET Core SDK 3.0 | ||
uses: actions/[email protected] | ||
with: | ||
dotnet-version: '3.0' | ||
- name: Install dependencies | ||
working-directory: tests/crd-controller | ||
run: dotnet restore | ||
- name: Build | ||
working-directory: tests/crd-controller | ||
run: dotnet build --configuration Release --no-restore | ||
- name: Test | ||
working-directory: tests/crd-controller | ||
run: dotnet test | ||
|
||
run_tests: | ||
runs-on: ubuntu-latest | ||
container: | ||
image: mcr.microsoft.com/dotnet/core/sdk:3.1 | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
- name: Runs unit tests | ||
working-directory: 'tests/unit' | ||
run: dotnet test | ||
- name: Runs integration tests | ||
working-directory: 'tests/integration' | ||
env: | ||
GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }} | ||
ActiveDirectory__ClientSecret: ${{ secrets.ActiveDirectory__ClientSecret }} | ||
KeyManagement__AwsKms__Key: ${{ secrets.KeyManagement__AwsKms__Key }} | ||
KeyManagement__AwsKms__Secret: ${{ secrets.KeyManagement__AwsKms__Secret }} | ||
run: dotnet test | ||
|
||
lint-scripts: | ||
name: Lint the code | ||
runs-on: ubuntu-latest | ||
container: | ||
image: node:14 | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
- name: Run lint | ||
run: | | ||
wget -P tmp_install_folder/ https://github.com/koalaman/shellcheck/releases/download/v0.7.1/shellcheck-v0.7.1.linux.x86_64.tar.xz | ||
tar xvf tmp_install_folder/shellcheck-v0.7.1.linux.x86_64.tar.xz -C tmp_install_folder | ||
cp tmp_install_folder/shellcheck-v0.7.1/shellcheck /usr/bin/shellcheck | ||
rm -r tmp_install_folder | ||
shellcheck -x ci/version_to_deploy.sh | ||
shellcheck -x ci/version_to_deploy_init.sh | ||
shellcheck -x ci/version_to_deploy_cli_docker.sh | ||
|
||
push-api-images: | ||
name: Push kamus api component docker images | ||
runs-on: ubuntu-latest | ||
needs: [test_cli, test_blackbox, test_crd, run_tests, lint-scripts, build-init-container] | ||
if: github.ref == 'refs/heads/master' | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
- name: Config git user | ||
run: | | ||
git config user.email "[email protected]" | ||
git config user.name "ci-build" | ||
- name: Tag branch | ||
run: ./ci/version_to_deploy.sh | ||
- name: Install SSH key | ||
uses: shimataro/ssh-key-action@v2 | ||
with: | ||
key: "f1:c6:0c:fd:87:74:65:84:2f:6e:49:97:ec:6f:20:a5" | ||
- name: Restore docker images cache | ||
uses: actions/cache@v2 | ||
with: | ||
key: docker_api_cache_key-{{ .Revision }} | ||
path: docker-cache-api | ||
- name: Restore images | ||
run: | | ||
docker load < docker-cache-api/kamus-decryptor.tar | ||
docker load < docker-cache-api/kamus-encryptor.tar | ||
docker load < docker-cache-api/crd-controller.tar | ||
docker tag kamus-decryptor ghcr.io/soluto/kamus:$DECRYPTOR_API_DOCKER_TAG | ||
docker tag kamus-encryptor ghcr.io/soluto/kamus:$ENCRYPTOR_API_DOCKER_TAG | ||
docker tag crd-controller ghcr.io/soluto/kamus:$CONTROLLER_API_DOCKER_TAG | ||
- name: Docker push version | ||
working-directory: 'init-container/tests' | ||
run: | | ||
docker login ghcr.io -u ${{ secrets.GHCR_USERNAME }} -p ${{ secrets.GHCR_PASSWORD }} | ||
docker push ghcr.io/soluto/kamus:$DECRYPTOR_API_DOCKER_TAG | ||
docker push ghcr.io/soluto/kamus:$ENCRYPTOR_API_DOCKER_TAG | ||
docker push ghcr.io/soluto/kamus:$CONTROLLER_API_DOCKER_TAG | ||
- name: Docker push latest | ||
working-directory: 'init-container/tests' | ||
run: | | ||
docker login ghcr.io -u ${{ secrets.GHCR_USERNAME }} -p ${{ secrets.GHCR_PASSWORD }} | ||
docker tag ghcr.io/soluto/kamus:$DECRYPTOR_API_DOCKER_TAG ghcr.io/soluto/kamus:decryptor-latest | ||
docker tag ghcr.io/soluto/kamus:$ENCRYPTOR_API_DOCKER_TAG ghcr.io/soluto/kamus:encryptor-latest | ||
docker tag ghcr.io/soluto/kamus:$CONTROLLER_API_DOCKER_TAG ghcr.io/soluto/kamus:controller-latest | ||
docker push ghcr.io/soluto/kamus:decryptor-latest | ||
docker push ghcr.io/soluto/kamus:encryptor-latest | ||
docker push ghcr.io/soluto/kamus:controller-latest | ||
- name: Push tags | ||
run: | | ||
git pull | ||
git push --set-upstream origin ${GITHUB_REF##*/} --tags | ||
|
||
build-init-container: | ||
name: Build the init container | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
- name: Build docker image | ||
working-directory: 'init-container' | ||
run: docker build . -t kamus-init-container --label org.opencontainers.image.source=https://github.com/${{github.repository}} | ||
- name: Run black box tests | ||
working-directory: 'init-container/tests' | ||
run: sudo INIT_CONTAINER_IMAGE=kamus-init-container ./run_test.sh | ||
- name: Save docker image | ||
run: | | ||
mkdir -p docker-cache | ||
docker save -o docker-cache/kamus-init-container.tar kamus-init-container | ||
- name: Cache docker image | ||
uses: actions/cache@v2 | ||
with: | ||
key: docker_cache_key-{{ .Revision }} | ||
path: docker-cache | ||
|
||
push-init-container: | ||
name: Pushed the init-container docker image | ||
runs-on: ubuntu-latest | ||
needs: [ test_cli, test_blackbox, test_crd, run_tests, lint-scripts, build-init-container ] | ||
if: github.ref == 'refs/heads/master' | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
- name: Config git | ||
run: | | ||
git config user.email "[email protected]" | ||
git config user.name "ci-build" | ||
- name: Cache docker image | ||
uses: actions/cache@v2 | ||
with: | ||
key: docker_cache_key-{{ .Revision }} | ||
path: docker-cache | ||
- name: Install SSH key | ||
uses: shimataro/ssh-key-action@v2 | ||
with: | ||
key: "f1:c6:0c:fd:87:74:65:84:2f:6e:49:97:ec:6f:20:a5" | ||
- name: Tag branch | ||
run: ./ci/version_to_deploy_init.sh | ||
- name: Restore image | ||
run: | | ||
docker load < docker-cache/kamus-init-container.tar | ||
docker tag kamus-init-container ghcr.io/soluto/kamus-init-container:$INIT_CONTAINER_DOCKER_TAG | ||
- name: Docker push | ||
working-directory: 'init-container/tests' | ||
run: | | ||
docker login ghcr.io -u ${{ secrets.GHCR_USERNAME }} -p ${{ secrets.GHCR_PASSWORD }} | ||
docker push ghcr.io/soluto/kamus-init-container:$INIT_CONTAINER_DOCKER_TAG | ||
- name: Docker push latest | ||
working-directory: 'init-container/tests' | ||
run: | | ||
docker login ghcr.io -u ${{ secrets.GHCR_USERNAME }} -p ${{ secrets.GHCR_PASSWORD }} | ||
docker tag ghcr.io/soluto/kamus-init-container:$INIT_CONTAINER_DOCKER_TAG ghcr.io/soluto/kamus-init-container:latest | ||
docker push ghcr.io/soluto/kamus-init-container:latest | ||
- name: Push tags | ||
run: | | ||
git pull | ||
git push --set-upstream origin ${GITHUB_REF##*/} --tags | ||
|
||
push-cli-image: | ||
name: Push kamus cli docker image | ||
runs-on: ubuntu-latest | ||
needs: [ test_cli, test_blackbox, test_crd, run_tests, lint-scripts, build-init-container ] | ||
if: github.ref == 'refs/heads/master' | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
- name: Config git | ||
run: | | ||
git config user.email "[email protected]" | ||
git config user.name "ci-build" | ||
- name: Install SSH key | ||
uses: shimataro/ssh-key-action@v2 | ||
with: | ||
key: "f1:c6:0c:fd:87:74:65:84:2f:6e:49:97:ec:6f:20:a5" | ||
- name: Tag branch | ||
run: ./ci/version_to_deploy_cli_docker.sh | ||
- name: Build docker image | ||
working-directory: 'cli' | ||
run: docker build . -t ghcr.io/soluto/kamus-cli:$CLI_DOCKER_TAG --label org.opencontainers.image.source=https://github.com/${{github.repository}} | ||
- name: Docker push | ||
run: | | ||
docker login ghcr.io -u ${{ secrets.GHCR_USERNAME }} -p ${{ secrets.GHCR_PASSWORD }} | ||
docker push ghcr.io/soluto/kamus-cli:$CLI_DOCKER_TAG | ||
- name: Docker push latest | ||
run: | | ||
docker tag ghcr.io/soluto/kamus-cli:$CLI_DOCKER_TAG ghcr.io/soluto/kamus-cli:latest | ||
docker login ghcr.io -u ${{ secrets.GHCR_USERNAME }} -p ${{ secrets.GHCR_PASSWORD }} | ||
docker push ghcr.io/soluto/kamus-cli:latest | ||
- name: Push tags | ||
run: | | ||
git pull | ||
git push --set-upstream origin ${GITHUB_REF##*/} --tags | ||
|
||
build-website: | ||
name: Build kamus website | ||
runs-on: ubuntu-latest | ||
needs: [ test_cli, test_blackbox, test_crd, run_tests, lint-scripts, build-init-container ] | ||
if: github.ref == 'refs/heads/master' | ||
container: | ||
image: node:8.16.0 | ||
volumes: | ||
- .:publish | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
- name: Install and configure dependencies | ||
run: | | ||
npm install -g --silent [email protected] | ||
git config user.email "[email protected]" | ||
git config user.name "ci-build" | ||
- name: Install SSH key | ||
uses: shimataro/ssh-key-action@v2 | ||
with: | ||
key: "f1:c6:0c:fd:87:74:65:84:2f:6e:49:97:ec:6f:20:a5" | ||
- name: Deploy docs to gh-pages branch | ||
run: gh-pages --message "[skip ci] Updates" --dist publish/public/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,7 @@ | ||
[![Helm Package](https://img.shields.io/badge/helm-latest-blue.svg)](https://hub.helm.sh/charts/soluto/kamus) | ||
[![Slack](https://img.shields.io/badge/slack-kamus-orange.svg)](https://join.slack.com/t/k8s-kamus/shared_invite/enQtODA2MjI3MjAzMjA1LThlODkxNTg3ZGVmMjVkOTBhY2RmMmRjOWFiOGU2NzQ1ODU4ODNiMDJiZTE5ZTY4YmRiOTM3MjI0MDc0OGFkN2E) | ||
[![Twitter](https://img.shields.io/twitter/follow/solutoeng.svg?label=Follow&style=popout)](https://twitter.com/intent/tweet?text=Checkout%20Kamus%20secret%20encryption%20for%20Kubernetes&url=https://github.com/Soluto/kamus&via=SolutoEng&hashtags=kubernetes,devops,devsecops) [![CircleCI](https://circleci.com/gh/Soluto/kamus.svg?style=svg)](https://circleci.com/gh/Soluto/kamus) | ||
[![Twitter](https://img.shields.io/twitter/follow/solutoeng.svg?label=Follow&style=popout)](https://twitter.com/intent/tweet?text=Checkout%20Kamus%20secret%20encryption%20for%20Kubernetes&url=https://github.com/Soluto/kamus&via=SolutoEng&hashtags=kubernetes,devops,devsecops) | ||
[![CircleCI](https://circleci.com/gh/Soluto/kamus.svg?style=svg)](https://circleci.com/gh/Soluto/kamus) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Isn't it time to remove circle ci? |
||
|
||
![logo](images/logo.png) | ||
# Kamus | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.