Showing preview only (1,077K chars total). Download the full file or copy to clipboard to get everything.
Repository: LambdaTest/test-at-scale
Branch: main
Commit: 172fe0213c21
Files: 201
Total size: 13.0 MB
Directory structure:
gitextract_9y26wxik/
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── 1-bug-report.yaml
│ │ ├── 2-feature-request.yaml
│ │ └── 3-documentation-improvement.yaml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── dockerhub-description.yml
│ ├── env-release-nucleus.yml
│ ├── env-release-synapse.yml
│ ├── premerge.yml
│ ├── pull_request_lint.yml
│ ├── release-patch-wf.yml
│ ├── release.yml
│ └── stale.yml
├── .gitignore
├── .golangci.yml
├── .sample.synapse.json
├── .vscode/
│ └── settings.json
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── build/
│ ├── nucleus/
│ │ ├── Dockerfile
│ │ ├── build.sh
│ │ ├── entrypoint.sh
│ │ ├── golang/
│ │ │ └── server
│ │ └── java/
│ │ └── test-at-scale-java.jar
│ └── synapse/
│ ├── Dockerfile
│ ├── build.sh
│ └── entrypoint.sh
├── bundle
├── cmd/
│ ├── nucleus/
│ │ ├── bin.go
│ │ ├── flags.go
│ │ └── main.go
│ └── synapse/
│ ├── bin.go
│ ├── flags.go
│ └── main.go
├── config/
│ ├── default.go
│ ├── loader.go
│ ├── nucleusmodel.go
│ ├── parse.go
│ ├── parse_test.go
│ └── synapsemodel.go
├── docker-compose.yml
├── go.mod
├── go.sum
├── mocks/
│ ├── AzureClient.go
│ ├── BlockTestService.go
│ ├── Builder.go
│ ├── CacheStore.go
│ ├── CoverageService.go
│ ├── DiffManager.go
│ ├── DockerRunner.go
│ ├── Driver.go
│ ├── ExecutionManager.go
│ ├── GitManager.go
│ ├── ListSubModuleService.go
│ ├── LogWriterStrategy.go
│ ├── Logger.go
│ ├── PayloadManager.go
│ ├── Requests.go
│ ├── SecretParser.go
│ ├── SecretsManager.go
│ ├── SynapseManager.go
│ ├── TASConfigManager.go
│ ├── Task.go
│ ├── TestDiscoveryService.go
│ ├── TestExecutionService.go
│ ├── TestStats.go
│ └── ZstdCompressor.go
├── pkg/
│ ├── api/
│ │ ├── health/
│ │ │ ├── health.go
│ │ │ └── health_test.go
│ │ ├── results/
│ │ │ ├── results.go
│ │ │ └── results_test.go
│ │ ├── router.go
│ │ ├── router_test.go
│ │ └── testlist/
│ │ └── testlist.go
│ ├── azure/
│ │ └── client.go
│ ├── blocktestservice/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── cachemanager/
│ │ └── cachemanager.go
│ ├── command/
│ │ ├── run.go
│ │ ├── run_test.go
│ │ ├── script.go
│ │ └── script_test.go
│ ├── core/
│ │ ├── interfaces.go
│ │ ├── lifecycle.go
│ │ ├── models.go
│ │ ├── runner.go
│ │ ├── secrets.go
│ │ ├── synapse.go
│ │ └── wsproto.go
│ ├── cron/
│ │ └── setup.go
│ ├── diffmanager/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── driver/
│ │ ├── builder.go
│ │ ├── builder_test.go
│ │ ├── driver_v1.go
│ │ ├── driver_v2.go
│ │ └── driver_v2_test.go
│ ├── errs/
│ │ ├── nucleus.go
│ │ ├── nucleus_test.go
│ │ └── synapse.go
│ ├── fileutils/
│ │ ├── fileutils.go
│ │ └── fileutils_test.go
│ ├── gitmanager/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── global/
│ │ ├── nucleusconstants.go
│ │ ├── synapseconstants.go
│ │ └── version.go
│ ├── listsubmoduleservice/
│ │ └── setup.go
│ ├── logstream/
│ │ ├── mask.go
│ │ └── mask_test.go
│ ├── logwriter/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── lumber/
│ │ ├── logio.go
│ │ ├── logrus.go
│ │ ├── setup.go
│ │ └── zap.go
│ ├── payloadmanager/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── procfs/
│ │ └── procfs.go
│ ├── proxyserver/
│ │ ├── proxyhandler.go
│ │ └── setup.go
│ ├── requestutils/
│ │ └── request.go
│ ├── runner/
│ │ └── docker/
│ │ ├── config.go
│ │ ├── docker.go
│ │ ├── docker_test.go
│ │ └── setup_test.go
│ ├── secret/
│ │ ├── secret.go
│ │ └── secret_test.go
│ ├── secrets/
│ │ ├── secrets.go
│ │ ├── secrets_test.go
│ │ └── setup_test.go
│ ├── server/
│ │ └── setup.go
│ ├── service/
│ │ ├── coverage/
│ │ │ ├── coverage.go
│ │ │ ├── coverage_test.go
│ │ │ └── models.go
│ │ └── teststats/
│ │ ├── teststats.go
│ │ └── teststats_test.go
│ ├── synapse/
│ │ ├── synapse.go
│ │ ├── utils.go
│ │ └── utils_test.go
│ ├── tasconfigdownloader/
│ │ └── setup.go
│ ├── tasconfigmanager/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── task/
│ │ ├── task.go
│ │ └── task_test.go
│ ├── testdiscoveryservice/
│ │ ├── testdiscovery.go
│ │ └── testdiscovery_test.go
│ ├── testexecutionservice/
│ │ ├── testexecution.go
│ │ └── testexecution_test.go
│ ├── tests/
│ │ └── testutils.go
│ ├── urlmanager/
│ │ ├── urlmanager.go
│ │ └── urlmanager_test.go
│ ├── utils/
│ │ ├── utils.go
│ │ └── utils_test.go
│ └── zstd/
│ ├── zstd.go
│ └── zstd_test.go
├── runner.conf
├── sample-tas.yaml
├── scripts/
│ ├── .eslintrc.json
│ ├── custom-reporter.js
│ ├── mapCoverage.js
│ └── package.json
└── testutils/
├── constants.go
├── testdata/
│ ├── compare/
│ │ └── abc...xyz
│ ├── coverage/
│ │ ├── coverage-final.json
│ │ └── sample/
│ │ └── coverage-final.json
│ ├── gitlabCommitDiff.json
│ ├── index.json
│ ├── index.txt
│ ├── merge_requests/
│ │ └── 2/
│ │ └── changes
│ ├── payload.json
│ ├── pulls/
│ │ └── 2
│ ├── sample_config.json
│ ├── secretTestData/
│ │ ├── invalidsecretfile.json
│ │ ├── secretOauthFile.json
│ │ └── secretfile.json
│ ├── tas.yaml
│ ├── taskPayload.json
│ ├── tasyml/
│ │ ├── duplicate_submodule_postmerge.yaml
│ │ ├── duplicate_submodule_premerge.yaml
│ │ ├── framework_only_required.yml
│ │ ├── invalidVersion.yml
│ │ ├── invalid_fields.yml
│ │ ├── invalid_types.yml
│ │ ├── invalid_typesv2.yml
│ │ ├── junk.yml
│ │ ├── postmerge_emptyv1.yml
│ │ ├── postmerge_emptyv2.yaml
│ │ ├── pre_merge_emptyv1.yml
│ │ ├── premerge_emptyv2.yaml
│ │ ├── valid.yml
│ │ ├── validV2.yml
│ │ ├── valid_with_cachekeyV2.yml
│ │ └── validwithCacheKey.yml
│ └── testblocklistdata/
│ └── testBlocklist.json
├── testdirectory/
│ └── testdir/
│ └── file
├── testfile
└── utils.go
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/ISSUE_TEMPLATE/1-bug-report.yaml
================================================
name: 🐞 Bug report
description: Create a bug report to help us improve Test-at-scale
title: "[Bug]: "
labels: [bug, needs-triaging]
assignees:
- nevilm-lt
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report! Please fill the form in English
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: What is the current behavior?
description: Add a brief description of what you are experiencing.
validations:
required: true
- type: textarea
attributes:
label: What is the expected behavior?
description: A brief description of what you expect.
validations:
required: true
- type: textarea
attributes:
label: Steps To Reproduce
description: Add steps to reproduce this behavior, include console / network logs & screenshots
placeholder: |
1.
2.
3.
4.
validations:
required: true
- type: dropdown
id: version
attributes:
label: Version
options:
- Test-at-scale Cloud
- Test-at-scale Community Edition
- Test-at-scale Enterprise Edition
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/2-feature-request.yaml
================================================
name: 🛠️ Feature request
description: Suggest an idea to improve Test-at-scale
title: "[Feature]: "
labels: [enhancement]
assignees:
- anmol-LT
body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue related to this feature request already exists.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: What would you like to add?
description: A clear description of the feature or enhancement wanted in Test-at-scale.
validations:
required: true
- type: textarea
attributes:
label: Why should this be worked on?
description: A concise description of the problems or use cases for this feature request.
validations:
required: true
- type: textarea
attributes:
label: Other details
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/3-documentation-improvement.yaml
================================================
name: 📖 Docs & Tutorials Improvement
description: Suggest improvements to our docs and tutorials
title: "[Docs & Tutorials]: "
labels: [docs-tutorials]
assignees:
- nevilm-lt
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this docs/tutorials improvement request!
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue realated to this already exists.
options:
- label: I have searched the existing issues
required: true
- type: input
attributes:
label: Doc/tutorial link
description: Add a link to the page which needs improvement (optional)
validations:
required: false
- type: textarea
attributes:
label: Explain the problem
description: Is the documentation/tutorial missing? Or is it not clear? What is not clear?
validations:
required: true
- type: textarea
attributes:
label: Your inputs to improve
description: Your inputs to improve/add new documentation or tutorial.
validations:
required: true
================================================
FILE: .github/pull_request_template.md
================================================
# Issue Link
Add GitHub issue links here.
# Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Fixes # (issue)
## Type of change
Please delete options that are not relevant.
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] This change requires a documentation update
# How Has This Been Tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
- [ ] Test A
- [ ] Test B
# Checklist:
- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream modules
================================================
FILE: .github/workflows/dockerhub-description.yml
================================================
name: Update Docker Hub Description
on:
push:
branches:
- main
paths:
- README.md
- .github/workflows/dockerhub-description.yml
jobs:
dockerHubDescription:
name: Update DockerHub Description - Nucleus
runs-on: ubuntu-latest
steps:
- name: Checkout Codebase
uses: actions/checkout@v3
- name: Docker Hub Description
uses: peter-evans/dockerhub-description@v3
with:
# DOCKER_PASSWORD are actual password not token
# DOCKER_TOKEN is not supported for readme/docs updation in dockerhub
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
repository: lambdatest/nucleus
short-description: ${{ github.event.repository.description }}
- name: Docker Hub Description - Synapse
uses: peter-evans/dockerhub-description@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
repository: lambdatest/synapse
short-description: ${{ github.event.repository.description }}
================================================
FILE: .github/workflows/env-release-nucleus.yml
================================================
name: Release to Environment Nucleus
on:
workflow_dispatch:
inputs:
environment:
description: 'Environment to Deploy'
required: true
type: choice
options:
- beta
- prod
version:
description: 'Version to be Published'
required: true
type: string
jobs:
env-release:
runs-on: ubuntu-latest
steps:
- name: Docker Login
uses: docker/login-action@v1.13.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
logout: true
- name: Setup Environment
run: |
echo "BOTNAME=Test-at-Scale Nucleus Promoted: Version ${ENVIRONMENT} to ${VERSION}" >> $GITHUB_ENV
if [ ${ENVIRONMENT} == "prod" ] ; then
echo "IMAGE_TAG=latest-base" >> $GITHUB_ENV
else
echo "IMAGE_TAG=${ENVIRONMENT}-base" >> $GITHUB_ENV
fi
env:
ENVIRONMENT: ${{ github.event.inputs.environment }}
VERSION: ${{ github.event.inputs.version }}
- name: Promote Docker Image
run: |
docker pull lambdatest/nucleus:${VERSION}-base
docker tag lambdatest/nucleus:${VERSION}-base lambdatest/nucleus:${{ env.IMAGE_TAG }}
docker push lambdatest/nucleus:${{ env.IMAGE_TAG }}
env:
VERSION: ${{ github.event.inputs.version }}
- name: Build Cloud Runners
run: |
gh workflow run -R ${{ secrets.WF_REPO }} ${{ secrets.WF_NAME }} -r main -f environment=${ENVIRONMENT} -f version=${VERSION}
env:
GITHUB_TOKEN: ${{secrets.GH_API_TOKEN}}
ENVIRONMENT: ${{ github.event.inputs.environment }}
VERSION: ${{ github.event.inputs.version }}
================================================
FILE: .github/workflows/env-release-synapse.yml
================================================
name: Release to Environment Synapse
on:
workflow_dispatch:
inputs:
environment:
description: 'Environment to Deploy'
required: true
type: choice
options:
- beta
- prod
version:
description: 'Version to be Published'
required: true
type: string
jobs:
env-release:
runs-on: ubuntu-latest
steps:
- name: Docker Login
uses: docker/login-action@v1.13.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
logout: true
- name: Setup Environment
run: |
echo "BOTNAME=Test-at-Scale Synapse Promoted: Version ${ENVIRONMENT} to ${VERSION}" >> $GITHUB_ENV
if [ ${ENVIRONMENT} == "prod" ] ; then
echo "IMAGE_TAG=latest" >> $GITHUB_ENV
else
echo "IMAGE_TAG=${ENVIRONMENT}" >> $GITHUB_ENV
fi
env:
ENVIRONMENT: ${{ github.event.inputs.environment }}
VERSION: ${{ github.event.inputs.version }}
- name: Promote Docker Image
run: |
docker pull lambdatest/synapse:${VERSION}
docker tag lambdatest/synapse:${VERSION} lambdatest/synapse:${{ env.IMAGE_TAG }}
docker push lambdatest/synapse:${{ env.IMAGE_TAG }}
env:
ENVIRONMENT: ${{ github.event.inputs.environment }}
VERSION: ${{ github.event.inputs.version }}
================================================
FILE: .github/workflows/premerge.yml
================================================
name: CI
on:
pull_request:
branches:
- main
jobs:
Linting:
name: Golang CI - Linting
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.17
- name: Checkout code
uses: actions/checkout@v2
- name: Run golangci-lint
uses: golangci/golangci-lint-action@v2.5.2
with:
version: latest
# skip cache because of flaky behaviors
skip-build-cache: true
skip-pkg-cache: true
skip-go-installation: true
only-new-issues: true
args: --skip-dirs=pkg/docs --timeout=3m
Unit_Test_Cases:
name: Unit Test Cases
runs-on: ubuntu-latest
needs: [ Linting ]
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.17
- name: Checkout code
uses: actions/checkout@v2
- name: Unit Test Cases
env:
ENV: "dev"
run: go test ./... -parallel 4
Performance_Test_Cases:
name: Performance Test Cases
runs-on: ubuntu-latest
needs: [ Linting ]
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.17
- name: Checkout code
uses: actions/checkout@v2
- name: Performance Test Cases
env:
ENV: "dev"
run: go test ./... -parallel 4 -bench=. -benchmem
Test_Coverage:
name: Test Coverage
runs-on: ubuntu-latest
needs: [ Unit_Test_Cases, Performance_Test_Cases ]
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.17
- name: Checkout code
uses: actions/checkout@v2
- name: Test Code Coverage
env:
ENV: "dev"
run: |
go test -parallel 4 -coverpkg=./... -coverprofile=profile.cov ./...
go tool cover -func profile.cov
Go_Report_Card:
name: Go Report Card
runs-on: ubuntu-latest
needs: [ Unit_Test_Cases, Performance_Test_Cases ]
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.17
- name: Checkout code
uses: actions/checkout@v2
- name: Run Go Report Card
run: |
issues_threshold=6
gofmt_score_threshold=100
go_vet_score_threshold=100
gocyclo_score_threshold=93
git clone https://github.com/gojp/goreportcard.git
cd goreportcard
make install
go install ./cmd/goreportcard-cli
cd ..
rm -rf goreportcard
goreportcard-cli | tee reportcard.txt
files=$(cat reportcard.txt| grep 'Files ' | awk '{print $3}' | tr -d \%)
issues=$(cat reportcard.txt| grep 'Issues ' | awk '{print $3}' | tr -d \%)
gofmt_score=$(cat reportcard.txt| grep 'gofmt ' | awk '{print $3}' | tr -d \%)
go_vet_score=$(cat reportcard.txt| grep 'go_vet ' | awk '{print $3}' | tr -d \%)
gocyclo_score=$(cat reportcard.txt| grep 'gocyclo ' | awk '{print $3}' | tr -d \%)
rm reportcard.txt
failed_checks=0
failure_reason=""
if [[ $issues -gt $issues_threshold ]]; then
failure_reason="${failure_reason}\nIssues: $issues. Threshold was: $issues_threshold."
((failed_checks+=1))
fi
if [[ $gofmt_score -lt $gofmt_score_threshold ]]; then
failure_reason="${failure_reason}\ngo-fmt score: $gofmt_score. Threshold was: $gofmt_score_threshold."
((failed_checks+=1))
fi
if [[ $go_vet_score -lt $go_vet_score_threshold ]]; then
failure_reason="${failure_reason}\ngo-vet score: $go_vet_score. Threshold was: $go_vet_score_threshold."
((failed_checks+=1))
fi
if [[ $gocyclo_score -lt $gocyclo_score_threshold ]]; then
failure_reason="${failure_reason}\ngo-cyclo score: $gocyclo_score. Threshold was: $gocyclo_score_threshold."
((failed_checks+=1))
fi
if [[ $failed_checks -gt 0 ]]; then
goreportcard-cli -v
printf "\n\n\n${failure_reason}\nFrom the above output, filter out issues in your touched files and fix them."
exit 1
else
exit 0
fi
================================================
FILE: .github/workflows/pull_request_lint.yml
================================================
name: Pull Request Lint
on:
pull_request:
types: ['opened', 'edited', 'reopened', 'synchronize', 'labeled', 'unlabeled']
jobs:
label-checker:
name: pr label check
runs-on: ubuntu-latest
steps:
- name: PR Label Check
uses: yashhy/pr-label-check-and-comment-action@master
with:
required_labels: 'release:minor, release:major, release:patch'
GITHUB_TOKEN: '${{secrets.GITHUB_TOKEN}}'
================================================
FILE: .github/workflows/release-patch-wf.yml
================================================
# This workflow will release a new patch version of nucleus and synapse
name: Release Patch Version
on:
workflow_dispatch:
jobs:
Release:
runs-on: ubuntu-latest
steps:
- name: Retrieving Release Type
run: |
echo "RELEASE_TYPE=patch" >> $GITHUB_ENV
echo "Releasing: ${release_type}"
- name: Inject slug/short variables
uses: rlespinasse/github-slug-action@v3.x
- name: Checkout
uses: actions/checkout@v2.4.0
- name: Bump version and push tag
id: tag_version
uses: mathieudutour/github-tag-action@v6.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
default_bump: ${{ env.RELEASE_TYPE }}
- name: Build Cloud Runners
run: |
gh workflow run -R ${{ secrets.WF_REPO }} ${{ secrets.WF_NAME }} -r main -f environment=dev -f version=${{ steps.tag_version.outputs.new_tag }}
env:
GITHUB_TOKEN: ${{secrets.GH_API_TOKEN}}
- name: Setup Environment
run: |
echo "BOTNAME=Test-at-Scale Deployment Status: Version ${{ steps.tag_version.outputs.new_tag }} to dev" >> $GITHUB_ENV
- name: Setup Docker Image Tags
run: |
echo "NUCLEUS_TAGS=lambdatest/nucleus:dev-base","lambdatest/nucleus:${{ steps.tag_version.outputs.new_tag }}-base" >> $GITHUB_ENV
echo "SYNAPSE_TAGS=lambdatest/synapse:dev","lambdatest/synapse:${{ steps.tag_version.outputs.new_tag }}" >> $GITHUB_ENV
- name: Docker Login
uses: docker/login-action@v1.13.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
logout: true
- name: Build and push Nucleus images
uses: docker/build-push-action@v2.9.0
with:
context: .
tags: ${{ env.NUCLEUS_TAGS }}
file: build/nucleus/Dockerfile
push: true
build-args: |
VERSION=${{ steps.tag_version.outputs.new_tag }}
- name: Build and push Synapse images
uses: docker/build-push-action@v2.9.0
with:
context: .
tags: ${{ env.SYNAPSE_TAGS }}
file: build/synapse/Dockerfile
push: true
build-args: |
VERSION=${{ steps.tag_version.outputs.new_tag }}
================================================
FILE: .github/workflows/release.yml
================================================
name: Release on Dev
on:
push:
branches:
- main
jobs:
Release:
runs-on: ubuntu-latest
steps:
- name: Check Patch Label
id: check_pr_labels_patch
uses: shioyang/check-pr-labels-on-push-action@v1.0.3
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
labels: '["release:patch"]'
- name: Check Minor Label
id: check_pr_labels_minor
uses: shioyang/check-pr-labels-on-push-action@v1.0.3
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
labels: '["release:minor"]'
- name: Check Major Label
id: check_pr_labels_major
uses: shioyang/check-pr-labels-on-push-action@v1.0.3
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
labels: '["release:major"]'
- name: Release Type
run: |
if [ ${MAJOR} == "true" ] ; then
echo "RELEASE_TYPE=major" >> $GITHUB_ENV
elif [ ${MINOR} == "true" ] ; then
echo "RELEASE_TYPE=minor" >> $GITHUB_ENV
elif [ ${PATCH} == "true" ] ; then
echo "RELEASE_TYPE=patch" >> $GITHUB_ENV
else
echo "RELEASE_TYPE=none" >> $GITHUB_ENV
fi
env:
PATCH: ${{ steps.check_pr_labels_patch.outputs.result }}
MINOR: ${{ steps.check_pr_labels_minor.outputs.result }}
MAJOR: ${{ steps.check_pr_labels_major.outputs.result }}
- name: Testing Release Type
if: env.RELEASE_TYPE == 'none'
uses: actions/github-script@v3
with:
script: |
core.setFailed('Release labels were not present in the PR!')
- name: Inject slug/short variables
uses: rlespinasse/github-slug-action@v3.x
- name: Checkout
uses: actions/checkout@v2.4.0
- name: Bump version and push tag
id: tag_version
uses: mathieudutour/github-tag-action@v6.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
default_bump: ${{ env.RELEASE_TYPE }}
- name: Creating Github Release
uses: ncipollo/release-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
draft: false
generateReleaseNotes: true
prerelease: false
tag: ${{ steps.tag_version.outputs.new_tag }}
name: Release ${{ steps.tag_version.outputs.new_tag }}
body: ${{ steps.changelog.outputs.changelog }}
- name: Build Cloud Runners
run: |
gh workflow run -R ${{ secrets.WF_REPO }} ${{ secrets.WF_NAME }} -r main -f environment=dev -f version=${{ steps.tag_version.outputs.new_tag }}
env:
GITHUB_TOKEN: ${{secrets.GH_API_TOKEN}}
- name: Setup Environment
run: |
echo "BOTNAME=Test-at-Scale Deployment Status: Version ${{ steps.tag_version.outputs.new_tag }} to dev" >> $GITHUB_ENV
- name: Setup Docker Image Tags
run: |
echo "NUCLEUS_TAGS=lambdatest/nucleus:dev-base","lambdatest/nucleus:${{ steps.tag_version.outputs.new_tag }}-base" >> $GITHUB_ENV
echo "SYNAPSE_TAGS=lambdatest/synapse:dev","lambdatest/synapse:${{ steps.tag_version.outputs.new_tag }}" >> $GITHUB_ENV
- name: Docker Login
uses: docker/login-action@v1.13.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
logout: true
- name: Build and push Nucleus images
uses: docker/build-push-action@v2.9.0
with:
context: .
tags: ${{ env.NUCLEUS_TAGS }}
file: build/nucleus/Dockerfile
push: true
build-args: |
VERSION=${{ steps.tag_version.outputs.new_tag }}
- name: Build and push Synapse images
uses: docker/build-push-action@v2.9.0
with:
context: .
tags: ${{ env.SYNAPSE_TAGS }}
file: build/synapse/Dockerfile
push: true
build-args: |
VERSION=${{ steps.tag_version.outputs.new_tag }}
================================================
FILE: .github/workflows/stale.yml
================================================
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '30 1 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v3
with:
stale-issue-message: 'This issue is stale because it has been open for 60 days with no activity.'
stale-pr-message: 'This PR is stale because it has been open for 60 days with no activity.'
days-before-close: 1
================================================
FILE: .gitignore
================================================
# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig
# Created by https://www.gitignore.io/api/macos,visualstudiocode,go
# Edit at https://www.gitignore.io/?templates=macos,visualstudiocode,go
### Go ###
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Ignore all patch files
*.patch
### Go Patch ###
/vendor/
/Godeps/
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
### VisualStudioCode Patch ###
# Ignore all local history of files
.history
# End of https://www.gitignore.io/api/macos,visualstudiocode,go
# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option)
builds
# ignore raven config files
.mould*
# ignore log file
mould.log
.ansible/ansible.cfg
.env
.synapse.json
logs
================================================
FILE: .golangci.yml
================================================
# Uncomment following lines after fixing linting issues in test files
linters-settings:
depguard:
list-type: blacklist
funlen:
lines: 100
statements: 50
gci:
local-prefixes: github.com/golangci/golangci-lint
goconst:
min-len: 2
min-occurrences: 2
gocritic:
enabled-tags:
- diagnostic
- experimental
- opinionated
- performance
- style
disabled-checks:
- dupImport # https://github.com/go-critic/go-critic/issues/845
- ifElseChain
- octalLiteral
- whyNoLint
- wrapperFunc
gocyclo:
min-complexity: 15
goimports:
local-prefixes: github.com/golangci/golangci-lint
gomnd:
settings:
mnd:
# don't include the "operation" and "assign"
checks:
- argument
- case
- condition
- return
govet:
check-shadowing: true
settings:
printf:
funcs:
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf
lll:
line-length: 140
maligned:
suggest-new: true
misspell:
locale: US
nolintlint:
allow-leading-space: true # don't require machine-readable nolint directives (i.e. with no leading space)
allow-unused: false # report any unused nolint directives
require-explanation: false # don't require an explanation for nolint directives
require-specific: false # don't require nolint directives to be specific about which linter is being skipped
linters:
disable-all: true
enable:
- bodyclose
- deadcode
- depguard
- dogsled
- dupl
- errcheck
- exportloopref
- exhaustive
- funlen
- gochecknoinits
- goconst
- gocritic
- gocyclo
- gofmt
- goimports
- gomnd
- goprintffuncname
- gosec
- gosimple
- govet
- ineffassign
- lll
- misspell
- nakedret
- noctx
- nolintlint
- rowserrcheck
- staticcheck
- structcheck
- stylecheck
- typecheck
- unconvert
- unparam
- unused
- varcheck
- whitespace
# don't enable:
# - asciicheck
# - scopelint
# - gochecknoglobals
# - gocognit
# - godot
# - godox
# - goerr113
# - interfacer
# - maligned
# - nestif
# - prealloc
# - testpackage
# - revive
# - wsl
issues:
# Excluding configuration per-path, per-linter, per-text and per-source
exclude-rules:
- path: _test\.go
linters:
- gomnd
- path: pkg/golinters/errcheck.go
text: "SA1019: errCfg.Exclude is deprecated: use ExcludeFunctions instead"
- path: pkg/commands/run.go
text: "SA1019: lsc.Errcheck.Exclude is deprecated: use ExcludeFunctions instead"
run:
timeout: 2m
skip-dirs:
- test/testdata_etc
- internal/cache
- internal/renameio
- internal/robustio
- pkg/docs
================================================
FILE: .sample.synapse.json
================================================
{
"Name": "my-synapse-1",
"LogConfig": {
"EnableConsole": true,
"ConsoleJSONFormat": true,
"Consolelevel": "debug"
},
"Lambdatest": {
"SecretKey": "add-your-secret-key-here"
},
"Git": {
"Token": "add-your-git-token-here",
"TokenType": "Bearer"
},
"ContainerRegistry": {
"PullPolicy": "always",
"Mode": "public"
},
"RepoSecrets": {
"synapse": {
"SAMPLE_SECRET_KEY": "sample_secret_value"
}
}
}
================================================
FILE: .vscode/settings.json
================================================
{
"go.lintTool": "golangci-lint",
"go.lintFlags": [
"--fast"
],
"go.testTimeout": "90s"
}
================================================
FILE: CHANGELOG.md
================================================
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders of this open-source project pledge
to make participation in our community and contribution to our project an
inclusive experience for everyone, regardless of age, body size, visible or
invisible disability, ethnicity, gender identity, and expression, sexual identity
and orientation, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, or religion.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people.
* Being respectful of differing opinions, viewpoints, and experiences.
* Giving and gracefully accepting constructive feedback.
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience.
* Focusing on what is best not just for us as individuals, but for the overall
community.
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
hello.tas@lambdatest.com
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Test-at-scale
Thank you for your interest in Test-at-scale and for taking the time to contribute to this project. If you feel insecure about how to start contributing, feel free to ask us on our [Discord Server](https://discord.gg/Wyf8srhf6K) in the #contribute channel.
## **Code of conduct**
Read our [Code of Conduct](CODE_OF_CONDUCT.md) before contributing.
## **How can I contribute?**
There are many ways in which you can contribute to Test-at-scale.
#### 👥 Join the community
  Join our [Discord server](https://discord.gg/Wyf8srhf6K), help others use Test-at-scale for their test automation requirements.
#### 🗣️ Give a talk about Test-at-scale
  You can talk about Test-at-scale in online/offline meetups. Drop a line to [hello.tas@lambdatest.com](mailto:hello.tas@lambdatest.com) ahead of time and we'll send you some swag. 👕
#### 🧩 Build an Add-on
  Enhance Test-at-scale’s capabilities by building add-ons to solve unique problems.
#### 🐞 Report a bug
  Report all issues through GitHub Issues and provide as much information as you can.
#### 🛠 Create a feature request
  We welcome all feature requests, whether for new features or enhancements to existing features. File your feature request through GitHub Issues.
#### 📝 Improve the documentation
  Suggest improvements to our documentation using the [Documentation Improvement](https://github.com/LambdaTest/test-at-scale/issues/new) template. Test-at-scale docs are published on [here](https://www.lambdatest.com/support/docs/getting-started-with-tas/)
#### 📚 Contribute to Tutorials
  You can help by suggesting improvements to our tutorials using the [Tutorials Improvement](https://github.com/LambdaTest/test-at-scale/issues/new) template or create a new tutorial.
#### ⚙️ Write code to fix a Bug / new Feature Request
  We welcome contributions that help make Test-at-scale bug-free & improve the test automation experience for our users. You can also find issues tagged [Good First Issues](https://github.com/LambdaTest/test-at-scale/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22"). Check out the below sections to begin.
 
## **Writing Code**
All submissions, including submissions by project members, require review. Before raising a pull request, ensure you have raised a corresponding issue and discussed a possible solution with a maintainer. This gives your pull request the highest chance of getting merged quickly. Join our [Discord Server](https://discord.gg/Wyf8srhf6K) if you need any help.
### First-time contributors
We appreciate first-time contributors and we are happy to assist you in getting started. In case of questions, just [reach out to us!](https://discord.gg/Wyf8srhf6K)
You find all issues suitable for first-time contributors [here.](https://github.com/LambdaTest/test-at-scale/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)
### Repo overview
[LambdaTest/test-at-scale](https://github.com/LambdaTest/test-at-scale/) consists of 2 components:
- **Synapse:** is the agent responsible for fetching jobs from Test at Scale servers to execute them on the self hosted environment (your laptop or your server farm). Synapse coordinates with nucleus (test runner) and TAS cloud to execute tests and push out test details such as test name, test suite, execution logs, execution metrics.
- **Test Runners:** component is the driving agent of the container executed to run the actions received by synapse. All actions will be executed on Linux containers and itself manages the lifecycle of the container. It provides functionalities such as logging, metric collections, etc. It primarily conducts two primary stages viz. test discovery and test execution. Both of these stage are accomplished by using plugins for language and framework to make sure nucleus is not tightly coupled with specific languages.
<details>
<summary>Read More</summary>
We've engineered the platform such that you can setup the test-runners anywhere, from your local workstation to any cloud (AWS, Azure, GCP etc), as per your convenience.
<p align="center">
<img loading="lazy" src={require('https://www.lambdatest.com/support/assets/images/synapse-tas-interaction-a70a50f02b2e6e99491777ce636538f4.png').default} alt="Synapse Architecture" width="1340" height="617" className="doc_img"/>
</p>
When you configure TAS to run in a self-hosted environment, all the test execution jobs are executed inside your environment. Your code stays within your setup environment. To provide you with test-insights on the TAS portal we store information only related to tests like name of testFile, testCase, testSuite and execution logs. At no point, we collect business logic of your code.
Here is a sample flow to understand how it works:
- After Configure TAS self-hosted mode and integrating your repositories into TAS platform.
- Whenever you make a commit, raise a PR or merge a PR, the TAS platform receives a webhook event from your git provider.
- This webhook event is simply sent to your self-hosted environment to initate jobs for test execution.
- The Test-at-scale binary running on your self hosted enviroment spawns containers to execute those jobs.
- Basic test metadata is sent to the TAS server to provide you with test insights and other relevant statistics over the TAS dashboard.
- Your code or business logic never leaves your setup environment.
- As your workload increases you can add more servers running Test-at-scale binary, which will distribute the load amongst them automatically.
- Routing: TAS platform will send the test execution jobs to the connected self hosted environments which are online and have enough resources to run the job.
- If the resources are insufficient or fully occupied, the jobs will remain queued on for 2.5 hour and keep checking for resource availability every 30 seconds.
- If TAS platform is unable to find any connected self-hosted binary which can execute the job, it will be marked as failed.
</details>
### Set up your branch to write code
We use [Github Flow](https://guides.github.com/introduction/flow/index.html), so all code changes happen through pull requests. [Learn more.](https://blog.scottlowe.org/2015/01/27/using-fork-branch-git-workflow/)
1. Please make sure there is an issue associated with the work that you're doing. If it doesn’t exist, [create an issue.](https://github.com/LambdaTest/test-at-scale/issues)
2. If you're working on an issue, please comment that you are doing so to prevent duplicate work by others also.
3. Fork the repo and create a new branch from the `dev` branch.
4. Please name the branch as <span style="color:grey">issue-[issue-number]-[issue-name(optional)]</span> or <span style="color:grey">feature-[feature-number]–[feature-name(optional)]</span>. For example, if you are fixing Issue #205 name your branch as <span style="color:grey">issue-205 or issue-205-selectbox-handling-changes</span>
5. Squash your commits and refer to the issue using `Fix #<issue-no>` in the commit message, at the start.
6. Rebase `dev` with your branch and push your changes.
7. Raise a pull request against the staging branch of the main repository.
## **Committing code**
The repository contains two important (protected) branches.
* main contains the code that is tested and released.
* dev contains recent developments under testing. This branch is set as the default branch, and all pull requests should be made against this branch.
Pull requests should be made against the <span style="color:grey">dev</span> branch. <span style="color:grey">staging</span> contains all of the new features and fixes that are under testing and ready to go out in the next release.
#### **Commit & Create Pull Requests**
1. Please make sure there is an issue associated with the work that you're doing. If it doesn’t exist, [create an issue](https://github.com/LambdaTest/test-at-scale/issues).
2. Squash your commits and refer to the issue using `Fix #<issue-no>` in the commit message, at the start.
3. Rebase `dev` with your branch and push your changes.
4. Once you are confident in your code changes, create a pull request in your fork to the `dev` branch in the LambdaTest/test-at-scale base repository.
5. Link the issue of the base repository in your Pull request description. [Guide](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
6. Fill out the [Pull Request Template](./.github/pull_request_template.md) completely within the body of the PR. If you feel some areas are not relevant add `N/A` but don’t delete those sections.
#### **Commit messages**
- The first line should be a summary of the changes, not exceeding 50
characters, followed by an optional body that has more details about the
changes. Refer to [this link](https://github.com/erlang/otp/wiki/writing-good-commit-messages)
for more information on writing good commit messages.
- Don't add a period/dot (.) at the end of the summary line.
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2021 LambdaTest Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: Makefile
================================================
NUCLEUS_DOCKER_FILE ?= ./build/nucleus/Dockerfile
NUCLEUS_IMAGE_NAME ?= lambdatest/nucleus:latest
SYNAPSE_DOCKER_FILE ?= ./build/synapse/Dockerfile
SYNAPSE_IMAGE_NAME ?= lambdatest/synapse:latest
REV_LIST ?= $(shell git rev-list --tags --max-count=1)
VERSION ?= $(shell git describe --tags ${REV_LIST})
usage: ## Show this help
@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/:.*##\s*/##/g' | awk -F'##' '{ printf "%-25s -> %s\n", $$1, $$2 }'
lint: ## Runs linting
golangci-lint run
build-nucleus-image: ## Builds nucleus docker image
docker build --build-arg VERSION=${VERSION}-dev -t ${NUCLEUS_IMAGE_NAME} --file $(NUCLEUS_DOCKER_FILE) .
build-nucleus-bin: ## Builds nucleus binary
bash build/nucleus/build.sh
build-synapse-image: ## Builds synapse docker image
docker build --build-arg VERSION=${VERSION}-dev -t ${SYNAPSE_IMAGE_NAME} --file $(SYNAPSE_DOCKER_FILE) .
build-synapse-bin: ## Builds synapse binary
bash build/synapse/build.sh
install-mockery-mac:
brew install mockery
install-mockery-linux:
apt update && apt install -y mockery
gen-mock-files:
mockery --dir=./pkg --all
================================================
FILE: README.md
================================================
<p align="center">
<img src="https://www.lambdatest.com/blog/wp-content/uploads/2020/08/LambdaTest-320-180.png" />
</p>
<h1 align="center">Test At Scale</h1>

<p align="center">
<b>Test Smarter, Release Faster with test-at-scale.</b>
</p>
<p align="center">
<a href="https://github.com/LambdaTest/test-at-scale/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache%20License%202.0.-blue" /></a>
<a href="https://github.com/LambdaTest/test-at-scale/blob/main/CONTRIBUTING.md"><img src="https://img.shields.io/badge/contributions-welcome-brightgreen?logo=github" /></a>
<a href="#build"><img src="https://github.com/lambdatest/test-at-scale/actions/workflows/main.yml/badge.svg" /></a>
<a href="#lint"><img src="https://github.com/lambdatest/test-at-scale/actions/workflows/golangci-lint.yml/badge.svg" /></a>
<a href="#stale"><img src="https://github.com/lambdatest/test-at-scale/actions/workflows/stale.yml/badge.svg" /></a>
<a href="https://discord.gg/Wyf8srhf6K"><img src="https://img.shields.io/badge/Discord-5865F2" /></a>
</p>
## Test at scale - TAS
TAS helps you accelerate your testing, shorten job times and get faster feedback on code changes, manage flaky tests and keep master green at all times.
<br/>
To learn more about TAS features and capabilities, see our [product page](https://www.lambdatest.com/test-at-scale).
## Features
- Smart test selection to run only the subset of tests which get impacted by a commit ⚡
- Smart auto grouping of test to evenly distribute test execution across multiple containers based on previous execution times
- Deep insights about test runs and execution metrics
- Support status checks for pull requests
- Advanced analytics to surface test performance and quality data
- YAML driven declarative workflow management
- Natively integrates with Github and Gitlab
- Flexible workflow to run pre-merge and post-merge tests
- Allows blocking and unblocking tests directly from the UI or YAML directive. No more WIP commits!
- Support for customizing testing environment using raw commands in pre and poststeps
- Supports Javascript monorepos
- Smart depdency caching to speedup subsequent test runs
- Easily customizable to support all major language and frameworks
- Available as [hosted solution](https://lambdatest.com/test-at-scale) as well as self-hosted opensource runner
- [Upcoming] Smart flaky test management 🪄
## Table of contents
- 🚀 [Getting Started](#getting-started)
- 💡 [Tutorials](#tutorials)
- 💖 [Contribute](#contribute)
- 📖 [Docs](https://www.lambdatest.com/support/docs/tas-overview)
## Getting Started
### Step 1 - Setting up a New Account
In order to create an account, visit [TAS Login Page](https://tas.lambdatest.com/login/). (Or [TAS Home Page](https://tas.lambdatest.com/))
- Login using a suitable git provider and select your organization you want to continue with.
- Tell us your specialization, team size.

- Select **TAS Self Hosted** and click on Proceed.
- You will find your **LambdaTest Secret Key** on this page which will be required in the next steps.

<br>
### Step 2 - Creating a configuration file for self hosted setup
Before installation we need to create a file that will be used for configuring test-at-scale.
- Open any `Terminal` of your choice.
- Move to your desired directory or you can create a new directory and move to it using the following command.
- Download our sample configuration file using the given command.
```bash
mkdir ~/test-at-scale
cd ~/test-at-scale
curl https://raw.githubusercontent.com/LambdaTest/test-at-scale/main/.sample.synapse.json -o .synapse.json
```
- Open the downloaded `.synapse.json` configuration file in any editor of your choice such as `vi`, `nano`, `code`, etc.
> **NOTE**: `.synapse.json` file is hidden by default. You can list it using `ls -la` command.
- You will need to add the following in this file:
- 1- **LambdaTest Secret Key**, that you got at the end of **Step 1**.
- 2- **Git Token**, that would be required to clone the repositories after Step 3. Generating [GitHub](https://www.lambdatest.com/support/docs/tas-how-to-guides-gh-token), [GitLab](https://www.lambdatest.com/support/docs/tas-how-to-guides-gl-token) personal access token.
- This file will also be used to store certain other parameters such as **Repository Secrets** (Optional), **Container Registry** (Optional) etc that might be required in configuring test-at-scale on your local/self-hosted environment. You can learn more about the configuration options [here](https://www.lambdatest.com/support/docs/tas-self-hosted-configuration#parameters).
<br>
### Step 3 - Installation
#### Installation on Docker
##### Prerequisites
- [Docker](https://docs.docker.com/get-docker/) and [Docker-Compose](https://docs.docker.com/compose/install/) (Recommended)
##### Docker Compose
- Run the docker application.
```bash
docker info --format "CPU: {{.NCPU}}, RAM: {{.MemTotal}}"
```
- Execute the above command to ensure that resources usable by Docker are atleast `CPU: 2, RAM: 4294967296`.
> **NOTE:** In order to run test-at-scale you require a minimum configuration of 2 CPU cores and 4 GiBs of RAM.
- The `.synapse.json` configuration file made in [Step 2](#step-2---creating-a-configuration-file-for-self-hosted-setup) will be required before executing the next command.
- Download and run the docker compose file using the following command.
```bash
cd ~/test-at-scale
curl -L https://raw.githubusercontent.com/LambdaTest/test-at-scale/main/docker-compose.yml -o docker-compose.yml
docker-compose up -d
```
> **NOTE:** This docker-compose file will pull the latest version of test-at-scale and install on your self hosted environment.
<details id="docker">
<summary>Installation without <b>Docker Compose</b></summary>
To get up and running quickly, you can use the following instructions to setup Test at Scale on Self hosted environment without docker-compose.
- The `.synapse.json` configuration file made in [Step 2](#step-2---creating-a-configuration-file-for-self-hosted-setup) will be required before executing the next command.
- Execute the following command to run Test at Scale docker container
```bash
cd ~/test-at-scale
docker network create --internal test-at-scale
docker run --name synapse --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /tmp/synapse:/tmp/synapse \
-v ${PWD}/.synapse.json:/home/synapse/.synapse.json \
-v /etc/machine-id:/etc/machine-id \
--network=test-at-scale \
lambdatest/synapse:latest
```
> **WARNING:** We strongly recommend to use docker-compose while Test at Scale on Self hosted environment.
</details>
<details>
<summary>Installation on <b> Local Machine </b> & <b> Supported Cloud Platforms </b> </summary>
- Local Machine - Setup using [docker](#docker).
- Setup on [Azure](https://www.lambdatest.com/support/docs/tas-self-hosted-installation#azure)
- Setup on [AWS](https://www.lambdatest.com/support/docs/tas-self-hosted-installation#aws)
- Setup on [GCP](https://www.lambdatest.com/support/docs/tas-self-hosted-installation#gcp)
</details>
- Once the installation is complete, go back to the TAS portal.
- Click the 'Test Connection' button to ensure `test-at-scale` self hosted environment is connected and ready.
- Hit `Proceed` to move forward to [Step 4](#step-4---importing-your-repo)
<br>
### Step 4 - Importing your repo
> **NOTE:** Currently we support Mocha, Jest and Jasmine for testing Javascript codebases.
- Click the Import button for the `JS` repository you want to integrate with TAS.
- Once Imported successfully, click on `Go to Project` to proceed further.
- You will be asked to setup a `post-merge` here. We recommend to proceed ahead with default settings. (You can change these later.)

<br>
### Step 5 - Configuring TAS yml
A `.tas.yml` file is a basic yaml configuration file that contains steps required for installing necessary dependencies and executing the tests present in your repository.
- In order to configure your imported repository, follow the steps given on the `.tas.yml` configuration page.
- You can also know more about `.tas.yml` configuration parameters [here](https://www.lambdatest.com/support/docs/tas-configuring-tas-yml).

- Placing the `.tas.yml` configuration file.
- Create a new file as **.tas.yml** at the root level of your repository .
- **Copy** the configuration from the TAS yml configuration page and **paste** them in the **.tas.yml** file you just created.
- **Commit and Push** the changes to your repo.

## **Language & Framework Support**
Currently we support Mocha, Jest and Jasmine for testing Javascript codebases.
## **Tutorials**
- [Setting up you first repo on TAS - Cloud](https://www.lambdatest.com/support/docs/tas-getting-started-integrating-your-first-repo/)
- [Setting up you first repo on TAS - Self Hosted](https://www.lambdatest.com/support/docs/tas-self-hosted-installation)
- Sample repos : [Mocha](https://github.com/LambdaTest/mocha-demos), [Jest](https://github.com/LambdaTest/jest-demos), [Jasmine](https://github.com/LambdaTest/jasmine-node-js-example).
- [How to configure a .tas.yml file](https://www.lambdatest.com/support/docs/tas-configuring-tas-yml)
## **Contribute**
We love our contributors! If you'd like to contribute anything from a bug fix to a feature update, start here:
- 📕 Read our Code of Conduct [Code of Conduct](https://github.com/LambdaTest/test-at-scale/blob/main/CODE_OF_CONDUCT.md).
- 📖 Know more about [test-at-scale](https://github.com/LambdaTest/test-at-scale/blob/main/CONTRIBUTING.md#repo-overview) and contributing from our [Contribution Guide](https://github.com/LambdaTest/test-at-scale/blob/main/CONTRIBUTING.md).
- 👾 Explore some good first issues [good first issues](https://github.com/LambdaTest/test-at-scale/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22).
### **Join our community**
Engage with Developers, SDETs, and Testers around the world.
- Get the latest product updates.
- Discuss testing philosophies and more.
Join the Test-at-scale Community on [Discord](https://discord.gg/Wyf8srhf6K). Click [here](https://discord.com/channels/940635450509504523/941297958954102846) if you are already an existing member.
### **Support & Troubleshooting**
The documentation and community will help you troubleshoot most issues. If you have encountered a bug, you can contact us using one of the following channels:
- Help yourself with our [Documentation](https://www.lambdatest.com/support/docs/tas-overview)📚, and [FAQs](https://www.lambdatest.com/support/docs/tas-faq-and-troubleshooting/).
- In case of Issue & bugs go to [GitHub issues](https://github.com/LambdaTest/test-at-scale/issues)🐛.
- For support & feedback join our [Discord](https://discord.gg/Wyf8srhf6K) or reach out to us on our [email](mailto:hello.tas@lambdatest.com)💬.
We are committed to fostering an open and welcoming environment in the community. Please see the Code of Conduct.
## **License**
TestAtScale is available under the [Apache License 2.0](https://github.com/LambdaTest/test-at-scale/blob/main/LICENSE). Use it wisely.
================================================
FILE: build/nucleus/Dockerfile
================================================
FROM golang:latest as builder
# create a working directory
COPY . /nucleus
WORKDIR /nucleus
# Build binary
RUN GOARCH=amd64 GOOS=linux go build -ldflags="-w -s" -o nucleus cmd/nucleus/*.go
# Uncomment only when build is highly stable. Compress binary.
# RUN strip --strip-unneeded ts
# RUN upx ts
# use a minimal alpine image
FROM nikolaik/python-nodejs:python3.10-nodejs16-slim
ARG VERSION
ENV VERSION=$VERSION
# Installing chromium so that all linux libs get automatically installed for running puppeteer tests
RUN apt update && apt install -y git zstd chromium curl unzip zip xmlstarlet build-essential
RUN curl -LJO https://go.dev/dl/go1.18.3.linux-amd64.tar.gz
RUN tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz
COPY bundle /usr/local/bin/bundle
RUN chmod +x /usr/local/bin/bundle
ENV SMART_BINARY=/usr/local/bin/bundle
# Install Custom Runners
RUN mkdir /custom-runners
RUN mkdir /tmp/custom-runners
WORKDIR /tmp/custom-runners
RUN npm init -y
RUN npm install -g pnpm
RUN npm i --global-style --legacy-peer-deps \
@lambdatest/test-at-scale-jasmine-runner@~0.3.0 \
@lambdatest/test-at-scale-mocha-runner@~0.3.0 \
@lambdatest/test-at-scale-jest-runner@~0.3.0
RUN npm i -g nyc@^15.1.0
RUN tar -zcf /custom-runners/custom-runners.tgz node_modules
RUN rm -rf /tmp/custom-runners
RUN mkdir /home/nucleus
RUN mkdir /home/nucleus/.nvm
ENV NVM_DIR=/home/nucleus/.nvm
ENV GOROOT /usr/local/go
ENV GOPATH /home/nucleus
ENV PATH /usr/local/go/bin:/home/nucleus/bin:$PATH
COPY ./build/nucleus/golang/server /home/nucleus
RUN chmod 744 /home/nucleus/server
# install nvm for nucleus user
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | /bin/bash
WORKDIR /home/nucleus
# copy the binary from builder
COPY --from=builder /nucleus/nucleus /usr/local/bin/
# run the binary
COPY ./build/nucleus/entrypoint.sh /
RUN apt update -y && apt upgrade -y
RUN curl -s https://get.sdkman.io | bash
RUN /bin/bash -c "source $HOME/.sdkman/bin/sdkman-init.sh;sdk install java 18.0.1-oracle"
ENV JAVA_HOME="/root/.sdkman/candidates/java/current"
ENV PATH=$JAVA_HOME:$PATH
ENV PATH=$JAVA_HOME/bin:$PATH
ARG MAVEN_VERSION=3.6.3
# Define a constant with the working directory
ARG USER_HOME_DIR="/root"
# Define the URL where maven can be downloaded from
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries
# Create the directories, download maven, validate the download, install it, remove downloaded file and set links
RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
&& echo "Downlaoding maven" \
&& curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
\
&& echo "Unziping maven" \
&& tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
\
&& echo "Cleaning and setting links" \
&& rm -f /tmp/apache-maven.tar.gz \
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
# Define environmental variables required by Maven, like Maven_Home directory and where the maven repo is located
ENV MAVEN_HOME /usr/share/maven
RUN mkdir -p /home/nucleus/.m2
#update settings.xml file for new maven local repo location
RUN xmlstarlet ed -O --inplace -N a='http://maven.apache.org/SETTINGS/1.0.0' -s /a:settings --type elem --name "localRepository" -v /home/nucleus/.m2/repository /usr/share/maven/conf/settings.xml
COPY ./build/nucleus/java/test-at-scale-java.jar /
RUN curl -o /home/nucleus/junit-platform-console-standalone-1.8.2.jar https://repo1.maven.org/maven2/org/junit/platform/junit-platform-console-standalone/1.8.2/junit-platform-console-standalone-1.8.2.jar
COPY ./build/nucleus/entrypoint.sh /
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
================================================
FILE: build/nucleus/build.sh
================================================
#!/usr/bin
# exit when any command fails
set -e
# keep track of the last executed command
trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
# echo an error message before exiting
trap 'echo "\"${last_command}\" command filed with exit code $?."' EXIT
echo 'Building binary'
go build -o nucleus ./cmd/nucleus/*.go
echo 'Binary successfully build by the name of `nucleus`'
================================================
FILE: build/nucleus/entrypoint.sh
================================================
#!/bin/sh
exec /usr/local/bin/nucleus "$@"
================================================
FILE: build/nucleus/golang/server
================================================
[File too large to display: 12.0 MB]
================================================
FILE: build/nucleus/java/test-at-scale-java.jar
================================================
================================================
FILE: build/synapse/Dockerfile
================================================
FROM golang:latest as builder
# create a working directory
COPY . /synapse
WORKDIR /synapse
# Build binary
RUN go build -o synapse cmd/synapse/*.go
# use a minimal alpine image
FROM docker:latest
ARG VERSION
ENV VERSION=$VERSION
# add ca-certificates in case you need them
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*
# Create a group and user
RUN addgroup -S synapse && adduser -S synapse -G synapse
# set working directory
WORKDIR /home/synapse
# copy the binary from builder
COPY --chown=synapse:synapse --from=builder /synapse/synapse .
COPY ./build/synapse/entrypoint.sh /
# run the binary
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
================================================
FILE: build/synapse/build.sh
================================================
#!/usr/bin
# exit when any command fails
set -e
# keep track of the last executed command
trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
# echo an error message before exiting
trap 'echo "\"${last_command}\" command filed with exit code $?."' EXIT
echo 'Building binary'
go build -o synapse ./cmd/synapse/*.go
echo 'Binary successfully build by the name of `synapse`'
================================================
FILE: build/synapse/entrypoint.sh
================================================
#!/bin/sh
exec -- /home/synapse/synapse "$@"
================================================
FILE: bundle
================================================
================================================
FILE: cmd/nucleus/bin.go
================================================
package main
// this is cmd/root_cmd.go
import (
"context"
"fmt"
"log"
"os"
"os/signal"
"path/filepath"
"strings"
"sync"
"time"
"github.com/LambdaTest/test-at-scale/config"
"github.com/LambdaTest/test-at-scale/pkg/api"
"github.com/LambdaTest/test-at-scale/pkg/azure"
"github.com/LambdaTest/test-at-scale/pkg/blocktestservice"
"github.com/LambdaTest/test-at-scale/pkg/cachemanager"
"github.com/LambdaTest/test-at-scale/pkg/command"
"github.com/LambdaTest/test-at-scale/pkg/core"
"github.com/LambdaTest/test-at-scale/pkg/diffmanager"
"github.com/LambdaTest/test-at-scale/pkg/driver"
"github.com/LambdaTest/test-at-scale/pkg/gitmanager"
"github.com/LambdaTest/test-at-scale/pkg/global"
"github.com/LambdaTest/test-at-scale/pkg/listsubmoduleservice"
"github.com/LambdaTest/test-at-scale/pkg/lumber"
"github.com/LambdaTest/test-at-scale/pkg/payloadmanager"
"github.com/LambdaTest/test-at-scale/pkg/requestutils"
"github.com/LambdaTest/test-at-scale/pkg/secret"
"github.com/LambdaTest/test-at-scale/pkg/server"
"github.com/LambdaTest/test-at-scale/pkg/service/coverage"
"github.com/LambdaTest/test-at-scale/pkg/service/teststats"
"github.com/LambdaTest/test-at-scale/pkg/tasconfigmanager"
"github.com/LambdaTest/test-at-scale/pkg/task"
"github.com/LambdaTest/test-at-scale/pkg/testdiscoveryservice"
"github.com/LambdaTest/test-at-scale/pkg/testexecutionservice"
"github.com/LambdaTest/test-at-scale/pkg/zstd"
"github.com/cenkalti/backoff/v4"
"github.com/spf13/cobra"
)
// RootCommand will setup and return the root command
func RootCommand() *cobra.Command {
rootCmd := cobra.Command{
Use: "nucleus",
Long: `nucleus is a coordinator binary used as entrypoint in tas containers`,
Version: global.NucleusBinaryVersion,
Run: run,
}
// define flags used for this command
AttachCLIFlags(&rootCmd)
return &rootCmd
}
func run(cmd *cobra.Command, args []string) {
// create a context that we can cancel
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// timeout in seconds
const gracefulTimeout = 5000 * time.Millisecond
// a WaitGroup for the goroutines to tell us they've stopped
wg := sync.WaitGroup{}
cfg, err := config.LoadNucleusConfig(cmd)
if err != nil {
fmt.Printf("[Error] Failed to load config: " + err.Error())
os.Exit(1)
}
// patch logconfig file location with root level log file location
if cfg.LogFile != "" {
cfg.LogConfig.FileLocation = filepath.Join(cfg.LogFile, "nucleus.log")
}
// You can also use logrus implementation
// by using lumber.InstanceLogrusLogger
logger, err := lumber.NewLogger(cfg.LogConfig, cfg.Verbose, lumber.InstanceZapLogger)
if err != nil {
log.Fatalf("Could not instantiate logger %s", err.Error())
}
logger.Debugf("Running on local: %t", cfg.LocalRunner)
if cfg.LocalRunner {
logger.Infof("Local runner detected , changing IP from: %s to: %s", global.NeuronHost, cfg.SynapseHost)
global.SetNeuronHost(strings.TrimSpace(cfg.SynapseHost))
logger.Infof("change neuron host to %s", global.NeuronHost)
} else {
global.SetNeuronHost(global.NeuronRemoteHost)
}
pl, err := core.NewPipeline(cfg, logger)
if err != nil {
logger.Errorf("Unable to create the pipeline: %+v\n", err)
logger.Errorf("Aborting ...")
os.Exit(1)
}
ts, err := teststats.New(cfg, logger)
if err != nil {
logger.Fatalf("failed to initialize test stats service: %v", err)
}
defaultRequests := requestutils.New(logger, global.DefaultAPITimeout, backoff.NewExponentialBackOff())
azureClient, err := azure.NewAzureBlobEnv(cfg, defaultRequests, logger)
if err != nil {
logger.Fatalf("failed to initialize azure blob: %v", err)
}
if err != nil && !cfg.LocalRunner {
logger.Fatalf("failed to initialize azure blob: %v", err)
}
// attach plugins to pipeline
pm := payloadmanager.NewPayloadManger(azureClient, logger, cfg, defaultRequests)
secretParser := secret.New(logger)
tcm := tasconfigmanager.NewTASConfigManager(logger)
execManager := command.NewExecutionManager(secretParser, azureClient, logger)
gm := gitmanager.NewGitManager(logger, execManager)
dm := diffmanager.NewDiffManager(cfg, logger)
tdResChan := make(chan core.DiscoveryResult)
tds := testdiscoveryservice.NewTestDiscoveryService(ctx, tdResChan, execManager, defaultRequests, logger)
tes := testexecutionservice.NewTestExecutionService(cfg, defaultRequests, execManager, azureClient, ts, logger)
tbs := blocktestservice.NewTestBlockTestService(cfg, defaultRequests, logger)
router := api.NewRouter(logger, ts, tdResChan)
t, err := task.New(defaultRequests, logger)
if err != nil {
logger.Fatalf("failed to initialize task: %v", err)
}
zstd, err := zstd.New(execManager, logger)
if err != nil {
logger.Fatalf("failed to initialize zstd compressor: %v", err)
}
cache, err := cachemanager.New(zstd, azureClient, logger)
if err != nil {
logger.Fatalf("failed to initialize cache manager: %v", err)
}
coverageService, err := coverage.New(execManager, azureClient, zstd, cfg, logger)
if err != nil {
logger.Fatalf("failed to initialize coverage service: %v", err)
}
listsubmodule := listsubmoduleservice.New(defaultRequests, logger)
builder := driver.Builder{
Logger: logger,
TestExecutionService: tes,
TestDiscoveryService: tds,
AzureClient: azureClient,
BlockTestService: tbs,
ExecutionManager: execManager,
TASConfigManager: tcm,
CacheStore: cache,
DiffManager: dm,
ListSubModuleService: listsubmodule,
}
pl.PayloadManager = pm
pl.TASConfigManager = tcm
pl.GitManager = gm
pl.DiffManager = dm
pl.TestDiscoveryService = tds
pl.BlockTestService = tbs
pl.TestExecutionService = tes
pl.ExecutionManager = execManager
pl.CoverageService = coverageService
pl.TestStats = ts
pl.Task = t
pl.CacheStore = cache
pl.SecretParser = secretParser
pl.Builder = &builder
logger.Infof("LambdaTest Nucleus version: %s", global.NucleusBinaryVersion)
wg.Add(1)
go func() {
defer cancel()
defer wg.Done()
// starting pipeline
pl.Start(ctx)
}()
wg.Add(1)
go func() {
defer cancel()
defer wg.Done()
server.ListenAndServe(ctx, router, cfg, logger)
}()
// listen for C-c
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
// create channel to mark status of waitgroup
// this is required to brutally kill application in case of
// timeout
done := make(chan struct{})
// asynchronously wait for all the go routines
go func() {
// and wait for all go routines
wg.Wait()
logger.Debugf("main: all goroutines have finished.")
close(done)
}()
// wait for signal channel
select {
case <-c:
{
logger.Debugf("main: received C-c - attempting graceful shutdown ....")
// tell the goroutines to stop
logger.Debugf("main: telling goroutines to stop")
cancel()
select {
case <-done:
logger.Debugf("Go routines exited within timeout")
case <-time.After(gracefulTimeout):
logger.Errorf("Graceful timeout exceeded. Brutally killing the application")
}
}
case <-done:
os.Exit(0)
}
}
================================================
FILE: cmd/nucleus/flags.go
================================================
package main
import (
"github.com/spf13/cobra"
)
//AttachCLIFlags attaches command line flags to command
func AttachCLIFlags(rootCmd *cobra.Command) error {
rootCmd.PersistentFlags().StringP("config", "c", "", "the config file to use")
rootCmd.PersistentFlags().StringP("port", "p", "", "Port for api server to run")
rootCmd.PersistentFlags().StringP("payloadAddress", "l", "", "Payload address")
rootCmd.PersistentFlags().String("subModule", "", "submodule of a repo")
rootCmd.PersistentFlags().BoolP("verbose", "", false, "Run in verbose mode")
rootCmd.PersistentFlags().BoolP("coverage", "", false, "Run coverage only mode")
rootCmd.PersistentFlags().BoolP("discover", "", false, "Run nucleus in test discovery mode")
rootCmd.PersistentFlags().BoolP("execute", "", false, "Run nucleus in test execution mode")
rootCmd.PersistentFlags().BoolP("flaky", "", false, "Run nucleus in flaky mode")
rootCmd.PersistentFlags().BoolP("collectStats", "", false, "Collect test execution metrics")
rootCmd.PersistentFlags().IntP("consecutiveRuns", "", 1, "The consecutive test execution runs")
rootCmd.PersistentFlags().StringP("env", "e", "prod", "Environment.")
rootCmd.PersistentFlags().String("taskID", "", "The unique ID for a task")
rootCmd.PersistentFlags().String("locators", "", "The test locators for a task")
rootCmd.PersistentFlags().String("locatorAddress", "", "The test locators address for a task")
rootCmd.PersistentFlags().String("buildID", "", "The unique ID for a build")
rootCmd.PersistentFlags().String("targetCommit", "", "The target commit for nucleus")
rootCmd.PersistentFlags().String("baseCommit", "", "The base commit for nucleus")
rootCmd.PersistentFlags().StringP("synapsehost", "", "", "Local Ip of proxy server.")
rootCmd.PersistentFlags().BoolP("local", "", false, "local mode")
return nil
}
================================================
FILE: cmd/nucleus/main.go
================================================
package main
import (
"log"
)
// Main function just executes root command `ts`
// this project structure is inspired from `cobra` package
func main() {
if err := RootCommand().Execute(); err != nil {
log.Fatal(err)
}
}
================================================
FILE: cmd/synapse/bin.go
================================================
package main
// this is cmd/root_cmd.go
import (
"context"
"fmt"
"log"
"os"
"os/signal"
"path/filepath"
"strconv"
"sync"
"time"
"github.com/LambdaTest/test-at-scale/config"
"github.com/LambdaTest/test-at-scale/pkg/cron"
"github.com/LambdaTest/test-at-scale/pkg/global"
"github.com/LambdaTest/test-at-scale/pkg/lumber"
"github.com/LambdaTest/test-at-scale/pkg/proxyserver"
"github.com/LambdaTest/test-at-scale/pkg/runner/docker"
"github.com/LambdaTest/test-at-scale/pkg/secrets"
synapsepkg "github.com/LambdaTest/test-at-scale/pkg/synapse"
"github.com/LambdaTest/test-at-scale/pkg/tasconfigdownloader"
"github.com/LambdaTest/test-at-scale/pkg/utils"
"github.com/joho/godotenv"
"github.com/spf13/cobra"
)
// RootCommand will setup and return the root command
func RootCommand() *cobra.Command {
rootCmd := cobra.Command{
Use: "synapse",
Long: `Synapse is an opensource runner for TAS`,
Version: global.SynapseBinaryVersion,
Run: run,
}
// define flags used for this command
if err := AttachCLIFlags(&rootCmd); err != nil {
fmt.Println("Error in attaching cli flags")
}
return &rootCmd
}
func run(cmd *cobra.Command, args []string) {
// create a context that we can cancel
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// set necessary os env
setEnv()
// a WaitGroup for the goroutines to tell us they've stopped
wg := sync.WaitGroup{}
// Load environment variables from .env if available
err := godotenv.Load()
if err != nil {
fmt.Printf("Warning: No .env file found\n")
}
cfg, err := config.LoadSynapseConfig(cmd)
if err != nil {
fmt.Printf("Failed to load config: %s", err.Error())
}
err = config.LoadRepoSecrets(cmd, cfg)
if err != nil {
fmt.Printf("Error loading repository secrets: %v", err)
}
// patch logconfig file location with root level log file location
if cfg.LogFile != "" {
cfg.LogConfig.FileLocation = filepath.Join(cfg.LogFile, "synapse.log")
}
// You can also use logrus implementation
// by using lumber.InstanceLogrusLogger
logger, err := lumber.NewLogger(cfg.LogConfig, cfg.Verbose, lumber.InstanceZapLogger)
if err != nil {
log.Fatalf("Could not instantiate logger %s", err.Error())
}
if err := config.ValidateCfg(cfg, logger); err != nil {
logger.Fatalf("Error loading synapse config: %v", err)
}
secretsManager := secrets.New(cfg, logger)
runner, err := docker.New(secretsManager, logger, cfg)
if err != nil {
logger.Fatalf("could not instantiate k8s runner %v", err)
}
tasConfigDownloader := tasconfigdownloader.New(logger)
synapse := synapsepkg.New(runner, logger, secretsManager, tasConfigDownloader)
proxyHandler, err := proxyserver.NewProxyHandler(logger)
if err != nil {
logger.Fatalf("Could not instantiate proxyhandler %v", err)
}
// setting up cron handler
wg.Add(1)
go cron.Setup(ctx, &wg, logger, runner)
// All attempts to connect to lambdatest server failed
connectionFailed := make(chan struct{})
wg.Add(1)
go synapse.InitiateConnection(ctx, &wg, connectionFailed)
wg.Add(1)
go func() {
defer cancel()
defer wg.Done()
if err := proxyserver.ListenAndServe(ctx, proxyHandler, cfg, logger); err != nil {
logger.Fatalf("Error starting proxy server: %v", err)
}
}()
// listen for C-cInterrupt
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
// create channel to mark status of waitgroup
// this is required to brutally kill application in case of
// timeout
done := make(chan struct{})
// asynchronously wait for all the go routines
go func() {
// and wait for all go routines
wg.Wait()
logger.Debugf("main: all goroutines have finished.")
close(done)
}()
// wait for signal channel
select {
case <-c:
{
logger.Debugf("main: received OS Interrupt signal, attempting graceful shutdown ....")
// tell the goroutines to stop
logger.Debugf("main: telling goroutines to stop")
cancel()
select {
case <-done:
logger.Debugf("Go routines exited within timeout")
case <-time.After(global.GracefulTimeout):
logger.Errorf("Graceful timeout exceeded. Brutally killing the application")
}
}
case <-connectionFailed:
{
logger.Debugf("main: all attempts to connect to lamdatest server failed ....")
// tell the goroutines to stop
logger.Debugf("main: telling goroutines to stop")
cancel()
select {
case <-done:
logger.Debugf("Go routines exited within timeout")
case <-time.After(global.GracefulTimeout):
logger.Errorf("Graceful timeout exceeded. Brutally killing the application")
}
os.Exit(0)
}
case <-done:
os.Exit(0)
}
}
func setEnv() {
os.Setenv(global.AutoRemoveEnv, strconv.FormatBool(global.AutoRemove))
os.Setenv(global.LocalEnv, strconv.FormatBool(global.Local))
os.Setenv(global.SynapseHostEnv, utils.GetOutboundIP())
os.Setenv(global.NetworkEnvName, global.NetworkName)
}
================================================
FILE: cmd/synapse/flags.go
================================================
package main
import (
"github.com/spf13/cobra"
)
//AttachCLIFlags attaches command line flags to command
func AttachCLIFlags(rootCmd *cobra.Command) error {
rootCmd.PersistentFlags().StringP("config", "c", "", "the config file to use")
rootCmd.PersistentFlags().BoolP("verbose", "", false, "should every proxy request be logged to stdout")
return nil
}
================================================
FILE: cmd/synapse/main.go
================================================
package main
import (
"log"
"github.com/LambdaTest/test-at-scale/pkg/global"
)
// Main function just executes root command `ts`
// this project structure is inspired from `cobra` package
func main() {
log.Printf("Starting synapse %s", global.SynapseBinaryVersion)
if err := RootCommand().Execute(); err != nil {
log.Fatal(err)
}
}
================================================
FILE: config/default.go
================================================
package config
import (
"github.com/LambdaTest/test-at-scale/pkg/global"
"github.com/spf13/viper"
)
func setNucleusDefaultConfig() {
viper.SetDefault("LogConfig.EnableConsole", true)
viper.SetDefault("LogConfig.ConsoleJSONFormat", false)
viper.SetDefault("LogConfig.ConsoleLevel", "debug")
viper.SetDefault("LogConfig.EnableFile", true)
viper.SetDefault("LogConfig.FileJSONFormat", true)
viper.SetDefault("LogConfig.FileLevel", "debug")
viper.SetDefault("LogConfig.FileLocation", global.HomeDir+"/nucleus.log")
viper.SetDefault("Env", "prod")
viper.SetDefault("Port", "9876")
viper.SetDefault("Verbose", false)
}
func setSynapseDefaultConfig() {
viper.SetDefault("LogConfig.EnableConsole", true)
viper.SetDefault("LogConfig.ConsoleJSONFormat", false)
viper.SetDefault("LogConfig.ConsoleLevel", "info")
viper.SetDefault("LogConfig.EnableFile", true)
viper.SetDefault("LogConfig.FileJSONFormat", true)
viper.SetDefault("LogConfig.FileLevel", "debug")
viper.SetDefault("LogConfig.FileLocation", "./mould.log")
viper.SetDefault("Env", "prod")
viper.SetDefault("Verbose", false)
}
================================================
FILE: config/loader.go
================================================
package config
import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"strings"
"github.com/LambdaTest/test-at-scale/pkg/lumber"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
// GlobalNucleusConfig stores the config instance for global use
var GlobalNucleusConfig *NucleusConfig
// GlobalSynapseConfig store the config instance for synapse global use
var GlobalSynapseConfig *SynapseConfig
type tempSecretReader struct {
RepoSecrets map[string]map[string]string `json:"RepoSecrets" yaml:"RepoSecrets"`
}
// LoadNucleusConfig loads config from command instance to predefined config variables
func LoadNucleusConfig(cmd *cobra.Command) (*NucleusConfig, error) {
err := viper.BindPFlags(cmd.Flags())
if err != nil {
return nil, err
}
// default viper configs
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
viper.AutomaticEnv()
// set default configs
setNucleusDefaultConfig()
if configFile, _ := cmd.Flags().GetString("config"); configFile != "" {
viper.SetConfigFile(configFile)
} else {
viper.SetConfigName(".nucleus")
viper.AddConfigPath("./")
viper.AddConfigPath("$HOME/.nucleus")
}
if err := viper.ReadInConfig(); err != nil {
fmt.Println("Warning: No configuration file found. Proceeding with defaults")
}
return populateNucleusConfig(new(NucleusConfig))
}
// LoadSynapseConfig loads config from command instance to predefined config variables
func LoadSynapseConfig(cmd *cobra.Command) (*SynapseConfig, error) {
err := viper.BindPFlags(cmd.Flags())
if err != nil {
return nil, err
}
// default viper configs
viper.SetEnvPrefix("SYN")
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
viper.AutomaticEnv()
// set default configs
setSynapseDefaultConfig()
if configFile, _ := cmd.Flags().GetString("config"); configFile != "" {
viper.SetConfigFile(configFile)
} else {
viper.SetConfigName(".synapse")
viper.AddConfigPath("./")
viper.AddConfigPath("$HOME/.synapse")
}
if err := viper.ReadInConfig(); err != nil {
fmt.Println("Warning: No configuration file found. Proceeding with defaults")
}
return populateSynapseConfig(new(SynapseConfig))
}
// LoadRepoSecrets loads repo secrets from configuration file
func LoadRepoSecrets(cmd *cobra.Command, synapseConfig *SynapseConfig) error {
if configFile, _ := cmd.Flags().GetString("config"); configFile != "" {
viper.SetConfigFile(configFile)
} else {
viper.SetConfigName(".synapse")
viper.AddConfigPath("./")
viper.AddConfigPath("$HOME/.synapse")
}
if err := viper.ReadInConfig(); err != nil {
fmt.Println("Warning: No configuration file found. Proceeding with defaults")
}
secretFile, err := ioutil.ReadFile(viper.GetViper().ConfigFileUsed())
if err != nil {
fmt.Printf("error in reading config file: %v\n", err)
}
var tempSecret tempSecretReader
if err := json.Unmarshal(secretFile, &tempSecret); err != nil {
fmt.Printf("error in umarshaling secrets: %v\n", err)
}
synapseConfig.RepoSecrets = tempSecret.RepoSecrets
return nil
}
// ValidateCfg checks the validity of the config
func ValidateCfg(cfg *SynapseConfig, logger lumber.Logger) error {
if cfg.Lambdatest.SecretKey == "" {
return errors.New("error finding lambdatest secretkey in configuration file")
}
if cfg.ContainerRegistry.Mode == "" {
return errors.New("error finding ContainerRegistry Mode in configuration file")
}
if cfg.RepoSecrets == nil {
logger.Debugf("no RepoSecrets found in configuration file.")
return nil
}
return nil
}
================================================
FILE: config/nucleusmodel.go
================================================
package config
import "github.com/LambdaTest/test-at-scale/pkg/lumber"
// Model definition for configuration
// NucleusConfig is the application's configuration
type NucleusConfig struct {
Config string
Port string
PayloadAddress string `json:"payloadAddress"`
CollectStats bool `json:"collectStats"`
ConsecutiveRuns int `json:"consecutiveRuns"`
LogFile string
LogConfig lumber.LoggingConfig
CoverageMode bool `json:"coverage"`
DiscoverMode bool `json:"discover"`
ExecuteMode bool `json:"execute"`
FlakyMode bool `json:"flaky"`
TaskID string `json:"taskID" env:"TASK_ID"`
BuildID string `json:"buildID" env:"BUILD_ID"`
Locators string `json:"locators"`
LocatorAddress string `json:"locatorAddress"`
Env string
Verbose bool
Azure Azure `env:"AZURE"`
LocalRunner bool `env:"local"`
SynapseHost string `env:"synapsehost"`
SubModule string `json:"subModule"`
}
// Azure providers the storage configuration.
type Azure struct {
ContainerName string `env:"CONTAINER_NAME"`
StorageAccountName string `env:"STORAGE_ACCOUNT"`
StorageAccessKey string `env:"STORAGE_ACCESS_KEY"`
}
================================================
FILE: config/parse.go
================================================
package config
import (
"errors"
"fmt"
"reflect"
"github.com/spf13/viper"
)
const tagPrefix = "viper"
// populateNucleusConfig is used to parse config read through viper
func populateNucleusConfig(config *NucleusConfig) (*NucleusConfig, error) {
err := recursivelySet(reflect.ValueOf(config), "")
if err != nil {
return nil, err
}
return config, nil
}
// populateSynapseConfig is used to parse config read through viper
func populateSynapseConfig(config *SynapseConfig) (*SynapseConfig, error) {
err := recursivelySet(reflect.ValueOf(config), "")
if err != nil {
return nil, err
}
return config, nil
}
// recursivelySet is used to recursively set conf read from
// files to golang structs. Since nested values are accessed using periods
// we need to recursively parse the values
func recursivelySet(val reflect.Value, prefix string) error {
if val.Kind() != reflect.Ptr {
return errors.New("WTF")
}
// dereference
val = reflect.Indirect(val)
if val.Kind() != reflect.Struct {
return errors.New("FML")
}
// grab the type for this instance
vType := reflect.TypeOf(val.Interface())
// go through child fields
for i := 0; i < val.NumField(); i++ {
thisField := val.Field(i)
thisType := vType.Field(i)
tags := getTags(thisType)
// try to fetch value for each key using multiple tags
for _, tag := range tags {
key := prefix + tag
switch thisField.Kind() {
case reflect.Struct:
if err := recursivelySet(thisField.Addr(), key+"."); err != nil {
return err
}
case reflect.Int:
fallthrough
case reflect.Int32:
fallthrough
case reflect.Int64:
// you can only set with an int64 -> int
configVal := int64(viper.GetInt(key))
// skip the update if tag is not set in viper
if viper.GetInt(key) == 0 && thisField.Int() != 0 {
continue
}
thisField.SetInt(configVal)
case reflect.String:
// skip the update if tag is not set in viper
if viper.GetString(key) == "" && thisField.String() != "" {
continue
}
thisField.SetString(viper.GetString(key))
case reflect.Bool:
// skip the update if tag is not set in viper
if !viper.GetBool(key) && thisField.Bool() {
continue
}
thisField.SetBool(viper.GetBool(key))
case reflect.Map:
continue
default:
return fmt.Errorf("unexpected type detected ~ aborting: %s", thisField.Kind())
}
}
}
return nil
}
func getTags(field reflect.StructField) []string {
// check if maybe we have a special magic tag
tag := field.Tag
values := []string{}
if tag != "" {
for _, prefix := range []string{tagPrefix, "yaml", "json", "env", "mapstructure"} {
if v := tag.Get(prefix); v != "" {
values = append(values, v)
}
}
return values
}
return []string{field.Name}
}
================================================
FILE: config/parse_test.go
================================================
package config
import (
"reflect"
"testing"
"github.com/spf13/viper"
"github.com/stretchr/testify/assert"
)
func TestSimpleValues(t *testing.T) {
c := struct {
Simple string `json:"simple"`
}{}
viper.SetDefault("simple", "i am a simple string")
assert.Nil(t, recursivelySet(reflect.ValueOf(&c), ""))
assert.Equal(t, "i am a simple string", c.Simple)
}
func TestNestedValues(t *testing.T) {
c := struct {
Simple string `json:"simple"`
Nested struct {
BoolVal bool `json:"bool"`
StringVal string `json:"string"`
NumberVal int `json:"number"`
} `json:"nested"`
}{}
viper.SetDefault("simple", "simple")
viper.SetDefault("nested.bool", true)
viper.SetDefault("nested.string", "i am a simple string")
viper.SetDefault("nested.number", 4)
assert.Nil(t, recursivelySet(reflect.ValueOf(&c), ""))
assert.Equal(t, "simple", c.Simple)
assert.Equal(t, 4, c.Nested.NumberVal)
assert.Equal(t, "i am a simple string", c.Nested.StringVal)
assert.Equal(t, true, c.Nested.BoolVal)
}
================================================
FILE: config/synapsemodel.go
================================================
package config
import "github.com/LambdaTest/test-at-scale/pkg/lumber"
// Model definition for configuration
// SynapseConfig the application's configuration
type SynapseConfig struct {
Name string
Config string
LogFile string
LogConfig lumber.LoggingConfig
Env string
Verbose bool
Lambdatest LambdatestConfig
Git GitConfig
ContainerRegistry ContainerRegistryConfig
RepoSecrets map[string]map[string]string
}
// LambdatestConfig contains credentials for lambdatest
type LambdatestConfig struct {
SecretKey string
}
// GitConfig contains git token
type GitConfig struct {
Token string
TokenType string
}
// PullPolicyType defines when to pull docker image
type PullPolicyType string
// ModeType define type of container repo
type ModeType string
// ContainerRegistryConfig contains repo configuration if private repo is used
type ContainerRegistryConfig struct {
PullPolicy PullPolicyType
Mode ModeType
Username string
Password string
}
// defines constant for docker config
const (
PullAlways PullPolicyType = "always"
PullNever PullPolicyType = "never"
PrivateMode ModeType = "private"
PublicMode ModeType = "public"
)
================================================
FILE: docker-compose.yml
================================================
version: "3.9"
services:
synapse:
image: lambdatest/synapse:latest
stop_signal: SIGINT
restart: on-failure
networks:
- test-at-scale
hostname: synapse
container_name: synapse
volumes:
# synapse will needs socket access to create containers on host
- "/var/run/docker.sock:/var/run/docker.sock"
- "/tmp/synapse:/tmp/synapse"
- ".synapse.json:/home/synapse/.synapse.json"
- "/etc/machine-id:/etc/machine-id"
- "./logs/synapse:/var/log/synapse"
networks:
test-at-scale:
external: false
name: test-at-scale
================================================
FILE: go.mod
================================================
module github.com/LambdaTest/test-at-scale
go 1.17
require (
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0
github.com/bmatcuk/doublestar/v4 v4.0.2
github.com/cenkalti/backoff/v4 v4.1.3
github.com/denisbrodbeck/machineid v1.0.1
github.com/docker/docker v20.10.12+incompatible
github.com/docker/go-units v0.4.0
github.com/gin-gonic/gin v1.7.7
github.com/go-playground/locales v0.14.0
github.com/go-playground/universal-translator v0.18.0
github.com/go-playground/validator/v10 v10.10.0
github.com/google/uuid v1.2.0
github.com/gorilla/websocket v1.4.2
github.com/joho/godotenv v1.4.0
github.com/mholt/archiver/v3 v3.5.1
github.com/robfig/cron/v3 v3.0.1
github.com/shirou/gopsutil/v3 v3.21.1
github.com/sirupsen/logrus v1.8.1
github.com/spf13/cobra v1.3.0
github.com/spf13/viper v1.10.1
github.com/stretchr/testify v1.7.0
go.uber.org/zap v1.20.0
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
gopkg.in/natefinch/lumberjack.v2 v2.0.0
gopkg.in/yaml.v3 v3.0.0
)
require (
github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 // indirect
github.com/Microsoft/go-winio v0.4.17 // indirect
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
github.com/andybalholm/brotli v1.0.1 // indirect
github.com/containerd/containerd v1.5.10 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/docker/distribution v2.8.0+incompatible // indirect
github.com/docker/go-connections v0.4.0 // indirect
github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect
github.com/fsnotify/fsnotify v1.5.1 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/snappy v0.0.3 // indirect
github.com/gorilla/mux v1.8.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.11.13 // indirect
github.com/klauspost/pgzip v1.2.5 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/magiconair/properties v1.8.5 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/mitchellh/mapstructure v1.4.3 // indirect
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/nwaples/rardecode v1.1.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.0.2 // indirect
github.com/pelletier/go-toml v1.9.4 // indirect
github.com/pierrec/lz4/v4 v4.1.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/spf13/afero v1.6.0 // indirect
github.com/spf13/cast v1.4.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/objx v0.2.0 // indirect
github.com/subosito/gotenv v1.2.0 // indirect
github.com/ugorji/go/codec v1.1.7 // indirect
github.com/ulikunitz/xz v0.5.9 // indirect
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d // indirect
golang.org/x/sys v0.0.0-20220111092808-5a964db01320 // indirect
golang.org/x/text v0.3.7 // indirect
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa // indirect
google.golang.org/grpc v1.43.0 // indirect
google.golang.org/protobuf v1.27.1 // indirect
gopkg.in/ini.v1 v1.66.2 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gotest.tools/v3 v3.1.0 // indirect
)
================================================
FILE: go.sum
================================================
bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY=
cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM=
cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY=
cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ=
cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI=
cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4=
cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=
cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM=
cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible h1:KnPIugL51v3N3WwvaSmZbxukD1WuWXOiE9fRdu32f2I=
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 h1:qoVeMsc9/fh/yhxVaA0obYjVH/oI/ihrOoMwsLS9KSA=
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM=
github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 h1:E+m3SkZCN0Bf5q7YdTs5lSm2CYY3CK4spn5OmUIiQtk=
github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I=
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0 h1:Px2UA+2RvSSvv+RvJNuUB6n7rs5Wsel4dXLe90Um2n4=
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg=
github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/go-winio v0.4.17 h1:iT12IBVClFevaf8PuVyi3UmZOVh4OqnaLxDTW2O6j3w=
github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8=
github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg=
github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00=
github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600=
github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0=
github.com/andybalholm/brotli v1.0.1 h1:KqhlKozYbRtJvsPrrEeXcO+N2l6NYT5A2QAFmSULpEc=
github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/bmatcuk/doublestar/v4 v4.0.2 h1:X0krlUVAVmtr2cRoTqR8aDMrDqnB36ht8wpWTiQ3jsA=
github.com/bmatcuk/doublestar/v4 v4.0.2/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4=
github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw=
github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg=
github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc=
github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs=
github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE=
github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU=
github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU=
github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU=
github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E=
github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss=
github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss=
github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI=
github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM=
github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU=
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE=
github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw=
github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ=
github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU=
github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI=
github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s=
github.com/containerd/containerd v1.5.10 h1:3cQ2uRVCkJVcx5VombsE7105Gl9Wrl7ORAO3+4+ogf4=
github.com/containerd/containerd v1.5.10/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=
github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y=
github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM=
github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4=
github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4=
github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU=
github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk=
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g=
github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok=
github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok=
github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0=
github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA=
github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow=
github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms=
github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c=
github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8=
github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ=
github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk=
github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg=
github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw=
github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y=
github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM=
github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8=
github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc=
github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4=
github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ=
github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s=
github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8=
github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/denisbrodbeck/machineid v1.0.1 h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMSRhl4D7AQ=
github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI=
github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko=
github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY=
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/distribution v2.8.0+incompatible h1:l9EaZDICImO1ngI+uTifW+ZYvvz7fKISBAKpg+MbWbY=
github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/docker v20.10.12+incompatible h1:CEeNmFM0QZIsJCZKMkZx0ZcahTiewkrgiwfYD+dfl1U=
github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI=
github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 h1:iFaUwBSo5Svw6L7HYpRu/0lE3e0BaElwnNO1qkNQxBY=
github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s=
github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY=
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws=
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs=
github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0=
github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU=
github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0=
github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY=
github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA=
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.11.13 h1:eSvu8Tmq6j2psUJqJrLcWH6K3w5Dwc+qipbaA6eVEN4=
github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE=
github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Clwo=
github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4=
github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs=
github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc=
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ=
github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM=
github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs=
github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE=
github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo=
github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/pierrec/lz4/v4 v4.1.2 h1:qvY3YFXRQE/XB8MlLzJH7mSzBs74eA2gg52YTk6jUPM=
github.com/pierrec/lz4/v4 v4.1.2/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig=
github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
github.com/shirou/gopsutil/v3 v3.21.1 h1:dA72XXj5WOXIZkAL2iYTKRVcNOOqh4yfLn9Rm7t8BMM=
github.com/shirou/gopsutil/v3 v3.21.1/go.mod h1:igHnfak0qnw1biGeI2qKQvu0ZkwvEkUcCLlYhZzdr/4=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY=
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
github.com/spf13/cobra v1.3.0 h1:R7cSvGu+Vv+qX0gW5R/85dx2kmmJT5z5NM8ifdYjdn0=
github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM=
github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk=
github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU=
github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8=
github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/ulikunitz/xz v0.5.9 h1:RsKRIA2MO8x56wkkcd3LbtcE/uMszhb6DpRf+3uwa3I=
github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI=
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg=
go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs=
go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
go.uber.org/zap v1.20.0 h1:N4oPlghZwYG55MlU6LXk/Zp00FVNE9X9wrYO8CEs4lc=
go.uber.org/zap v1.20.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmAR
gitextract_9y26wxik/
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── 1-bug-report.yaml
│ │ ├── 2-feature-request.yaml
│ │ └── 3-documentation-improvement.yaml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── dockerhub-description.yml
│ ├── env-release-nucleus.yml
│ ├── env-release-synapse.yml
│ ├── premerge.yml
│ ├── pull_request_lint.yml
│ ├── release-patch-wf.yml
│ ├── release.yml
│ └── stale.yml
├── .gitignore
├── .golangci.yml
├── .sample.synapse.json
├── .vscode/
│ └── settings.json
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── build/
│ ├── nucleus/
│ │ ├── Dockerfile
│ │ ├── build.sh
│ │ ├── entrypoint.sh
│ │ ├── golang/
│ │ │ └── server
│ │ └── java/
│ │ └── test-at-scale-java.jar
│ └── synapse/
│ ├── Dockerfile
│ ├── build.sh
│ └── entrypoint.sh
├── bundle
├── cmd/
│ ├── nucleus/
│ │ ├── bin.go
│ │ ├── flags.go
│ │ └── main.go
│ └── synapse/
│ ├── bin.go
│ ├── flags.go
│ └── main.go
├── config/
│ ├── default.go
│ ├── loader.go
│ ├── nucleusmodel.go
│ ├── parse.go
│ ├── parse_test.go
│ └── synapsemodel.go
├── docker-compose.yml
├── go.mod
├── go.sum
├── mocks/
│ ├── AzureClient.go
│ ├── BlockTestService.go
│ ├── Builder.go
│ ├── CacheStore.go
│ ├── CoverageService.go
│ ├── DiffManager.go
│ ├── DockerRunner.go
│ ├── Driver.go
│ ├── ExecutionManager.go
│ ├── GitManager.go
│ ├── ListSubModuleService.go
│ ├── LogWriterStrategy.go
│ ├── Logger.go
│ ├── PayloadManager.go
│ ├── Requests.go
│ ├── SecretParser.go
│ ├── SecretsManager.go
│ ├── SynapseManager.go
│ ├── TASConfigManager.go
│ ├── Task.go
│ ├── TestDiscoveryService.go
│ ├── TestExecutionService.go
│ ├── TestStats.go
│ └── ZstdCompressor.go
├── pkg/
│ ├── api/
│ │ ├── health/
│ │ │ ├── health.go
│ │ │ └── health_test.go
│ │ ├── results/
│ │ │ ├── results.go
│ │ │ └── results_test.go
│ │ ├── router.go
│ │ ├── router_test.go
│ │ └── testlist/
│ │ └── testlist.go
│ ├── azure/
│ │ └── client.go
│ ├── blocktestservice/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── cachemanager/
│ │ └── cachemanager.go
│ ├── command/
│ │ ├── run.go
│ │ ├── run_test.go
│ │ ├── script.go
│ │ └── script_test.go
│ ├── core/
│ │ ├── interfaces.go
│ │ ├── lifecycle.go
│ │ ├── models.go
│ │ ├── runner.go
│ │ ├── secrets.go
│ │ ├── synapse.go
│ │ └── wsproto.go
│ ├── cron/
│ │ └── setup.go
│ ├── diffmanager/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── driver/
│ │ ├── builder.go
│ │ ├── builder_test.go
│ │ ├── driver_v1.go
│ │ ├── driver_v2.go
│ │ └── driver_v2_test.go
│ ├── errs/
│ │ ├── nucleus.go
│ │ ├── nucleus_test.go
│ │ └── synapse.go
│ ├── fileutils/
│ │ ├── fileutils.go
│ │ └── fileutils_test.go
│ ├── gitmanager/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── global/
│ │ ├── nucleusconstants.go
│ │ ├── synapseconstants.go
│ │ └── version.go
│ ├── listsubmoduleservice/
│ │ └── setup.go
│ ├── logstream/
│ │ ├── mask.go
│ │ └── mask_test.go
│ ├── logwriter/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── lumber/
│ │ ├── logio.go
│ │ ├── logrus.go
│ │ ├── setup.go
│ │ └── zap.go
│ ├── payloadmanager/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── procfs/
│ │ └── procfs.go
│ ├── proxyserver/
│ │ ├── proxyhandler.go
│ │ └── setup.go
│ ├── requestutils/
│ │ └── request.go
│ ├── runner/
│ │ └── docker/
│ │ ├── config.go
│ │ ├── docker.go
│ │ ├── docker_test.go
│ │ └── setup_test.go
│ ├── secret/
│ │ ├── secret.go
│ │ └── secret_test.go
│ ├── secrets/
│ │ ├── secrets.go
│ │ ├── secrets_test.go
│ │ └── setup_test.go
│ ├── server/
│ │ └── setup.go
│ ├── service/
│ │ ├── coverage/
│ │ │ ├── coverage.go
│ │ │ ├── coverage_test.go
│ │ │ └── models.go
│ │ └── teststats/
│ │ ├── teststats.go
│ │ └── teststats_test.go
│ ├── synapse/
│ │ ├── synapse.go
│ │ ├── utils.go
│ │ └── utils_test.go
│ ├── tasconfigdownloader/
│ │ └── setup.go
│ ├── tasconfigmanager/
│ │ ├── setup.go
│ │ └── setup_test.go
│ ├── task/
│ │ ├── task.go
│ │ └── task_test.go
│ ├── testdiscoveryservice/
│ │ ├── testdiscovery.go
│ │ └── testdiscovery_test.go
│ ├── testexecutionservice/
│ │ ├── testexecution.go
│ │ └── testexecution_test.go
│ ├── tests/
│ │ └── testutils.go
│ ├── urlmanager/
│ │ ├── urlmanager.go
│ │ └── urlmanager_test.go
│ ├── utils/
│ │ ├── utils.go
│ │ └── utils_test.go
│ └── zstd/
│ ├── zstd.go
│ └── zstd_test.go
├── runner.conf
├── sample-tas.yaml
├── scripts/
│ ├── .eslintrc.json
│ ├── custom-reporter.js
│ ├── mapCoverage.js
│ └── package.json
└── testutils/
├── constants.go
├── testdata/
│ ├── compare/
│ │ └── abc...xyz
│ ├── coverage/
│ │ ├── coverage-final.json
│ │ └── sample/
│ │ └── coverage-final.json
│ ├── gitlabCommitDiff.json
│ ├── index.json
│ ├── index.txt
│ ├── merge_requests/
│ │ └── 2/
│ │ └── changes
│ ├── payload.json
│ ├── pulls/
│ │ └── 2
│ ├── sample_config.json
│ ├── secretTestData/
│ │ ├── invalidsecretfile.json
│ │ ├── secretOauthFile.json
│ │ └── secretfile.json
│ ├── tas.yaml
│ ├── taskPayload.json
│ ├── tasyml/
│ │ ├── duplicate_submodule_postmerge.yaml
│ │ ├── duplicate_submodule_premerge.yaml
│ │ ├── framework_only_required.yml
│ │ ├── invalidVersion.yml
│ │ ├── invalid_fields.yml
│ │ ├── invalid_types.yml
│ │ ├── invalid_typesv2.yml
│ │ ├── junk.yml
│ │ ├── postmerge_emptyv1.yml
│ │ ├── postmerge_emptyv2.yaml
│ │ ├── pre_merge_emptyv1.yml
│ │ ├── premerge_emptyv2.yaml
│ │ ├── valid.yml
│ │ ├── validV2.yml
│ │ ├── valid_with_cachekeyV2.yml
│ │ └── validwithCacheKey.yml
│ └── testblocklistdata/
│ └── testBlocklist.json
├── testdirectory/
│ └── testdir/
│ └── file
├── testfile
└── utils.go
SYMBOL INDEX (914 symbols across 127 files)
FILE: cmd/nucleus/bin.go
function RootCommand (line 45) | func RootCommand() *cobra.Command {
function run (line 59) | func run(cmd *cobra.Command, args []string) {
FILE: cmd/nucleus/flags.go
function AttachCLIFlags (line 8) | func AttachCLIFlags(rootCmd *cobra.Command) error {
FILE: cmd/nucleus/main.go
function main (line 9) | func main() {
FILE: cmd/synapse/bin.go
function RootCommand (line 31) | func RootCommand() *cobra.Command {
function run (line 47) | func run(cmd *cobra.Command, args []string) {
function setEnv (line 173) | func setEnv() {
FILE: cmd/synapse/flags.go
function AttachCLIFlags (line 8) | func AttachCLIFlags(rootCmd *cobra.Command) error {
FILE: cmd/synapse/main.go
function main (line 11) | func main() {
FILE: config/default.go
function setNucleusDefaultConfig (line 8) | func setNucleusDefaultConfig() {
function setSynapseDefaultConfig (line 21) | func setSynapseDefaultConfig() {
FILE: config/loader.go
type tempSecretReader (line 21) | type tempSecretReader struct
function LoadNucleusConfig (line 26) | func LoadNucleusConfig(cmd *cobra.Command) (*NucleusConfig, error) {
function LoadSynapseConfig (line 55) | func LoadSynapseConfig(cmd *cobra.Command) (*SynapseConfig, error) {
function LoadRepoSecrets (line 84) | func LoadRepoSecrets(cmd *cobra.Command, synapseConfig *SynapseConfig) e...
function ValidateCfg (line 112) | func ValidateCfg(cfg *SynapseConfig, logger lumber.Logger) error {
FILE: config/nucleusmodel.go
type NucleusConfig (line 8) | type NucleusConfig struct
type Azure (line 33) | type Azure struct
FILE: config/parse.go
constant tagPrefix (line 11) | tagPrefix = "viper"
function populateNucleusConfig (line 14) | func populateNucleusConfig(config *NucleusConfig) (*NucleusConfig, error) {
function populateSynapseConfig (line 24) | func populateSynapseConfig(config *SynapseConfig) (*SynapseConfig, error) {
function recursivelySet (line 36) | func recursivelySet(val reflect.Value, prefix string) error {
function getTags (line 98) | func getTags(field reflect.StructField) []string {
FILE: config/parse_test.go
function TestSimpleValues (line 11) | func TestSimpleValues(t *testing.T) {
function TestNestedValues (line 22) | func TestNestedValues(t *testing.T) {
FILE: config/synapsemodel.go
type SynapseConfig (line 8) | type SynapseConfig struct
type LambdatestConfig (line 22) | type LambdatestConfig struct
type GitConfig (line 27) | type GitConfig struct
type PullPolicyType (line 33) | type PullPolicyType
type ModeType (line 36) | type ModeType
type ContainerRegistryConfig (line 39) | type ContainerRegistryConfig struct
constant PullAlways (line 48) | PullAlways PullPolicyType = "always"
constant PullNever (line 49) | PullNever PullPolicyType = "never"
constant PrivateMode (line 50) | PrivateMode ModeType = "private"
constant PublicMode (line 51) | PublicMode ModeType = "public"
FILE: mocks/AzureClient.go
type AzureClient (line 15) | type AzureClient struct
method Create (line 20) | func (_m *AzureClient) Create(ctx context.Context, path string, reader...
method CreateUsingSASURL (line 41) | func (_m *AzureClient) CreateUsingSASURL(ctx context.Context, sasURL s...
method Exists (line 62) | func (_m *AzureClient) Exists(ctx context.Context, path string) (bool,...
method Find (line 83) | func (_m *AzureClient) Find(ctx context.Context, path string) (io.Read...
method FindUsingSASUrl (line 106) | func (_m *AzureClient) FindUsingSASUrl(ctx context.Context, sasURL str...
method GetSASURL (line 129) | func (_m *AzureClient) GetSASURL(ctx context.Context, purpose core.SAS...
type mockConstructorTestingTNewAzureClient (line 149) | type mockConstructorTestingTNewAzureClient interface
function NewAzureClient (line 155) | func NewAzureClient(t mockConstructorTestingTNewAzureClient) *AzureClient {
FILE: mocks/BlockTestService.go
type BlockTestService (line 12) | type BlockTestService struct
method GetBlockTests (line 17) | func (_m *BlockTestService) GetBlockTests(ctx context.Context, blockli...
type mockConstructorTestingTNewBlockTestService (line 30) | type mockConstructorTestingTNewBlockTestService interface
function NewBlockTestService (line 36) | func NewBlockTestService(t mockConstructorTestingTNewBlockTestService) *...
FILE: mocks/Builder.go
type Builder (line 11) | type Builder struct
method GetDriver (line 16) | func (_m *Builder) GetDriver(version int) (core.Driver, error) {
type mockConstructorTestingTNewBuilder (line 38) | type mockConstructorTestingTNewBuilder interface
function NewBuilder (line 44) | func NewBuilder(t mockConstructorTestingTNewBuilder) *Builder {
FILE: mocks/CacheStore.go
type CacheStore (line 12) | type CacheStore struct
method CacheWorkspace (line 17) | func (_m *CacheStore) CacheWorkspace(ctx context.Context, subModule st...
method Download (line 31) | func (_m *CacheStore) Download(ctx context.Context, cacheKey string) e...
method ExtractWorkspace (line 45) | func (_m *CacheStore) ExtractWorkspace(ctx context.Context, subModule ...
method Upload (line 59) | func (_m *CacheStore) Upload(ctx context.Context, cacheKey string, ite...
type mockConstructorTestingTNewCacheStore (line 79) | type mockConstructorTestingTNewCacheStore interface
function NewCacheStore (line 85) | func NewCacheStore(t mockConstructorTestingTNewCacheStore) *CacheStore {
FILE: mocks/CoverageService.go
type CoverageService (line 13) | type CoverageService struct
method MergeAndUpload (line 18) | func (_m *CoverageService) MergeAndUpload(ctx context.Context, payload...
type mockConstructorTestingTNewCoverageService (line 31) | type mockConstructorTestingTNewCoverageService interface
function NewCoverageService (line 37) | func NewCoverageService(t mockConstructorTestingTNewCoverageService) *Co...
FILE: mocks/DiffManager.go
type DiffManager (line 13) | type DiffManager struct
method GetChangedFiles (line 18) | func (_m *DiffManager) GetChangedFiles(ctx context.Context, payload *c...
type mockConstructorTestingTNewDiffManager (line 40) | type mockConstructorTestingTNewDiffManager interface
function NewDiffManager (line 46) | func NewDiffManager(t mockConstructorTestingTNewDiffManager) *DiffManager {
FILE: mocks/DockerRunner.go
type DockerRunner (line 13) | type DockerRunner struct
method Create (line 18) | func (_m *DockerRunner) Create(_a0 context.Context, _a1 *core.RunnerOp...
method Destroy (line 32) | func (_m *DockerRunner) Destroy(ctx context.Context, r *core.RunnerOpt...
method GetInfo (line 46) | func (_m *DockerRunner) GetInfo(_a0 context.Context) (float32, int64) {
method Initiate (line 67) | func (_m *DockerRunner) Initiate(_a0 context.Context, _a1 *core.Runner...
method KillRunningDocker (line 72) | func (_m *DockerRunner) KillRunningDocker(ctx context.Context) {
method PullImage (line 77) | func (_m *DockerRunner) PullImage(containerImageConfig *core.Container...
method Run (line 91) | func (_m *DockerRunner) Run(_a0 context.Context, _a1 *core.RunnerOptio...
method WaitForCompletion (line 105) | func (_m *DockerRunner) WaitForCompletion(ctx context.Context, r *core...
type mockConstructorTestingTNewDockerRunner (line 118) | type mockConstructorTestingTNewDockerRunner interface
function NewDockerRunner (line 124) | func NewDockerRunner(t mockConstructorTestingTNewDockerRunner) *DockerRu...
FILE: mocks/Driver.go
type Driver (line 13) | type Driver struct
method RunDiscovery (line 18) | func (_m *Driver) RunDiscovery(ctx context.Context, payload *core.Payl...
method RunExecution (line 32) | func (_m *Driver) RunExecution(ctx context.Context, payload *core.Payl...
type mockConstructorTestingTNewDriver (line 45) | type mockConstructorTestingTNewDriver interface
function NewDriver (line 51) | func NewDriver(t mockConstructorTestingTNewDriver) *Driver {
FILE: mocks/ExecutionManager.go
type ExecutionManager (line 13) | type ExecutionManager struct
method ExecuteInternalCommands (line 18) | func (_m *ExecutionManager) ExecuteInternalCommands(ctx context.Contex...
method ExecuteUserCommands (line 32) | func (_m *ExecutionManager) ExecuteUserCommands(ctx context.Context, c...
method GetEnvVariables (line 46) | func (_m *ExecutionManager) GetEnvVariables(envMap map[string]string, ...
type mockConstructorTestingTNewExecutionManager (line 68) | type mockConstructorTestingTNewExecutionManager interface
function NewExecutionManager (line 74) | func NewExecutionManager(t mockConstructorTestingTNewExecutionManager) *...
FILE: mocks/GitManager.go
type GitManager (line 13) | type GitManager struct
method Clone (line 18) | func (_m *GitManager) Clone(ctx context.Context, payload *core.Payload...
type mockConstructorTestingTNewGitManager (line 31) | type mockConstructorTestingTNewGitManager interface
function NewGitManager (line 37) | func NewGitManager(t mockConstructorTestingTNewGitManager) *GitManager {
FILE: mocks/ListSubModuleService.go
type ListSubModuleService (line 12) | type ListSubModuleService struct
method Send (line 17) | func (_m *ListSubModuleService) Send(ctx context.Context, buildID stri...
type mockConstructorTestingTNewListSubModuleService (line 30) | type mockConstructorTestingTNewListSubModuleService interface
function NewListSubModuleService (line 36) | func NewListSubModuleService(t mockConstructorTestingTNewListSubModuleSe...
FILE: mocks/LogWriterStrategy.go
type LogWriterStrategy (line 14) | type LogWriterStrategy struct
method Write (line 19) | func (_m *LogWriterStrategy) Write(ctx context.Context, reader io.Read...
type mockConstructorTestingTNewLogWriterStrategy (line 34) | type mockConstructorTestingTNewLogWriterStrategy interface
function NewLogWriterStrategy (line 40) | func NewLogWriterStrategy(t mockConstructorTestingTNewLogWriterStrategy)...
FILE: mocks/Logger.go
type Logger (line 11) | type Logger struct
method Debugf (line 16) | func (_m *Logger) Debugf(format string, args ...interface{}) {
method Errorf (line 24) | func (_m *Logger) Errorf(format string, args ...interface{}) {
method Fatalf (line 32) | func (_m *Logger) Fatalf(format string, args ...interface{}) {
method Infof (line 40) | func (_m *Logger) Infof(format string, args ...interface{}) {
method Panicf (line 48) | func (_m *Logger) Panicf(format string, args ...interface{}) {
method Warnf (line 56) | func (_m *Logger) Warnf(format string, args ...interface{}) {
method WithFields (line 64) | func (_m *Logger) WithFields(keyValues lumber.Fields) lumber.Logger {
type mockConstructorTestingTNewLogger (line 79) | type mockConstructorTestingTNewLogger interface
function NewLogger (line 85) | func NewLogger(t mockConstructorTestingTNewLogger) *Logger {
FILE: mocks/PayloadManager.go
type PayloadManager (line 13) | type PayloadManager struct
method FetchPayload (line 18) | func (_m *PayloadManager) FetchPayload(ctx context.Context, payloadAdd...
method ValidatePayload (line 41) | func (_m *PayloadManager) ValidatePayload(ctx context.Context, payload...
type mockConstructorTestingTNewPayloadManager (line 54) | type mockConstructorTestingTNewPayloadManager interface
function NewPayloadManager (line 60) | func NewPayloadManager(t mockConstructorTestingTNewPayloadManager) *Payl...
FILE: mocks/Requests.go
type Requests (line 12) | type Requests struct
method MakeAPIRequest (line 17) | func (_m *Requests) MakeAPIRequest(ctx context.Context, httpMethod str...
type mockConstructorTestingTNewRequests (line 46) | type mockConstructorTestingTNewRequests interface
function NewRequests (line 52) | func NewRequests(t mockConstructorTestingTNewRequests) *Requests {
FILE: mocks/SecretParser.go
type SecretParser (line 11) | type SecretParser struct
method Expired (line 16) | func (_m *SecretParser) Expired(token *core.Oauth) bool {
method GetOauthSecret (line 30) | func (_m *SecretParser) GetOauthSecret(filepath string) (*core.Oauth, ...
method GetRepoSecret (line 53) | func (_m *SecretParser) GetRepoSecret(_a0 string) (map[string]string, ...
method SubstituteSecret (line 76) | func (_m *SecretParser) SubstituteSecret(command string, secretData ma...
type mockConstructorTestingTNewSecretParser (line 96) | type mockConstructorTestingTNewSecretParser interface
function NewSecretParser (line 102) | func NewSecretParser(t mockConstructorTestingTNewSecretParser) *SecretPa...
FILE: mocks/SecretsManager.go
type SecretsManager (line 13) | type SecretsManager struct
method GetDockerSecrets (line 18) | func (_m *SecretsManager) GetDockerSecrets(r *core.RunnerOptions) (cor...
method GetLambdatestSecrets (line 39) | func (_m *SecretsManager) GetLambdatestSecrets() *config.LambdatestCon...
method GetSynapseName (line 55) | func (_m *SecretsManager) GetSynapseName() string {
method WriteGitSecrets (line 69) | func (_m *SecretsManager) WriteGitSecrets(path string) error {
method WriteRepoSecrets (line 83) | func (_m *SecretsManager) WriteRepoSecrets(repo string, path string) e...
type mockConstructorTestingTNewSecretsManager (line 96) | type mockConstructorTestingTNewSecretsManager interface
function NewSecretsManager (line 102) | func NewSecretsManager(t mockConstructorTestingTNewSecretsManager) *Secr...
FILE: mocks/SynapseManager.go
type SynapseManager (line 14) | type SynapseManager struct
method InitiateConnection (line 19) | func (_m *SynapseManager) InitiateConnection(ctx context.Context, wg *...
type mockConstructorTestingTNewSynapseManager (line 23) | type mockConstructorTestingTNewSynapseManager interface
function NewSynapseManager (line 29) | func NewSynapseManager(t mockConstructorTestingTNewSynapseManager) *Syna...
FILE: mocks/TASConfigManager.go
type TASConfigManager (line 13) | type TASConfigManager struct
method GetVersion (line 18) | func (_m *TASConfigManager) GetVersion(path string) (int, error) {
method LoadAndValidate (line 39) | func (_m *TASConfigManager) LoadAndValidate(ctx context.Context, versi...
type mockConstructorTestingTNewTASConfigManager (line 61) | type mockConstructorTestingTNewTASConfigManager interface
function NewTASConfigManager (line 67) | func NewTASConfigManager(t mockConstructorTestingTNewTASConfigManager) *...
FILE: mocks/Task.go
type Task (line 13) | type Task struct
method UpdateStatus (line 18) | func (_m *Task) UpdateStatus(ctx context.Context, payload *core.TaskPa...
type mockConstructorTestingTNewTask (line 31) | type mockConstructorTestingTNewTask interface
function NewTask (line 37) | func NewTask(t mockConstructorTestingTNewTask) *Task {
FILE: mocks/TestDiscoveryService.go
type TestDiscoveryService (line 13) | type TestDiscoveryService struct
method Discover (line 18) | func (_m *TestDiscoveryService) Discover(ctx context.Context, args *co...
method SendResult (line 41) | func (_m *TestDiscoveryService) SendResult(ctx context.Context, testDi...
type mockConstructorTestingTNewTestDiscoveryService (line 54) | type mockConstructorTestingTNewTestDiscoveryService interface
function NewTestDiscoveryService (line 60) | func NewTestDiscoveryService(t mockConstructorTestingTNewTestDiscoverySe...
FILE: mocks/TestExecutionService.go
type TestExecutionService (line 13) | type TestExecutionService struct
method Run (line 18) | func (_m *TestExecutionService) Run(ctx context.Context, testExecution...
method SendResults (line 41) | func (_m *TestExecutionService) SendResults(ctx context.Context, paylo...
type mockConstructorTestingTNewTestExecutionService (line 63) | type mockConstructorTestingTNewTestExecutionService interface
function NewTestExecutionService (line 69) | func NewTestExecutionService(t mockConstructorTestingTNewTestExecutionSe...
FILE: mocks/TestStats.go
type TestStats (line 8) | type TestStats struct
method CaptureTestStats (line 13) | func (_m *TestStats) CaptureTestStats(pid int32, collectStats bool) er...
type mockConstructorTestingTNewTestStats (line 26) | type mockConstructorTestingTNewTestStats interface
function NewTestStats (line 32) | func NewTestStats(t mockConstructorTestingTNewTestStats) *TestStats {
FILE: mocks/ZstdCompressor.go
type ZstdCompressor (line 12) | type ZstdCompressor struct
method Compress (line 17) | func (_m *ZstdCompressor) Compress(ctx context.Context, compressedFile...
method Decompress (line 38) | func (_m *ZstdCompressor) Decompress(ctx context.Context, filePath str...
type mockConstructorTestingTNewZstdCompressor (line 51) | type mockConstructorTestingTNewZstdCompressor interface
function NewZstdCompressor (line 57) | func NewZstdCompressor(t mockConstructorTestingTNewZstdCompressor) *Zstd...
FILE: pkg/api/health/health.go
function Handler (line 10) | func Handler(c *gin.Context) {
FILE: pkg/api/health/health_test.go
function TestHandler (line 13) | func TestHandler(t *testing.T) {
FILE: pkg/api/results/results.go
function Handler (line 14) | func Handler(logger lumber.Logger, ts *teststats.ProcStats) gin.HandlerF...
FILE: pkg/api/results/results_test.go
function TestHandler (line 18) | func TestHandler(t *testing.T) {
FILE: pkg/api/router.go
type Router (line 14) | type Router struct
method Handler (line 30) | func (r Router) Handler() *gin.Engine {
function NewRouter (line 21) | func NewRouter(logger lumber.Logger, ts *teststats.ProcStats, tdResChan ...
FILE: pkg/api/router_test.go
function TestNewRouter (line 19) | func TestNewRouter(t *testing.T) {
function TestRouter_Handler (line 47) | func TestRouter_Handler(t *testing.T) {
FILE: pkg/api/testlist/testlist.go
function Handler (line 12) | func Handler(logger lumber.Logger, tdResChan chan core.DiscoveryResult) ...
FILE: pkg/azure/client.go
type store (line 31) | type store struct
method FindUsingSASUrl (line 90) | func (s *store) FindUsingSASUrl(ctx context.Context, sasURL string) (i...
method CreateUsingSASURL (line 110) | func (s *store) CreateUsingSASURL(ctx context.Context, sasURL string, ...
method Find (line 132) | func (s *store) Find(ctx context.Context, path string) (io.ReadCloser,...
method Create (line 144) | func (s *store) Create(ctx context.Context, path string, reader io.Rea...
method GetSASURL (line 156) | func (s *store) GetSASURL(ctx context.Context, purpose core.SASURLPurp...
method Exists (line 184) | func (s *store) Exists(ctx context.Context, path string) (bool, error) {
type request (line 39) | type request struct
type response (line 44) | type response struct
function NewAzureBlobEnv (line 49) | func NewAzureBlobEnv(cfg *config.NucleusConfig, requests core.Requests, ...
function handleError (line 195) | func handleError(err error) error {
function getClientOptions (line 208) | func getClientOptions() *azblob.ClientOptions {
FILE: pkg/blocktestservice/setup.go
constant delimiter (line 20) | delimiter = "##"
type blocktest (line 24) | type blocktest struct
type blocktestAPIResponse (line 31) | type blocktestAPIResponse struct
type blocktestLocator (line 38) | type blocktestLocator struct
type TestBlockTestService (line 44) | type TestBlockTestService struct
method fetchBlockListFromNeuron (line 66) | func (tbs *TestBlockTestService) fetchBlockListFromNeuron(ctx context....
method GetBlockTests (line 97) | func (tbs *TestBlockTestService) GetBlockTests(ctx context.Context, bl...
method populateBlockList (line 140) | func (tbs *TestBlockTestService) populateBlockList(blocktestSource str...
function NewTestBlockTestService (line 55) | func NewTestBlockTestService(cfg *config.NucleusConfig, requests core.Re...
FILE: pkg/blocktestservice/setup_test.go
constant buildID (line 22) | buildID = "buildID"
function TestBlockListService_fetchBlockListFromNeuron (line 24) | func TestBlockListService_fetchBlockListFromNeuron(t *testing.T) {
function TestBlockListService_GetBlockListedTests (line 110) | func TestBlockListService_GetBlockListedTests(t *testing.T) {
function TestBlockListService_populateBlockList (line 159) | func TestBlockListService_populateBlockList(t *testing.T) {
FILE: pkg/cachemanager/cachemanager.go
constant pnpmLock (line 20) | pnpmLock = "pnpm-lock.yaml"
constant yarnLock (line 21) | yarnLock = "yarn.lock"
constant packageLock (line 22) | packageLock = "package-lock.json"
constant npmShrinkwrap (line 23) | npmShrinkwrap = "npm-shrinkwrap.json"
constant nodeModules (line 24) | nodeModules = "node_modules"
constant defaultCompressedFileName (line 25) | defaultCompressedFileName = "cache.tzst"
constant workspaceCompressedFilenameV1 (line 26) | workspaceCompressedFilenameV1 = "workspace.tzst"
constant workspaceCompressedFilenameV2 (line 27) | workspaceCompressedFilenameV2 = "workspace-%s.tzst"
type cache (line 31) | type cache struct
method getCacheSASURL (line 57) | func (c *cache) getCacheSASURL(ctx context.Context, cacheKey string) (...
method Download (line 65) | func (c *cache) Download(ctx context.Context, cacheKey string) error {
method Upload (line 96) | func (c *cache) Upload(ctx context.Context, cacheKey string, itemsToCo...
method CacheWorkspace (line 155) | func (c *cache) CacheWorkspace(ctx context.Context, subModule string) ...
method ExtractWorkspace (line 172) | func (c *cache) ExtractWorkspace(ctx context.Context, subModule string...
method getDefaultDirs (line 189) | func (c *cache) getDefaultDirs() ([]string, error) {
function New (line 44) | func New(z core.ZstdCompressor, azureClient core.AzureClient, logger lum...
FILE: pkg/command/run.go
type manager (line 16) | type manager struct
method ExecuteUserCommands (line 32) | func (m *manager) ExecuteUserCommands(ctx context.Context,
method ExecuteInternalCommands (line 80) | func (m *manager) ExecuteInternalCommands(ctx context.Context,
method GetEnvVariables (line 103) | func (m *manager) GetEnvVariables(envMap, secretData map[string]string...
method closeAndWriteLog (line 115) | func (m *manager) closeAndWriteLog(azureWriter *io.PipeWriter, errChan...
function NewExecutionManager (line 23) | func NewExecutionManager(secretParser core.SecretParser,
FILE: pkg/command/run_test.go
function TestNewExecutionManager (line 17) | func TestNewExecutionManager(t *testing.T) {
function Test_manager_GetEnvVariables (line 55) | func Test_manager_GetEnvVariables(t *testing.T) {
FILE: pkg/command/script.go
method createScript (line 11) | func (m *manager) createScript(commands []string, secretData map[string]...
constant optionScript (line 37) | optionScript = `
constant traceScript (line 43) | traceScript = `
FILE: pkg/command/script_test.go
function Test_manager_createScript (line 14) | func Test_manager_createScript(t *testing.T) {
FILE: pkg/core/interfaces.go
type PayloadManager (line 9) | type PayloadManager interface
type TASConfigManager (line 17) | type TASConfigManager interface
type GitManager (line 30) | type GitManager interface
type DiffManager (line 38) | type DiffManager interface
type TestDiscoveryService (line 43) | type TestDiscoveryService interface
type BlockTestService (line 52) | type BlockTestService interface
type TestExecutionService (line 57) | type TestExecutionService interface
type CoverageService (line 65) | type CoverageService interface
type TestStats (line 70) | type TestStats interface
type Task (line 75) | type Task interface
type NotifMessage (line 81) | type NotifMessage struct
type AzureClient (line 89) | type AzureClient interface
type ZstdCompressor (line 99) | type ZstdCompressor interface
type CacheStore (line 106) | type CacheStore interface
type SecretParser (line 118) | type SecretParser interface
type ExecutionManager (line 130) | type ExecutionManager interface
type Requests (line 151) | type Requests interface
type ListSubModuleService (line 158) | type ListSubModuleService interface
type Driver (line 164) | type Driver interface
type LogWriterStrategy (line 174) | type LogWriterStrategy interface
type Builder (line 180) | type Builder interface
FILE: pkg/core/lifecycle.go
constant endpointPostTestResults (line 20) | endpointPostTestResults = "http://localhost:9876/results"
constant endpointPostTestList (line 21) | endpointPostTestList = "http://localhost:9876/test-list"
constant languageJs (line 22) | languageJs = "javascript"
function NewPipeline (line 26) | func NewPipeline(cfg *config.NucleusConfig, logger lumber.Logger) (*Pipe...
method Start (line 34) | func (pl *Pipeline) Start(ctx context.Context) (err error) {
method getTaskPayload (line 165) | func (pl *Pipeline) getTaskPayload(payload *Payload, startTime time.Time...
method setEnv (line 187) | func (pl *Pipeline) setEnv(payload *Payload, coverageDir string) {
FILE: pkg/core/models.go
type ExecutionID (line 14) | type ExecutionID
type SASURLPurpose (line 17) | type SASURLPurpose
constant PurposeCache (line 21) | PurposeCache SASURLPurpose = "cache"
constant PurposeWorkspaceCache (line 22) | PurposeWorkspaceCache SASURLPurpose = "workspace_cache"
constant PurposePreRunLogs (line 23) | PurposePreRunLogs SASURLPurpose = "pre_run_logs"
constant PurposePostRunLogs (line 24) | PurposePostRunLogs SASURLPurpose = "post_run_logs"
constant PurposeExecutionLogs (line 25) | PurposeExecutionLogs SASURLPurpose = "execution_logs"
type Tier (line 29) | type Tier
constant Internal (line 33) | Internal Tier = "internal"
constant XSmall (line 34) | XSmall Tier = "xsmall"
constant Small (line 35) | Small Tier = "small"
constant Medium (line 36) | Medium Tier = "medium"
constant Large (line 37) | Large Tier = "large"
constant XLarge (line 38) | XLarge Tier = "xlarge"
type PostMergeStrategyName (line 42) | type PostMergeStrategyName
constant AfterNCommitStrategy (line 46) | AfterNCommitStrategy PostMergeStrategyName = "after_n_commits"
type SplitMode (line 50) | type SplitMode
constant FileSplit (line 54) | FileSplit SplitMode = "file"
constant TestSplit (line 55) | TestSplit SplitMode = "test"
type CommandType (line 59) | type CommandType
constant PreRun (line 63) | PreRun CommandType = "prerun"
constant PostRun (line 64) | PostRun CommandType = "postrun"
constant InstallRunners (line 65) | InstallRunners CommandType = "installrunners"
constant Execution (line 66) | Execution CommandType = "execution"
constant Discovery (line 67) | Discovery CommandType = "discovery"
constant Zstd (line 68) | Zstd CommandType = "zstd"
constant CoverageMerge (line 69) | CoverageMerge CommandType = "coveragemerge"
constant InstallNodeVer (line 70) | InstallNodeVer CommandType = "installnodeversion"
constant InitGit (line 71) | InitGit CommandType = "initgit"
constant RenameCloneFile (line 72) | RenameCloneFile CommandType = "renameclonefile"
type EventType (line 76) | type EventType
constant EventPush (line 80) | EventPush EventType = "push"
constant EventPullRequest (line 82) | EventPullRequest EventType = "pull-request"
type CommitChangeList (line 86) | type CommitChangeList struct
type Payload (line 96) | type Payload struct
type Pipeline (line 123) | type Pipeline struct
type DiscoveryResult (line 142) | type DiscoveryResult struct
type ExecutionResult (line 159) | type ExecutionResult struct
type ExecutionResults (line 165) | type ExecutionResults struct
type TestReportResponsePayload (line 176) | type TestReportResponsePayload struct
type TestPayload (line 183) | type TestPayload struct
type TestSuitePayload (line 208) | type TestSuitePayload struct
type TestProcessStats (line 223) | type TestProcessStats struct
type Status (line 231) | type Status
constant Initiating (line 235) | Initiating Status = "initiating"
constant Running (line 236) | Running Status = "running"
constant Failed (line 237) | Failed Status = "failed"
constant Aborted (line 238) | Aborted Status = "aborted"
constant Passed (line 239) | Passed Status = "passed"
constant Error (line 240) | Error Status = "error"
type TaskPayload (line 244) | type TaskPayload struct
type CoverageManifest (line 261) | type CoverageManifest struct
constant FileAdded (line 269) | FileAdded int = iota + 1
constant FileRemoved (line 271) | FileRemoved
constant FileModified (line 273) | FileModified
constant GitHub (line 278) | GitHub string = "github"
constant GitLab (line 280) | GitLab string = "gitlab"
constant Bitbucket (line 282) | Bitbucket string = "bitbucket"
type TokenType (line 285) | type TokenType
constant Bearer (line 289) | Bearer TokenType = "Bearer"
constant Basic (line 291) | Basic TokenType = "Basic"
type Oauth (line 295) | type Oauth struct
type TASConfig (line 303) | type TASConfig struct
type CoverageThreshold (line 325) | type CoverageThreshold struct
type Cache (line 334) | type Cache struct
type Modifier (line 340) | type Modifier struct
type Run (line 347) | type Run struct
type Merge (line 353) | type Merge struct
type Stability (line 359) | type Stability struct
type TaskType (line 364) | type TaskType
constant DiscoveryTask (line 368) | DiscoveryTask TaskType = "discover"
constant ExecutionTask (line 369) | ExecutionTask TaskType = "execute"
constant FlakyTask (line 370) | FlakyTask TaskType = "flaky"
type TestStatus (line 374) | type TestStatus
constant Blocklisted (line 377) | Blocklisted TestStatus = "blocklisted"
constant Quarantined (line 378) | Quarantined TestStatus = "quarantined"
type TASConfigV2 (line 382) | type TASConfigV2 struct
type MergeV2 (line 398) | type MergeV2 struct
type SubModule (line 405) | type SubModule struct
type TasVersion (line 419) | type TasVersion struct
type SubModuleList (line 424) | type SubModuleList struct
type DiscoveyArgs (line 430) | type DiscoveyArgs struct
type TestExecutionArgs (line 445) | type TestExecutionArgs struct
type YMLParsingRequestMessage (line 459) | type YMLParsingRequestMessage struct
type TASConfigDownloaderOutput (line 471) | type TASConfigDownloaderOutput struct
type YMLParsingResultMessage (line 477) | type YMLParsingResultMessage struct
FILE: pkg/core/runner.go
type Specs (line 12) | type Specs struct
type ContainerStatus (line 28) | type ContainerStatus struct
type ContainerImageConfig (line 34) | type ContainerImageConfig struct
type DockerRunner (line 42) | type DockerRunner interface
type VolumeDetails (line 86) | type VolumeDetails struct
type RunnerOptions (line 98) | type RunnerOptions struct
type VaultOpts (line 120) | type VaultOpts struct
type PodType (line 132) | type PodType
constant NucleusPod (line 136) | NucleusPod PodType = "nucleus"
constant CoveragePod (line 137) | CoveragePod PodType = "coverage"
FILE: pkg/core/secrets.go
type Secret (line 6) | type Secret
type VaultSecret (line 9) | type VaultSecret struct
type SecretsManager (line 14) | type SecretsManager interface
FILE: pkg/core/synapse.go
type SynapseManager (line 9) | type SynapseManager interface
FILE: pkg/core/wsproto.go
type MessageType (line 4) | type MessageType
type StatusType (line 7) | type StatusType
type StatType (line 10) | type StatType
constant MsgLogin (line 14) | MsgLogin MessageType = "login"
constant MsgLogout (line 15) | MsgLogout MessageType = "logout"
constant MsgTask (line 16) | MsgTask MessageType = "task"
constant MsgInfo (line 17) | MsgInfo MessageType = "info"
constant MsgError (line 18) | MsgError MessageType = "error"
constant MsgResourceStats (line 19) | MsgResourceStats MessageType = "resourcestats"
constant MsgJobInfo (line 20) | MsgJobInfo MessageType = "jobinfo"
constant MsgBuildAbort (line 21) | MsgBuildAbort MessageType = "build_abort"
constant MsgYMLParsingRequest (line 22) | MsgYMLParsingRequest MessageType = "yml_parsing_request"
constant MsgYMLParsingResult (line 23) | MsgYMLParsingResult MessageType = "yml_parsing_result"
constant JobCompleted (line 28) | JobCompleted StatusType = "complete"
constant JobStarted (line 29) | JobStarted StatusType = "started"
constant JobFailed (line 30) | JobFailed StatusType = "failed"
constant JobAborted (line 31) | JobAborted StatusType = "aborted"
constant ResourceRelease (line 36) | ResourceRelease StatType = "release"
constant ResourceCapture (line 37) | ResourceCapture StatType = "capture"
type Message (line 41) | type Message struct
type LoginDetails (line 48) | type LoginDetails struct
type ResourceStats (line 58) | type ResourceStats struct
type JobInfo (line 65) | type JobInfo struct
type BuildAbortMsg (line 75) | type BuildAbortMsg struct
FILE: pkg/cron/setup.go
function Setup (line 13) | func Setup(ctx context.Context, wg *sync.WaitGroup, logger lumber.Logger...
function cleanupBuildCache (line 28) | func cleanupBuildCache(runner core.DockerRunner) {
FILE: pkg/diffmanager/setup.go
type diffManager (line 25) | type diffManager struct
method updateWithOr (line 58) | func (dm *diffManager) updateWithOr(m map[string]int, key string, valu...
method getCommitDiff (line 65) | func (dm *diffManager) getCommitDiff(gitprovider, repoURL string, oaut...
method getPRDiff (line 105) | func (dm *diffManager) getPRDiff(gitprovider, repoURL string, prNumber...
method parseDiff (line 145) | func (dm *diffManager) parseDiff(diff string) map[string]int {
method parseGitLabDiff (line 161) | func (dm *diffManager) parseGitLabDiff(eventType core.EventType, diff ...
method parseGitDiff (line 188) | func (dm *diffManager) parseGitDiff(gitprovider string, eventType core...
method GetChangedFiles (line 200) | func (dm *diffManager) GetChangedFiles(ctx context.Context, payload *c...
type gitLabDiffList (line 31) | type gitLabDiffList struct
type gitLabDiff (line 35) | type gitLabDiff struct
function NewDiffManager (line 44) | func NewDiffManager(cfg *config.NucleusConfig, logger lumber.Logger) *di...
FILE: pkg/diffmanager/setup_test.go
function Test_updateWithOr (line 17) | func Test_updateWithOr(t *testing.T) {
function Test_diffManager_GetChangedFiles_PRDiff (line 40) | func Test_diffManager_GetChangedFiles_PRDiff(t *testing.T) {
function Test_diffManager_GetChangedFiles_CommitDiff_Github (line 115) | func Test_diffManager_GetChangedFiles_CommitDiff_Github(t *testing.T) {
function Test_diffManager_GetChangedFiles_CommitDiff_Gitlab (line 191) | func Test_diffManager_GetChangedFiles_CommitDiff_Gitlab(t *testing.T) {
FILE: pkg/driver/builder.go
constant firstVersion (line 14) | firstVersion = 1
constant secondVersion (line 15) | secondVersion = 2
type Builder (line 19) | type Builder struct
method GetDriver (line 37) | func (b *Builder) GetDriver(version int, filePath string) (core.Driver...
type NodeInstaller (line 31) | type NodeInstaller struct
method InstallNodeVersion (line 82) | func (n *NodeInstaller) InstallNodeVersion(ctx context.Context, nodeVe...
FILE: pkg/driver/builder_test.go
function Test_driver (line 8) | func Test_driver(t *testing.T) {
FILE: pkg/driver/driver_v1.go
constant languageJs (line 21) | languageJs = "javascript"
type driverV1 (line 24) | type driverV1 struct
method RunDiscovery (line 47) | func (d *driverV1) RunDiscovery(ctx context.Context, payload *core.Pay...
method RunExecution (line 121) | func (d *driverV1) RunExecution(ctx context.Context, payload *core.Pay...
method setUp (line 170) | func (d *driverV1) setUp(ctx context.Context, payload *core.Payload,
method buildDiscoveryArgs (line 235) | func (d *driverV1) buildDiscoveryArgs(payload *core.Payload, tasConfig...
method buildTestExecutionArgs (line 255) | func (d *driverV1) buildTestExecutionArgs(payload *core.Payload, tasCo...
method getEnvAndPattern (line 274) | func (d *driverV1) getEnvAndPattern(payload *core.Payload, tasConfig *...
method setCache (line 286) | func (d *driverV1) setCache(tasConfig *core.TASConfig) error {
type setUpResultV1 (line 40) | type setUpResultV1 struct
function populateDiscovery (line 281) | func populateDiscovery(testDiscoveryResult *core.DiscoveryResult, tasCon...
FILE: pkg/driver/driver_v2.go
constant preRunLog (line 25) | preRunLog = "Running Pre Run on Top level"
type driverV2 (line 28) | type driverV2 struct
method RunDiscovery (line 51) | func (d *driverV2) RunDiscovery(ctx context.Context, payload *core.Pay...
method RunExecution (line 98) | func (d *driverV2) RunExecution(ctx context.Context, payload *core.Pay...
method runPreRunBeforeTestExecution (line 159) | func (d *driverV2) runPreRunBeforeTestExecution(ctx context.Context,
method runDiscoveryHelper (line 191) | func (d *driverV2) runDiscoveryHelper(ctx context.Context,
method runPreRunCommand (line 243) | func (d *driverV2) runPreRunCommand(ctx context.Context,
method runDiscoveryForEachSubModule (line 304) | func (d *driverV2) runDiscoveryForEachSubModule(ctx context.Context,
method runPreRunForEachSubModule (line 326) | func (d *driverV2) runPreRunForEachSubModule(ctx context.Context,
method setUpDiscovery (line 361) | func (d *driverV2) setUpDiscovery(ctx context.Context,
method buildDiscoveryArgs (line 406) | func (d *driverV2) buildDiscoveryArgs(payload *core.Payload, tasConfig...
method findSubmodule (line 460) | func (d *driverV2) findSubmodule(tasConfig *core.TASConfigV2, payload ...
method buildTestExecutionArgs (line 477) | func (d *driverV2) buildTestExecutionArgs(payload *core.Payload,
method setCache (line 515) | func (d *driverV2) setCache(tasConfig *core.TASConfigV2) error {
type setUpResultV2 (line 44) | type setUpResultV2 struct
function getEnv (line 429) | func getEnv(payload *core.Payload, tasConfig *core.TASConfigV2, subModul...
function populateTestDiscoveryV2 (line 454) | func populateTestDiscoveryV2(testDiscoveryResult *core.DiscoveryResult, ...
function GetSubmoduleBasedDiff (line 500) | func GetSubmoduleBasedDiff(diff map[string]int, subModulePath string) ma...
FILE: pkg/driver/driver_v2_test.go
type testArgs (line 8) | type testArgs struct
function TestGetSubmoduleBasedDiff (line 15) | func TestGetSubmoduleBasedDiff(t *testing.T) {
FILE: pkg/errs/nucleus.go
type Err (line 8) | type Err struct
method Error (line 14) | func (e Err) Error() string {
type Error (line 19) | type Error struct
method Error (line 23) | func (e *Error) Error() string {
function New (line 28) | func New(text string) error {
function ErrInvalidPayload (line 33) | func ErrInvalidPayload(errMsg string) error {
function ErrSecretNotFound (line 38) | func ErrSecretNotFound(secret string) error {
type StatusFailed (line 74) | type StatusFailed struct
method Error (line 78) | func (e *StatusFailed) Error() string {
type ErrInvalidConf (line 83) | type ErrInvalidConf struct
method Error (line 89) | func (e ErrInvalidConf) Error() string {
FILE: pkg/errs/nucleus_test.go
function TestError_Error (line 7) | func TestError_Error(t *testing.T) {
function TestErr_Error (line 16) | func TestErr_Error(t *testing.T) {
function Test_ErrInvalidPayload (line 28) | func Test_ErrInvalidPayload(t *testing.T) {
function TestErrSecretNotFound (line 36) | func TestErrSecretNotFound(t *testing.T) {
FILE: pkg/errs/synapse.go
function ERR_BIN_UPD (line 44) | func ERR_BIN_UPD(err string) Err {
function ERR_WS_CTRL_CONN (line 51) | func ERR_WS_CTRL_CONN(err string) Err {
function ERR_WS_CONN (line 58) | func ERR_WS_CONN(err string) Err {
function ERR_WS_CTRL_CONN_DWN (line 65) | func ERR_WS_CTRL_CONN_DWN(err string) Err {
function ERR_DAT_CONN_DWN (line 72) | func ERR_DAT_CONN_DWN(err string) Err {
function ERR_INVALID_WS_URL (line 79) | func ERR_INVALID_WS_URL(err string) Err {
function ERR_SNK_PRX (line 86) | func ERR_SNK_PRX(err string) Err {
function ERR_SNK_PRX_CONN (line 93) | func ERR_SNK_PRX_CONN(err string) Err {
function ERR_WS_WRT (line 100) | func ERR_WS_WRT(err string) Err {
function ERR_WS_RDR (line 107) | func ERR_WS_RDR(err string) Err {
function ERR_ATT_PRX (line 114) | func ERR_ATT_PRX(reqType string, err string) Err {
function ERR_DNS_RLV (line 121) | func ERR_DNS_RLV(err string) Err {
function ERR_VLD_CFG (line 128) | func ERR_VLD_CFG(errs []string) Err {
function ERR_DAT_WS_RD (line 135) | func ERR_DAT_WS_RD(err string) Err {
function ERR_SNK_WRT (line 142) | func ERR_SNK_WRT(err string) Err {
function ERR_API_SRV_STR (line 149) | func ERR_API_SRV_STR(err string) Err {
function ERR_FIL_SRV_STR (line 156) | func ERR_FIL_SRV_STR(err string) Err {
function ERR_DIR_CRT (line 163) | func ERR_DIR_CRT(err string) Err {
function ErrDirDel (line 170) | func ErrDirDel(err string) Err {
function ERR_FIL_CRT (line 177) | func ERR_FIL_CRT(err string) Err {
function ERR_API_WEB_HOK (line 184) | func ERR_API_WEB_HOK(err string) Err {
function ERR_DOCKER_RUN (line 191) | func ERR_DOCKER_RUN(err string) Err {
function ERR_DOCKER_CRT (line 198) | func ERR_DOCKER_CRT(err string) Err {
function ERR_DOCKER_STRT (line 205) | func ERR_DOCKER_STRT(err string) Err {
function ErrDockerVolCrt (line 212) | func ErrDockerVolCrt(err string) Err {
function ErrDockerCP (line 219) | func ErrDockerCP(err string) Err {
function ErrSecretLoad (line 226) | func ErrSecretLoad(err string) Err {
function ERR_JSON_MAR (line 233) | func ERR_JSON_MAR(err string) Err {
function ERR_JSON_UNMAR (line 240) | func ERR_JSON_UNMAR(err string) Err {
function ERR_LT_CRDS (line 247) | func ERR_LT_CRDS() Err {
FILE: pkg/fileutils/fileutils.go
function CopyFile (line 16) | func CopyFile(src, dst string, changeMode bool) (err error) {
function CopyDir (line 62) | func CopyDir(src, dst string, changeMode bool) (err error) {
function CheckIfExists (line 127) | func CheckIfExists(path string) (bool, error) {
function CreateIfNotExists (line 138) | func CreateIfNotExists(path string, isDir bool) error {
FILE: pkg/fileutils/fileutils_test.go
function removeCopiedPath (line 9) | func removeCopiedPath(path string) {
function TestCopyFile (line 17) | func TestCopyFile(t *testing.T) {
function TestCopyDir (line 73) | func TestCopyDir(t *testing.T) {
function TestCheckIfExists (line 128) | func TestCheckIfExists(t *testing.T) {
function TestCreateIfNotExists (line 166) | func TestCreateIfNotExists(t *testing.T) {
FILE: pkg/gitmanager/setup.go
type GitLabSingleFileResponse (line 24) | type GitLabSingleFileResponse struct
type gitManager (line 28) | type gitManager struct
method Clone (line 51) | func (gm *gitManager) Clone(ctx context.Context, payload *core.Payload...
method downloadFile (line 79) | func (gm *gitManager) downloadFile(ctx context.Context, archiveURL, fi...
method copyAndExtractFile (line 99) | func (gm *gitManager) copyAndExtractFile(ctx context.Context, respBody...
method initGit (line 136) | func (gm *gitManager) initGit(ctx context.Context, payload *core.Paylo...
method DownloadFileByCommit (line 179) | func (gm *gitManager) DownloadFileByCommit(ctx context.Context, gitPro...
constant authorization (line 36) | authorization = "Authorization"
function NewGitManager (line 40) | func NewGitManager(logger lumber.Logger, execManager core.ExecutionManag...
function getHeaderMap (line 209) | func getHeaderMap(oauth *core.Oauth) map[string]string {
FILE: pkg/gitmanager/setup_test.go
function Test_downloadFile (line 26) | func Test_downloadFile(t *testing.T) {
function Test_copyAndExtractFile (line 77) | func Test_copyAndExtractFile(t *testing.T) {
function TestClone (line 130) | func TestClone(t *testing.T) {
function removeFile (line 205) | func removeFile(path string) {
FILE: pkg/global/nucleusconstants.go
constant CoverageManifestFileName (line 13) | CoverageManifestFileName = "manifest.json"
constant HomeDir (line 14) | HomeDir = "/home/nucleus"
constant WorkspaceCacheDir (line 15) | WorkspaceCacheDir = "/workspace-cache"
constant RepoDir (line 16) | RepoDir = HomeDir + "/repo"
constant CodeCoverageDir (line 17) | CodeCoverageDir = RepoDir + "/coverage"
constant RepoCacheDir (line 18) | RepoCacheDir = RepoDir + "/__tas"
constant DefaultAPITimeout (line 19) | DefaultAPITimeout = 45 * time.Second
constant DefaultGitCloneTimeout (line 20) | DefaultGitCloneTimeout = 30 * time.Minute
constant SamplingTime (line 21) | SamplingTime = 5 * time.Millisecond
constant RepoSecretPath (line 22) | RepoSecretPath = "/vault/secrets/reposecrets"
constant OauthSecretPath (line 23) | OauthSecretPath = "/vault/secrets/oauth"
constant NeuronRemoteHost (line 24) | NeuronRemoteHost = "http://neuron-service.phoenix.svc.cluster....
constant BlockTestFileLocation (line 25) | BlockTestFileLocation = "/tmp/blocktests.json"
constant SecretRegex (line 26) | SecretRegex = `\${{\s*secrets\.(.*?)\s*}}`
constant ExecutionResultChunkSize (line 27) | ExecutionResultChunkSize = 50
constant TestLocatorsDelimiter (line 28) | TestLocatorsDelimiter = "#TAS#"
constant ExpiryDelta (line 29) | ExpiryDelta = 15 * time.Minute
constant NewTASVersion (line 30) | NewTASVersion = 2
constant ModulePath (line 31) | ModulePath = "MODULE_PATH"
constant PackageJSON (line 32) | PackageJSON = "package.json"
constant SubModuleName (line 33) | SubModuleName = "SUBMODULE_NAME"
constant ArgPattern (line 34) | ArgPattern = "--pattern"
constant ArgConfig (line 35) | ArgConfig = "--config"
constant ArgDiff (line 36) | ArgDiff = "--diff"
constant ArgCommand (line 37) | ArgCommand = "--command"
constant ArgLocator (line 38) | ArgLocator = "--locator-file"
constant ArgFrameworVersion (line 39) | ArgFrameworVersion = "--frameworkVersion"
constant DefaultTASVersion (line 40) | DefaultTASVersion = "1.0.0"
constant TASYmlConfigurationDocLink (line 41) | TASYmlConfigurationDocLink = "https://www.lambdatest.com/support/docs/ta...
function SetNeuronHost (line 67) | func SetNeuronHost(host string) {
FILE: pkg/global/synapseconstants.go
constant GracefulTimeout (line 9) | GracefulTimeout = 100 * time.Second
constant ProxyServerPort (line 10) | ProxyServerPort = "8000"
constant DirectoryPermissions (line 11) | DirectoryPermissions = 0755
constant FilePermissions (line 12) | FilePermissions = 0755
constant VaultSecretDir (line 13) | VaultSecretDir = "/vault/secrets"
constant GitConfigFileName (line 14) | GitConfigFileName = "oauth"
constant RepoSecretsFileName (line 15) | RepoSecretsFileName = "reposecrets"
constant SynapseContainerURL (line 16) | SynapseContainerURL = "http://synapse:8000"
constant NetworkEnvName (line 17) | NetworkEnvName = "NetworkName"
constant AutoRemoveEnv (line 18) | AutoRemoveEnv = "AutoRemove"
constant SynapseHostEnv (line 19) | SynapseHostEnv = "synapsehost"
constant LocalEnv (line 20) | LocalEnv = "local"
constant NetworkName (line 21) | NetworkName = "test-at-scale"
constant AutoRemove (line 22) | AutoRemove = true
constant Local (line 23) | Local = true
constant MaxConnectionAttempts (line 24) | MaxConnectionAttempts = 10
constant ExecutionLogsPath (line 25) | ExecutionLogsPath = "/var/log/synapse"
constant PingWait (line 26) | PingWait = 30 * time.Second
constant MaxMessageSize (line 27) | MaxMessageSize = 4096
function init (line 36) | func init() {
FILE: pkg/listsubmoduleservice/setup.go
type subModuleListService (line 14) | type subModuleListService struct
method Send (line 28) | func (s *subModuleListService) Send(ctx context.Context, buildID strin...
function New (line 20) | func New(request core.Requests, logger lumber.Logger) core.ListSubModule...
FILE: pkg/logstream/mask.go
constant maskedStr (line 9) | maskedStr = "****************"
type masker (line 13) | type masker struct
method Write (line 45) | func (m *masker) Write(p []byte) (n int, err error) {
function NewMasker (line 19) | func NewMasker(w io.Writer, secretData map[string]string) io.Writer {
FILE: pkg/logstream/mask_test.go
constant keyLine (line 8) | keyLine = `{
function TestReplace (line 12) | func TestReplace(t *testing.T) {
function TestReplaceMultiline (line 26) | func TestReplaceMultiline(t *testing.T) {
function TestSkipSingleCharacterMask (line 56) | func TestSkipSingleCharacterMask(t *testing.T) {
function TestReplaceMultilineJson (line 69) | func TestReplaceMultilineJson(t *testing.T) {
FILE: pkg/logwriter/setup.go
type BufferLogWriter (line 14) | type BufferLogWriter struct
method Write (line 47) | func (b *BufferLogWriter) Write(ctx context.Context, reader io.Reader)...
type AzureLogWriter (line 20) | type AzureLogWriter struct
method Write (line 66) | func (a *AzureLogWriter) Write(ctx context.Context, reader io.Reader) ...
function NewAzureLogWriter (line 27) | func NewAzureLogWriter(azureClient core.AzureClient,
function NewBufferLogWriter (line 37) | func NewBufferLogWriter(subModule string,
FILE: pkg/logwriter/setup_test.go
function Test_azure_write_logger_strategy (line 16) | func Test_azure_write_logger_strategy(t *testing.T) {
function mockUtil (line 117) | func mockUtil(azureClient *mocks.AzureClient, msgGet, msgCreate, errGet,...
FILE: pkg/lumber/logio.go
type Writer (line 8) | type Writer struct
method Write (line 25) | func (w *Writer) Write(bs []byte) (n int, err error) {
method writeLine (line 35) | func (w *Writer) writeLine(line []byte) (remaining []byte) {
method Close (line 63) | func (w *Writer) Close() error {
method Sync (line 69) | func (w *Writer) Sync() error {
method flush (line 79) | func (w *Writer) flush(allowEmpty bool) {
method log (line 86) | func (w *Writer) log(b []byte) {
function NewWriter (line 16) | func NewWriter(log Logger) *Writer {
FILE: pkg/lumber/logrus.go
type logrusLogEntry (line 11) | type logrusLogEntry struct
method Debugf (line 103) | func (l *logrusLogEntry) Debugf(format string, args ...interface{}) {
method Infof (line 107) | func (l *logrusLogEntry) Infof(format string, args ...interface{}) {
method Warnf (line 111) | func (l *logrusLogEntry) Warnf(format string, args ...interface{}) {
method Errorf (line 115) | func (l *logrusLogEntry) Errorf(format string, args ...interface{}) {
method Fatalf (line 119) | func (l *logrusLogEntry) Fatalf(format string, args ...interface{}) {
method Panicf (line 123) | func (l *logrusLogEntry) Panicf(format string, args ...interface{}) {
method WithFields (line 127) | func (l *logrusLogEntry) WithFields(fields Fields) Logger {
type logrusLogger (line 15) | type logrusLogger struct
method Debugf (line 73) | func (l *logrusLogger) Debugf(format string, args ...interface{}) {
method Infof (line 77) | func (l *logrusLogger) Infof(format string, args ...interface{}) {
method Warnf (line 81) | func (l *logrusLogger) Warnf(format string, args ...interface{}) {
method Errorf (line 85) | func (l *logrusLogger) Errorf(format string, args ...interface{}) {
method Fatalf (line 89) | func (l *logrusLogger) Fatalf(format string, args ...interface{}) {
method Panicf (line 93) | func (l *logrusLogger) Panicf(format string, args ...interface{}) {
method WithFields (line 97) | func (l *logrusLogger) WithFields(fields Fields) Logger {
function getFormatter (line 19) | func getFormatter(isJSON bool) logrus.Formatter {
function newLogrusLogger (line 29) | func newLogrusLogger(config LoggingConfig, verbose bool) (Logger, error) {
function convertToLogrusFields (line 133) | func convertToLogrusFields(fields Fields) logrus.Fields {
FILE: pkg/lumber/setup.go
type LoggingConfig (line 9) | type LoggingConfig struct
type Fields (line 20) | type Fields
constant Debug (line 24) | Debug = "debug"
constant Info (line 26) | Info = "info"
constant Warn (line 28) | Warn = "warn"
constant Error (line 30) | Error = "error"
constant Fatal (line 32) | Fatal = "fatal"
constant InstanceZapLogger (line 37) | InstanceZapLogger int = iota
constant InstanceLogrusLogger (line 38) | InstanceLogrusLogger
type Logger (line 42) | type Logger interface
function NewLogger (line 63) | func NewLogger(config LoggingConfig, verbose bool, loggerInstance int) (...
FILE: pkg/lumber/zap.go
type zapLogger (line 11) | type zapLogger struct
method Debugf (line 83) | func (l *zapLogger) Debugf(format string, args ...interface{}) {
method Infof (line 87) | func (l *zapLogger) Infof(format string, args ...interface{}) {
method Warnf (line 91) | func (l *zapLogger) Warnf(format string, args ...interface{}) {
method Errorf (line 95) | func (l *zapLogger) Errorf(format string, args ...interface{}) {
method Fatalf (line 99) | func (l *zapLogger) Fatalf(format string, args ...interface{}) {
method Panicf (line 103) | func (l *zapLogger) Panicf(format string, args ...interface{}) {
method WithFields (line 107) | func (l *zapLogger) WithFields(fields Fields) Logger {
constant callDepth (line 15) | callDepth = 2
function getEncoder (line 17) | func getEncoder(isJSON bool) zapcore.Encoder {
function getZapLevel (line 27) | func getZapLevel(level string) zapcore.Level {
function newZapLogger (line 44) | func newZapLogger(config LoggingConfig, verbose bool) Logger {
FILE: pkg/payloadmanager/setup.go
type payloadManager (line 16) | type payloadManager struct
method FetchPayload (line 34) | func (pm *payloadManager) FetchPayload(ctx context.Context, payloadAdd...
method ValidatePayload (line 46) | func (pm *payloadManager) ValidatePayload(ctx context.Context, payload...
function NewPayloadManger (line 24) | func NewPayloadManger(azureClient core.AzureClient,
FILE: pkg/payloadmanager/setup_test.go
type validatePayloadArgs (line 23) | type validatePayloadArgs struct
type testCaseValidatePayload (line 31) | type testCaseValidatePayload struct
function getPayloadManagerArgs (line 38) | func getPayloadManagerArgs() (core.AzureClient, lumber.Logger, *config.N...
function Test_payloadManager_FetchPayload (line 52) | func Test_payloadManager_FetchPayload(t *testing.T) {
function Test_payloadManager_ValidatePayload (line 120) | func Test_payloadManager_ValidatePayload(t *testing.T) {
function getValidatePayloadTestCases (line 167) | func getValidatePayloadTestCases() []*testCaseValidatePayload {
FILE: pkg/procfs/procfs.go
constant hundred (line 16) | hundred = 100
type Proc (line 19) | type Proc struct
method GetStats (line 51) | func (ps *Proc) GetStats() (stat *Stats, err error) {
method GetStatsInInterval (line 92) | func (ps *Proc) GetStatsInInterval() []*Stats {
method GetStatsInIntervalWithContext (line 97) | func (ps *Proc) GetStatsInIntervalWithContext(ctx context.Context) []*...
type Stats (line 27) | type Stats struct
function New (line 37) | func New(pid int32, samplingInterval time.Duration, usePss bool) (*Proc,...
FILE: pkg/proxyserver/proxyhandler.go
type ProxyHandler (line 16) | type ProxyHandler struct
method HandlerProxy (line 37) | func (ph *ProxyHandler) HandlerProxy(w http.ResponseWriter, r *http.Re...
constant synapseURL (line 21) | synapseURL = "/synapse"
function NewProxyHandler (line 24) | func NewProxyHandler(logger lumber.Logger) (*ProxyHandler, error) {
FILE: pkg/proxyserver/setup.go
function ListenAndServe (line 14) | func ListenAndServe(ctx context.Context, proxyHandler *ProxyHandler, con...
FILE: pkg/requestutils/request.go
type requests (line 19) | type requests struct
method MakeAPIRequest (line 33) | func (r *requests) MakeAPIRequest(
function New (line 25) | func New(logger lumber.Logger, requestTimeout time.Duration, retryBackof...
FILE: pkg/runner/docker/config.go
constant defaultVaultPath (line 23) | defaultVaultPath = "/vault/secrets"
constant repoSourcePath (line 24) | repoSourcePath = "/tmp/synapse/%s/nucleus"
constant nanoCPUUnit (line 25) | nanoCPUUnit = 1e9
constant volumePrefix (line 26) | volumePrefix = "tas-build"
method getVolumeName (line 29) | func (d *docker) getVolumeName(r *core.RunnerOptions) string {
method getVolumeConfiguration (line 33) | func (d *docker) getVolumeConfiguration(r *core.RunnerOptions) *volume.V...
method getContainerConfiguration (line 41) | func (d *docker) getContainerConfiguration(r *core.RunnerOptions) *conta...
method getContainerHostConfiguration (line 51) | func (d *docker) getContainerHostConfiguration(r *core.RunnerOptions) *c...
method getContainerNetworkConfiguration (line 93) | func (d *docker) getContainerNetworkConfiguration() (*network.Networking...
function getSpecs (line 119) | func getSpecs(tier core.Tier) core.Specs {
FILE: pkg/runner/docker/docker.go
constant buildCacheExpiry (line 32) | buildCacheExpiry time.Duration = 4 * time.Hour
constant BuildID (line 33) | BuildID = "build-id"
type docker (line 40) | type docker struct
method CreateVolume (line 87) | func (d *docker) CreateVolume(ctx context.Context, r *core.RunnerOptio...
method CopyFileToContainer (line 101) | func (d *docker) CopyFileToContainer(ctx context.Context, path, fileNa...
method Create (line 129) | func (d *docker) Create(ctx context.Context, r *core.RunnerOptions) co...
method Destroy (line 212) | func (d *docker) Destroy(ctx context.Context, r *core.RunnerOptions) e...
method Run (line 237) | func (d *docker) Run(ctx context.Context, r *core.RunnerOptions) core....
method WaitForCompletion (line 276) | func (d *docker) WaitForCompletion(ctx context.Context, r *core.Runner...
method GetInfo (line 297) | func (d *docker) GetInfo(ctx context.Context) (cpu float32, ram int64) {
method Initiate (line 301) | func (d *docker) Initiate(ctx context.Context, r *core.RunnerOptions, ...
method KillRunningDocker (line 332) | func (d *docker) KillRunningDocker(ctx context.Context) {
method KillContainerForBuildID (line 341) | func (d *docker) KillContainerForBuildID(buildID string) error {
method PullImage (line 354) | func (d *docker) PullImage(containerImageConfig *core.ContainerImageCo...
method writeLogs (line 386) | func (d *docker) writeLogs(ctx context.Context, r *core.RunnerOptions)...
method FindVolumes (line 418) | func (d *docker) FindVolumes(volumeName string) (bool, error) {
method RemoveVolume (line 432) | func (d *docker) RemoveVolume(ctx context.Context, volumeName string) ...
method RemoveOldVolumes (line 439) | func (d *docker) RemoveOldVolumes(ctx context.Context) {
function newDockerClient (line 51) | func newDockerClient(secretsManager core.SecretsManager) (*docker, error) {
function New (line 71) | func New(secretsManager core.SecretsManager,
function removeContainerID (line 256) | func removeContainerID(slice []*core.RunnerOptions, r *core.RunnerOption...
FILE: pkg/runner/docker/docker_test.go
function getRunnerOptions (line 18) | func getRunnerOptions() *core.RunnerOptions {
function TestDockerCreate (line 33) | func TestDockerCreate(t *testing.T) {
function TestDockerRun (line 43) | func TestDockerRun(t *testing.T) {
function TestDockerWaitCompletion (line 57) | func TestDockerWaitCompletion(t *testing.T) {
function TestDockerDestroyWithoutRunning (line 74) | func TestDockerDestroyWithoutRunning(t *testing.T) {
function TestDockerDestroyWithRunningWoAutoRemove (line 88) | func TestDockerDestroyWithRunningWoAutoRemove(t *testing.T) {
function TestDockerDestroyWithRunningWithAutoRemove (line 106) | func TestDockerDestroyWithRunningWithAutoRemove(t *testing.T) {
function TestDockerPullAlways (line 124) | func TestDockerPullAlways(t *testing.T) {
function TestDockerPullNever (line 137) | func TestDockerPullNever(t *testing.T) {
function TestDockerVolumes (line 150) | func TestDockerVolumes(t *testing.T) {
FILE: pkg/runner/docker/setup_test.go
function createNetworkIfNotExists (line 23) | func createNetworkIfNotExists(dockerClient *client.Client, networkName s...
function deletNetworkIfExists (line 44) | func deletNetworkIfExists(dockerClient *client.Client, networkName strin...
function TestMain (line 61) | func TestMain(m *testing.M) {
FILE: pkg/secret/secret.go
type secretParser (line 17) | type secretParser struct
method GetRepoSecret (line 31) | func (s *secretParser) GetRepoSecret(path string) (map[string]string, ...
method GetOauthSecret (line 52) | func (s *secretParser) GetOauthSecret(path string) (*core.Oauth, error) {
method SubstituteSecret (line 81) | func (s *secretParser) SubstituteSecret(command string, secretData map...
method Expired (line 102) | func (s *secretParser) Expired(token *core.Oauth) bool {
function New (line 23) | func New(logger lumber.Logger) core.SecretParser {
FILE: pkg/secret/secret_test.go
function TestGetRepoSecret (line 18) | func TestGetRepoSecret(t *testing.T) {
function TestGetOauthSecret (line 52) | func TestGetOauthSecret(t *testing.T) {
function TestSubstituteSecret (line 93) | func TestSubstituteSecret(t *testing.T) {
function TestExpired (line 156) | func TestExpired(t *testing.T) {
FILE: pkg/secrets/secrets.go
type secertManager (line 14) | type secertManager struct
method GetLambdatestSecrets (line 27) | func (s *secertManager) GetLambdatestSecrets() *config.LambdatestConfig {
method GetSynapseName (line 32) | func (s *secertManager) GetSynapseName() string {
method GetGitSecretBytes (line 36) | func (s *secertManager) GetGitSecretBytes() ([]byte, error) {
method GetRepoSecretBytes (line 50) | func (s *secertManager) GetRepoSecretBytes(repo string) ([]byte, error) {
method GetDockerSecrets (line 63) | func (s *secertManager) GetDockerSecrets(r *core.RunnerOptions) (core....
method GetOauthToken (line 93) | func (s *secertManager) GetOauthToken() *core.Oauth {
function New (line 20) | func New(cfg *config.SynapseConfig, logger lumber.Logger) core.SecretsMa...
FILE: pkg/secrets/secrets_test.go
function removeCreatedPath (line 11) | func removeCreatedPath(path string) {
function TestGetLambdatestSecrets (line 18) | func TestGetLambdatestSecrets(t *testing.T) {
FILE: pkg/secrets/setup_test.go
constant testdDataDir (line 16) | testdDataDir = "./testdata"
function TestMain (line 18) | func TestMain(m *testing.M) {
FILE: pkg/server/setup.go
function ListenAndServe (line 14) | func ListenAndServe(ctx context.Context, router api.Router, config *conf...
FILE: pkg/service/coverage/coverage.go
constant coverageJSONFileName (line 29) | coverageJSONFileName = "coverage-final.json"
constant mergedcoverageJSON (line 30) | mergedcoverageJSON = "coverage-merged.json"
constant compressedFileName (line 31) | compressedFileName = "coverage-files.tzst"
constant manifestJSONFileName (line 32) | manifestJSONFileName = "manifest.json"
constant coverageFilePath (line 33) | coverageFilePath = "/scripts/mapCoverage.js"
type codeCoverageService (line 36) | type codeCoverageService struct
method mergeCodeCoverageFiles (line 73) | func (c *codeCoverageService) mergeCodeCoverageFiles(ctx context.Conte...
method MergeAndUpload (line 104) | func (c *codeCoverageService) MergeAndUpload(ctx context.Context, payl...
method uploadFile (line 188) | func (c *codeCoverageService) uploadFile(ctx context.Context, blobPath...
method parseManifestFile (line 203) | func (c *codeCoverageService) parseManifestFile(filepath string) (core...
method downloadAndDecompressParentCommitDir (line 218) | func (c *codeCoverageService) downloadAndDecompressParentCommitDir(ctx...
method copyFromParentCommitDir (line 270) | func (c *codeCoverageService) copyFromParentCommitDir(parentCommitDir,...
method getParentCommitCoverageDir (line 307) | func (c *codeCoverageService) getParentCommitCoverageDir(repoID, commi...
method sendCoverageData (line 349) | func (c *codeCoverageService) sendCoverageData(payload []coverageData)...
method getTotalCoverage (line 378) | func (c *codeCoverageService) getTotalCoverage(filepath string) (json....
function New (line 47) | func New(execManager core.ExecutionManager,
FILE: pkg/service/coverage/coverage_test.go
function Test_codeCoverageService_mergeCodeCoverageFiles (line 23) | func Test_codeCoverageService_mergeCodeCoverageFiles(t *testing.T) {
function Test_codeCoverageService_uploadFile (line 103) | func Test_codeCoverageService_uploadFile(t *testing.T) {
function Test_codeCoverageService_parseManifestFile (line 168) | func Test_codeCoverageService_parseManifestFile(t *testing.T) {
function Test_codeCoverageService_downloadAndDecompressParentCommitDir (line 206) | func Test_codeCoverageService_downloadAndDecompressParentCommitDir(t *te...
function Test_codeCoverageService_getParentCommitCoverageDir (line 260) | func Test_codeCoverageService_getParentCommitCoverageDir(t *testing.T) {
function Test_codeCoverageService_sendCoverageData (line 336) | func Test_codeCoverageService_sendCoverageData(t *testing.T) {
function Test_codeCoverageService_getTotalCoverage (line 398) | func Test_codeCoverageService_getTotalCoverage(t *testing.T) {
function newCodeCoverageService (line 438) | func newCodeCoverageService(logger lumber.Logger,
function initialiseArgs (line 457) | func initialiseArgs() (logger lumber.Logger,
function removeCreatedFile (line 472) | func removeCreatedFile(path string) {
FILE: pkg/service/coverage/models.go
type parentCommitCoverage (line 5) | type parentCommitCoverage struct
type coverageData (line 10) | type coverageData struct
FILE: pkg/service/teststats/teststats.go
type ProcStats (line 16) | type ProcStats struct
method CaptureTestStats (line 34) | func (s *ProcStats) CaptureTestStats(pid int32, collectStats bool) err...
method getProcsForInterval (line 72) | func (s *ProcStats) getProcsForInterval(start, end time.Time, processS...
method appendStatsToTests (line 84) | func (s *ProcStats) appendStatsToTests(testResults []core.TestPayload,...
method appendStatsToTestSuites (line 98) | func (s *ProcStats) appendStatsToTestSuites(testSuiteResults []core.Te...
function New (line 24) | func New(cfg *config.NucleusConfig, logger lumber.Logger) (*ProcStats, e...
FILE: pkg/service/teststats/teststats_test.go
function getDummyTimeMap (line 16) | func getDummyTimeMap() map[string]time.Time {
function TestNew (line 33) | func TestNew(t *testing.T) {
function TestProcStats_getProcsForInterval (line 68) | func TestProcStats_getProcsForInterval(t *testing.T) {
function TestProcStats_appendStatsToTests (line 144) | func TestProcStats_appendStatsToTests(t *testing.T) {
function TestProcStats_appendStatsToTestSuites (line 230) | func TestProcStats_appendStatsToTestSuites(t *testing.T) {
FILE: pkg/synapse/synapse.go
constant Repo (line 22) | Repo = "repo"
constant BuildID (line 23) | BuildID = "build-id"
constant JobID (line 24) | JobID = "job-id"
constant Mode (line 25) | Mode = "mode"
constant ID (line 26) | ID = "id"
constant DuplicateConnectionErr (line 27) | DuplicateConnectionErr = "Synapse already has an open connection"
constant AuthenticationFailed (line 28) | AuthenticationFailed = "Synapse authentication failed"
constant duplicateConnectionSleepDuration (line 29) | duplicateConnectionSleepDuration = 15 * time.Second
type synapse (line 34) | type synapse struct
method InitiateConnection (line 67) | func (s *synapse) InitiateConnection(
method openAndMaintainConnection (line 85) | func (s *synapse) openAndMaintainConnection(ctx context.Context, conne...
method connectionHandler (line 126) | func (s *synapse) connectionHandler(ctx context.Context, conn *websock...
method messageReader (line 158) | func (s *synapse) messageReader(normalCloser chan struct{}, conn *webs...
method processMessage (line 207) | func (s *synapse) processMessage(msg []byte, duplicateConnectionChan c...
method processErrorMessage (line 235) | func (s *synapse) processErrorMessage(message core.Message, duplicateC...
method processAbortBuild (line 247) | func (s *synapse) processAbortBuild(message core.Message) {
method processTask (line 258) | func (s *synapse) processTask(message core.Message) {
method runAndUpdateJobStatus (line 279) | func (s *synapse) runAndUpdateJobStatus(runnerOpts *core.RunnerOptions) {
method login (line 305) | func (s *synapse) login() {
method logout (line 327) | func (s *synapse) logout() {
method sendResourceUpdates (line 343) | func (s *synapse) sendResourceUpdates(
method writeMessageToBuffer (line 360) | func (s *synapse) writeMessageToBuffer(message *core.Message) {
method messageWriter (line 370) | func (s *synapse) messageWriter(conn *websocket.Conn) {
method processYMLParsingRequest (line 387) | func (s *synapse) processYMLParsingRequest(message core.Message) {
function New (line 48) | func New(
FILE: pkg/synapse/utils.go
function CreateLoginMessage (line 10) | func CreateLoginMessage(loginDetails core.LoginDetails) core.Message {
function CreateLogoutMessage (line 23) | func CreateLogoutMessage() core.Message {
function CreateJobInfo (line 32) | func CreateJobInfo(status core.StatusType, runnerOpts *core.RunnerOption...
function CreateJobUpdateMessage (line 45) | func CreateJobUpdateMessage(jobInfo core.JobInfo) core.Message {
function CreateResourceStatsMessage (line 59) | func CreateResourceStatsMessage(resourceStats core.ResourceStats) core.M...
function GetResources (line 72) | func GetResources(tierOpts core.Tier) core.Specs {
function createYMlParsingResultMessage (line 80) | func createYMlParsingResultMessage(ymlParsingOutput core.YMLParsingResul...
FILE: pkg/synapse/utils_test.go
function TestCreateLoginMessage (line 11) | func TestCreateLoginMessage(t *testing.T) {
function TestCreateLogoutMessage (line 26) | func TestCreateLogoutMessage(t *testing.T) {
function TestCreateJobUpdateMessage (line 32) | func TestCreateJobUpdateMessage(t *testing.T) {
function TestCreateResourceStatsMessage (line 49) | func TestCreateResourceStatsMessage(t *testing.T) {
FILE: pkg/tasconfigdownloader/setup.go
constant ymlVersionMismtachRemarks (line 16) | ymlVersionMismtachRemarks = "the yml structure is invalid, please check ...
type TASConfigDownloader (line 18) | type TASConfigDownloader struct
method GetTASConfig (line 32) | func (t *TASConfigDownloader) GetTASConfig(ctx context.Context, gitPro...
method checkYmlValidityForOtherVersion (line 64) | func (t *TASConfigDownloader) checkYmlValidityForOtherVersion(ctx cont...
function New (line 24) | func New(logger lumber.Logger) *TASConfigDownloader {
FILE: pkg/tasconfigmanager/setup.go
constant packageJSON (line 18) | packageJSON = "package.json"
type tasConfigManager (line 29) | type tasConfigManager struct
method LoadAndValidate (line 38) | func (tc *tasConfigManager) LoadAndValidate(ctx context.Context,
method validateYMLV1 (line 57) | func (tc *tasConfigManager) validateYMLV1(ctx context.Context,
method validateYMLV2 (line 98) | func (tc *tasConfigManager) validateYMLV2(ctx context.Context,
method GetVersion (line 152) | func (tc *tasConfigManager) GetVersion(path string) (int, error) {
method GetTasConfigFilePath (line 169) | func (tc *tasConfigManager) GetTasConfigFilePath(payload *core.Payload...
function NewTASConfigManager (line 34) | func NewTASConfigManager(logger lumber.Logger) core.TASConfigManager {
function isValidLicenseTier (line 88) | func isValidLicenseTier(yamlTier, licenseTier core.Tier) error {
FILE: pkg/tasconfigmanager/setup_test.go
function assertTasConfigV1 (line 15) | func assertTasConfigV1(got, want *core.TASConfig) error {
function assertTasConfigV2 (line 52) | func assertTasConfigV2(got, want *core.TASConfigV2) error {
function assertMergeV2 (line 73) | func assertMergeV2(got, want *core.MergeV2, mode string) error {
function TestLoadAndValidateV1 (line 84) | func TestLoadAndValidateV1(t *testing.T) {
function TestLoadAndValidateV2 (line 175) | func TestLoadAndValidateV2(t *testing.T) {
FILE: pkg/task/task.go
type task (line 15) | type task struct
method UpdateStatus (line 30) | func (t *task) UpdateStatus(ctx context.Context, payload *core.TaskPay...
function New (line 22) | func New(requests core.Requests, logger lumber.Logger) (core.Task, error) {
FILE: pkg/task/task_test.go
constant taskE (line 20) | taskE = "/task"
constant non200 (line 21) | non200 = "non 200 status code"
function TestTask_UpdateStatus (line 24) | func TestTask_UpdateStatus(t *testing.T) {
function TestTask_UpdateStatusForError (line 81) | func TestTask_UpdateStatusForError(t *testing.T) {
FILE: pkg/testdiscoveryservice/testdiscovery.go
type testDiscoveryService (line 18) | type testDiscoveryService struct
method Discover (line 41) | func (tds *testDiscoveryService) Discover(ctx context.Context, discove...
method shouldImpactAll (line 90) | func (tds *testDiscoveryService) shouldImpactAll(smartRun bool, config...
method SendResult (line 104) | func (tds *testDiscoveryService) SendResult(ctx context.Context, testD...
function NewTestDiscoveryService (line 27) | func NewTestDiscoveryService(ctx context.Context,
FILE: pkg/testdiscoveryservice/testdiscovery_test.go
type argsV1 (line 18) | type argsV1 struct
type testV1 (line 23) | type testV1 struct
function Test_testDiscoveryService_Discover (line 31) | func Test_testDiscoveryService_Discover(t *testing.T) {
function getTestCases (line 73) | func getTestCases() []*testV1 {
FILE: pkg/testexecutionservice/testexecution.go
constant locatorFile (line 23) | locatorFile = "locators"
type testExecutionService (line 25) | type testExecutionService struct
method Run (line 52) | func (tes *testExecutionService) Run(ctx context.Context,
method SendResults (line 144) | func (tes *testExecutionService) SendResults(ctx context.Context,
method getLocatorsFile (line 168) | func (tes *testExecutionService) getLocatorsFile(ctx context.Context, ...
method closeAndWriteLog (line 189) | func (tes *testExecutionService) closeAndWriteLog(azureWriter *io.Pipe...
method buildCmdArgs (line 196) | func (tes *testExecutionService) buildCmdArgs(ctx context.Context,
function NewTestExecutionService (line 36) | func NewTestExecutionService(cfg *config.NucleusConfig,
function getPatternAndEnvV1 (line 133) | func getPatternAndEnvV1(payload *core.Payload, tasConfig *core.TASConfig...
FILE: pkg/testexecutionservice/testexecution_test.go
function TestNewTestExecutionService (line 26) | func TestNewTestExecutionService(t *testing.T) {
function Test_testExecutionService_GetLocatorsFile (line 64) | func Test_testExecutionService_GetLocatorsFile(t *testing.T) {
FILE: pkg/tests/testutils.go
function MockConfig (line 8) | func MockConfig() *config.SynapseConfig {
FILE: pkg/urlmanager/urlmanager.go
function GetCloneURL (line 14) | func GetCloneURL(gitprovider, repoLink, repo, commitID, forkSlug, repoSl...
function GetCommitDiffURL (line 38) | func GetCommitDiffURL(gitprovider, path, baseCommit, targetCommit, forkS...
function GetPullRequestDiffURL (line 64) | func GetPullRequestDiffURL(gitprovider, path string, prNumber int) (stri...
function GetFileDownloadURL (line 85) | func GetFileDownloadURL(gitprovider, commitID, repoSlug, filePath string...
FILE: pkg/urlmanager/urlmanager_test.go
function TestGetCloneURL (line 10) | func TestGetCloneURL(t *testing.T) {
function TestGetCommitDiffURL (line 58) | func TestGetCommitDiffURL(t *testing.T) {
function TestGetPullRequestDiffURL (line 105) | func TestGetPullRequestDiffURL(t *testing.T) {
FILE: pkg/utils/utils.go
constant namespaceSeparator (line 27) | namespaceSeparator = "."
constant emptyTagName (line 28) | emptyTagName = "-"
constant yamlTagName (line 29) | yamlTagName = "yaml"
constant requiredTagName (line 30) | requiredTagName = "required"
constant v1 (line 31) | v1 = 1
constant v2 (line 32) | v2 = 2
function Min (line 36) | func Min(x, y int) int {
function ComputeChecksum (line 44) | func ComputeChecksum(filename string) (string, error) {
function InterfaceToMap (line 64) | func InterfaceToMap(in interface{}) map[string]string {
function CreateDirectory (line 73) | func CreateDirectory(path string) error {
function DeleteDirectory (line 83) | func DeleteDirectory(path string) error {
function WriteFileToDirectory (line 91) | func WriteFileToDirectory(path, filename string, data []byte) error {
function GetOutboundIP (line 100) | func GetOutboundIP() string {
function GetConfigFileName (line 105) | func GetConfigFileName(path string) (string, error) {
function ValidateStructTASYmlV1 (line 125) | func ValidateStructTASYmlV1(ctx context.Context, ymlContent []byte, ymlF...
function configureValidator (line 141) | func configureValidator(validate *validator.Validate, trans ut.Translato...
function GetVersion (line 162) | func GetVersion(ymlContent []byte) (int, error) {
function ValidateStructTASYmlV2 (line 177) | func ValidateStructTASYmlV2(ctx context.Context, ymlContent []byte, ymlF...
function getValidator (line 193) | func getValidator() (*validator.Validate, error) {
function validateStruct (line 205) | func validateStruct(validate *validator.Validate, config interface{}, ym...
function ValidateSubModule (line 227) | func ValidateSubModule(module *core.SubModule) error {
function GetDefaultQueryAndHeaders (line 242) | func GetDefaultQueryAndHeaders() (query map[string]interface{}, headers ...
function GetArgs (line 255) | func GetArgs(command string, frameWork string, frameworkVersion int,
function GetTASFilePath (line 281) | func GetTASFilePath(path string) (string, error) {
function GenerateUUID (line 291) | func GenerateUUID() string {
function ValidateStructTASYml (line 302) | func ValidateStructTASYml(ctx context.Context, ymlContent []byte, ymlFil...
FILE: pkg/utils/utils_test.go
constant directory (line 17) | directory = "../../testutils/testdirectory"
function TestMin (line 20) | func TestMin(t *testing.T) {
function TestComputeChecksum (line 44) | func TestComputeChecksum(t *testing.T) {
function TestCreateDirectory (line 76) | func TestCreateDirectory(t *testing.T) {
function TestWriteFileToDirectory (line 107) | func TestWriteFileToDirectory(t *testing.T) {
function TestGetOutboundIP (line 127) | func TestGetOutboundIP(t *testing.T) {
function TestValidateStructv1 (line 143) | func TestValidateStructv1(t *testing.T) {
function removeCreatedFile (line 229) | func removeCreatedFile(path string) {
function TestValidateStructv2 (line 235) | func TestValidateStructv2(t *testing.T) {
function TestGetVersion (line 315) | func TestGetVersion(t *testing.T) {
function TestValidateSubModule (line 358) | func TestValidateSubModule(t *testing.T) {
FILE: pkg/zstd/zstd.go
type zstdCompressor (line 16) | type zstdCompressor struct
method createManifestFile (line 38) | func (z *zstdCompressor) createManifestFile(workingDir string, fileNam...
method Compress (line 43) | func (z *zstdCompressor) Compress(ctx context.Context, compressedFileN...
method Decompress (line 61) | func (z *zstdCompressor) Decompress(ctx context.Context, filePath stri...
constant manifestFileName (line 23) | manifestFileName = "manifest.txt"
constant executableName (line 24) | executableName = "tar"
function New (line 28) | func New(execManager core.ExecutionManager, logger lumber.Logger) (core....
FILE: pkg/zstd/zstd_test.go
constant tarPath (line 19) | tarPath = "tar"
function TestNew (line 21) | func TestNew(t *testing.T) {
function Test_zstdCompressor_createManifestFile (line 34) | func Test_zstdCompressor_createManifestFile(t *testing.T) {
function Test_zstdCompressor_Compress (line 79) | func Test_zstdCompressor_Compress(t *testing.T) {
function Test_zstdCompressor_Decompress (line 180) | func Test_zstdCompressor_Decompress(t *testing.T) {
FILE: scripts/custom-reporter.js
function nodeMissing (line 4) | function nodeMissing(metrics, fileCoverage) {
class JsonSummaryReport (line 44) | class JsonSummaryReport extends ReportBase {
method constructor (line 45) | constructor(opts) {
method onStart (line 56) | onStart(root, context) {
method writeSummary (line 61) | writeSummary(filePath, sc, uncovered) {
method onSummary (line 77) | onSummary(node) {
method onDetail (line 84) | onDetail(node) {
method onEnd (line 94) | onEnd() {
FILE: testutils/constants.go
constant ApplicationConfigPath (line 5) | ApplicationConfigPath = "/testutils/testdata/sample_config.json"
constant TaskPayloadPath (line 6) | TaskPayloadPath = "/testutils/testdata/taskPayload.json"
constant PayloadPath (line 7) | PayloadPath = "/testutils/testdata/payload.json"
constant GitlabCommitDiff (line 8) | GitlabCommitDiff = "/testutils/testdata/gitlabCommitDiff.json"
FILE: testutils/utils.go
function getCurrentWorkingDir (line 17) | func getCurrentWorkingDir() (string, error) {
function GetConfig (line 27) | func GetConfig() (*config.NucleusConfig, error) {
function GetTaskPayload (line 45) | func GetTaskPayload() (*core.TaskPayload, error) {
function GetLogger (line 63) | func GetLogger() (lumber.Logger, error) {
function GetPayload (line 73) | func GetPayload() (*core.Payload, error) {
function GetGitlabCommitDiff (line 91) | func GetGitlabCommitDiff() ([]byte, error) {
function LoadFile (line 103) | func LoadFile(relativePath string) ([]byte, error) {
Condensed preview — 201 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,119K chars).
[
{
"path": ".github/ISSUE_TEMPLATE/1-bug-report.yaml",
"chars": 1370,
"preview": "name: 🐞 Bug report\ndescription: Create a bug report to help us improve Test-at-scale\ntitle: \"[Bug]: \"\nlabels: [bug, need"
},
{
"path": ".github/ISSUE_TEMPLATE/2-feature-request.yaml",
"chars": 900,
"preview": "name: 🛠️ Feature request\ndescription: Suggest an idea to improve Test-at-scale\ntitle: \"[Feature]: \"\nlabels: [enhancement"
},
{
"path": ".github/ISSUE_TEMPLATE/3-documentation-improvement.yaml",
"chars": 1094,
"preview": "name: 📖 Docs & Tutorials Improvement\ndescription: Suggest improvements to our docs and tutorials \ntitle: \"[Docs & Tutori"
},
{
"path": ".github/pull_request_template.md",
"chars": 1347,
"preview": "# Issue Link\n\nAdd GitHub issue links here.\n\n# Description\n\nPlease include a summary of the change and which issue is fix"
},
{
"path": ".github/workflows/dockerhub-description.yml",
"chars": 1090,
"preview": "name: Update Docker Hub Description\n\non:\n push:\n branches:\n - main\n paths:\n - README.md\n - .github"
},
{
"path": ".github/workflows/env-release-nucleus.yml",
"chars": 1783,
"preview": "name: Release to Environment Nucleus\non:\n workflow_dispatch:\n inputs:\n environment:\n description: 'Envir"
},
{
"path": ".github/workflows/env-release-synapse.yml",
"chars": 1461,
"preview": "name: Release to Environment Synapse\non:\n workflow_dispatch:\n inputs:\n environment:\n description: 'Envir"
},
{
"path": ".github/workflows/premerge.yml",
"chars": 4393,
"preview": "name: CI\n\non:\n pull_request:\n branches:\n - main\n\njobs:\n\n Linting:\n\n name: Golang CI - Linting\n runs-on: "
},
{
"path": ".github/workflows/pull_request_lint.yml",
"chars": 446,
"preview": "name: Pull Request Lint\n\non:\n pull_request:\n types: ['opened', 'edited', 'reopened', 'synchronize', 'labeled', 'unla"
},
{
"path": ".github/workflows/release-patch-wf.yml",
"chars": 2319,
"preview": "# This workflow will release a new patch version of nucleus and synapse\nname: Release Patch Version\n\non:\n workflow_disp"
},
{
"path": ".github/workflows/release.yml",
"chars": 4057,
"preview": "name: Release on Dev\n\non:\n push:\n branches:\n - main\n\njobs:\n\n Release:\n\n runs-on: ubuntu-latest\n\n steps:\n"
},
{
"path": ".github/workflows/stale.yml",
"chars": 416,
"preview": "name: 'Close stale issues and PRs'\non:\n schedule:\n - cron: '30 1 * * *'\n\njobs:\n stale:\n runs-on: ubuntu-latest\n "
},
{
"path": ".gitignore",
"chars": 1430,
"preview": "# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig\n\n# Created by https://www."
},
{
"path": ".golangci.yml",
"chars": 3048,
"preview": "# Uncomment following lines after fixing linting issues in test files\n\nlinters-settings:\n depguard:\n list-type: blac"
},
{
"path": ".sample.synapse.json",
"chars": 460,
"preview": "{\n \"Name\": \"my-synapse-1\",\n \"LogConfig\": {\n \"EnableConsole\": true,\n \"ConsoleJSONFormat\": true,\n \"Consolelevel"
},
{
"path": ".vscode/settings.json",
"chars": 113,
"preview": "{\n \"go.lintTool\": \"golangci-lint\",\n \"go.lintFlags\": [\n \"--fast\"\n ],\n \"go.testTimeout\": \"90s\"\n}"
},
{
"path": "CHANGELOG.md",
"chars": 0,
"preview": ""
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5534,
"preview": "\n# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders of this open-source pro"
},
{
"path": "CONTRIBUTING.md",
"chars": 9114,
"preview": "# Contributing to Test-at-scale\n\nThank you for your interest in Test-at-scale and for taking the time to contribute to t"
},
{
"path": "LICENSE",
"chars": 11316,
"preview": "Apache License\n Version 2.0, January 2004\n http://www.apache.org/licens"
},
{
"path": "Makefile",
"chars": 1134,
"preview": "NUCLEUS_DOCKER_FILE ?= ./build/nucleus/Dockerfile\nNUCLEUS_IMAGE_NAME ?= lambdatest/nucleus:latest\n\nSYNAPSE_DOCKER_FILE ?"
},
{
"path": "README.md",
"chars": 11813,
"preview": "<p align=\"center\">\n <img src=\"https://www.lambdatest.com/blog/wp-content/uploads/2020/08/LambdaTest-320-180.png\" />\n</p"
},
{
"path": "build/nucleus/Dockerfile",
"chars": 3686,
"preview": "FROM golang:latest as builder\n\n# create a working directory\nCOPY . /nucleus\nWORKDIR /nucleus\n\n\n# Build binary\nRUN GOARCH"
},
{
"path": "build/nucleus/build.sh",
"chars": 397,
"preview": "#!/usr/bin\n# exit when any command fails\nset -e\n\n# keep track of the last executed command\ntrap 'last_command=$current_c"
},
{
"path": "build/nucleus/entrypoint.sh",
"chars": 45,
"preview": "#!/bin/sh\n\nexec /usr/local/bin/nucleus \"$@\"\n"
},
{
"path": "build/nucleus/java/test-at-scale-java.jar",
"chars": 0,
"preview": ""
},
{
"path": "build/synapse/Dockerfile",
"chars": 669,
"preview": "FROM golang:latest as builder\n\n# create a working directory\nCOPY . /synapse\nWORKDIR /synapse\n\n# Build binary\nRUN go buil"
},
{
"path": "build/synapse/build.sh",
"chars": 397,
"preview": "#!/usr/bin\n# exit when any command fails\nset -e\n\n# keep track of the last executed command\ntrap 'last_command=$current_c"
},
{
"path": "build/synapse/entrypoint.sh",
"chars": 45,
"preview": "#!/bin/sh\nexec -- /home/synapse/synapse \"$@\"\n"
},
{
"path": "bundle",
"chars": 1,
"preview": "\n"
},
{
"path": "cmd/nucleus/bin.go",
"chars": 7078,
"preview": "package main\n\n// this is cmd/root_cmd.go\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"os/signal\"\n\t\"path/filepath\"\n\t\"string"
},
{
"path": "cmd/nucleus/flags.go",
"chars": 1841,
"preview": "package main\n\nimport (\n\t\"github.com/spf13/cobra\"\n)\n\n//AttachCLIFlags attaches command line flags to command\nfunc AttachC"
},
{
"path": "cmd/nucleus/main.go",
"chars": 226,
"preview": "package main\n\nimport (\n\t\"log\"\n)\n\n// Main function just executes root command `ts`\n// this project structure is inspired "
},
{
"path": "cmd/synapse/bin.go",
"chars": 4889,
"preview": "package main\n\n// this is cmd/root_cmd.go\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"os/signal\"\n\t\"path/filepath\"\n\t\"strcon"
},
{
"path": "cmd/synapse/flags.go",
"chars": 359,
"preview": "package main\n\nimport (\n\t\"github.com/spf13/cobra\"\n)\n\n//AttachCLIFlags attaches command line flags to command\nfunc AttachC"
},
{
"path": "cmd/synapse/main.go",
"chars": 341,
"preview": "package main\n\nimport (\n\t\"log\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/global\"\n)\n\n// Main function just executes root "
},
{
"path": "config/default.go",
"chars": 1100,
"preview": "package config\n\nimport (\n\t\"github.com/LambdaTest/test-at-scale/pkg/global\"\n\t\"github.com/spf13/viper\"\n)\n\nfunc setNucleusD"
},
{
"path": "config/loader.go",
"chars": 3489,
"preview": "package config\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"strings\"\n\n\t\"github.com/LambdaTest/test-at-scal"
},
{
"path": "config/nucleusmodel.go",
"chars": 1244,
"preview": "package config\n\nimport \"github.com/LambdaTest/test-at-scale/pkg/lumber\"\n\n// Model definition for configuration\n\n// Nucle"
},
{
"path": "config/parse.go",
"chars": 2782,
"preview": "package config\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/spf13/viper\"\n)\n\nconst tagPrefix = \"viper\"\n\n// populat"
},
{
"path": "config/parse_test.go",
"chars": 1016,
"preview": "package config\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/spf13/viper\"\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc "
},
{
"path": "config/synapsemodel.go",
"chars": 1273,
"preview": "package config\n\nimport \"github.com/LambdaTest/test-at-scale/pkg/lumber\"\n\n// Model definition for configuration\n\n// Synap"
},
{
"path": "docker-compose.yml",
"chars": 587,
"preview": "version: \"3.9\" \nservices:\n synapse:\n image: lambdatest/synapse:latest\n stop_signal: SIGINT\n restart: on-failur"
},
{
"path": "go.mod",
"chars": 3997,
"preview": "module github.com/LambdaTest/test-at-scale\n\ngo 1.17\n\nrequire (\n\tgithub.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1\n\tgi"
},
{
"path": "go.sum",
"chars": 144856,
"preview": "bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=\ncloud.google.co"
},
{
"path": "mocks/AzureClient.go",
"chars": 4244,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\tio \"io\"\n\n\tcore \"github.c"
},
{
"path": "mocks/BlockTestService.go",
"chars": 1164,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tmock \"github.com/stretc"
},
{
"path": "mocks/Builder.go",
"chars": 1145,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcore \"github.com/LambdaTest/test-at-scale/p"
},
{
"path": "mocks/CacheStore.go",
"chars": 2332,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tmock \"github.com/stretc"
},
{
"path": "mocks/CoverageService.go",
"chars": 1147,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tcore \"github.com/Lambda"
},
{
"path": "mocks/DiffManager.go",
"chars": 1411,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tcore \"github.com/Lambda"
},
{
"path": "mocks/DockerRunner.go",
"chars": 3483,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tcore \"github.com/Lambda"
},
{
"path": "mocks/Driver.go",
"chars": 1975,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tcore \"github.com/Lambda"
},
{
"path": "mocks/ExecutionManager.go",
"chars": 2808,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tcore \"github.com/Lambda"
},
{
"path": "mocks/GitManager.go",
"chars": 1127,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tcore \"github.com/Lambda"
},
{
"path": "mocks/ListSubModuleService.go",
"chars": 1188,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tmock \"github.com/stretc"
},
{
"path": "mocks/LogWriterStrategy.go",
"chars": 1160,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tio \"io\"\n\n\tmock \"github."
},
{
"path": "mocks/Logger.go",
"chars": 2423,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tlumber \"github.com/LambdaTest/test-at-scale"
},
{
"path": "mocks/PayloadManager.go",
"chars": 1740,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tcore \"github.com/Lambda"
},
{
"path": "mocks/Requests.go",
"chars": 1795,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tmock \"github.com/stretc"
},
{
"path": "mocks/SecretParser.go",
"chars": 2552,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcore \"github.com/LambdaTest/test-at-scale/p"
},
{
"path": "mocks/SecretsManager.go",
"chars": 2589,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tconfig \"github.com/LambdaTest/test-at-scale"
},
{
"path": "mocks/SynapseManager.go",
"chars": 987,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tmock \"github.com/stretc"
},
{
"path": "mocks/TASConfigManager.go",
"chars": 2008,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tcore \"github.com/Lambda"
},
{
"path": "mocks/Task.go",
"chars": 1030,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tcore \"github.com/Lambda"
},
{
"path": "mocks/TestDiscoveryService.go",
"chars": 1876,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tcore \"github.com/Lambda"
},
{
"path": "mocks/TestExecutionService.go",
"chars": 2216,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tcore \"github.com/Lambda"
},
{
"path": "mocks/TestStats.go",
"chars": 989,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport mock \"github.com/stretchr/testify/mock\"\n\n// Te"
},
{
"path": "mocks/ZstdCompressor.go",
"chars": 2026,
"preview": "// Code generated by mockery v2.14.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\tmock \"github.com/stretc"
},
{
"path": "pkg/api/health/health.go",
"chars": 206,
"preview": "package health\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/gin-gonic/gin\"\n)\n\n// Handler for health API\nfunc Handler(c *gin.Conte"
},
{
"path": "pkg/api/health/health_test.go",
"chars": 1107,
"preview": "package health\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/gin-gonic/gin\"\n)\n\nf"
},
{
"path": "pkg/api/results/results.go",
"chars": 769,
"preview": "package results\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/service/teststats\"\n\n\t\"github.com/Lambda"
},
{
"path": "pkg/api/results/results_test.go",
"chars": 1759,
"preview": "package results\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/LambdaTes"
},
{
"path": "pkg/api/router.go",
"chars": 1334,
"preview": "package api\n\nimport (\n\t\"github.com/LambdaTest/test-at-scale/pkg/api/health\"\n\t\"github.com/LambdaTest/test-at-scale/pkg/ap"
},
{
"path": "pkg/api/router_test.go",
"chars": 2707,
"preview": "package api\n\nimport (\n\t\"bytes\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-s"
},
{
"path": "pkg/api/testlist/testlist.go",
"chars": 699,
"preview": "package testlist\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/core\"\n\t\"github.com/LambdaTest/test-at-"
},
{
"path": "pkg/azure/client.go",
"chars": 6751,
"preview": "package azure\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/Azure/az"
},
{
"path": "pkg/blocktestservice/setup.go",
"chars": 4949,
"preview": "// Package blocktestservice is used for creating the blocklist file\npackage blocktestservice\n\nimport (\n\t\"context\"\n\t\"enco"
},
{
"path": "pkg/blocktestservice/setup_test.go",
"chars": 6367,
"preview": "// Package blocktestservice is used for creating the blocklist file\npackage blocktestservice\n\nimport (\n\t\"context\"\n\t\"fmt\""
},
{
"path": "pkg/cachemanager/cachemanager.go",
"chars": 6639,
"preview": "package cachemanager\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sync\"\n\n\t\"github.com/LambdaTest"
},
{
"path": "pkg/command/run.go",
"chars": 3451,
"preview": "package command\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg"
},
{
"path": "pkg/command/run_test.go",
"chars": 2917,
"preview": "package command\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"reflect\"\n\t\"sort\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-scale/mocks\"\n\t\"git"
},
{
"path": "pkg/command/script.go",
"chars": 1009,
"preview": "package command\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strings\"\n)\n\n// CreateScript converts a slice of individual shell commands to"
},
{
"path": "pkg/command/script_test.go",
"chars": 2576,
"preview": "package command\n\nimport (\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-scale/mocks\"\n\t\"github.com/LambdaTest/test-at-scale"
},
{
"path": "pkg/core/interfaces.go",
"chars": 7411,
"preview": "package core\n\nimport (\n\t\"context\"\n\t\"io\"\n)\n\n// PayloadManager defines operations for payload\ntype PayloadManager interfac"
},
{
"path": "pkg/core/lifecycle.go",
"chars": 6461,
"preview": "package core\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime/debug\"\n\t\"time\"\n\n\t\"github.com/LambdaT"
},
{
"path": "pkg/core/models.go",
"chars": 17832,
"preview": "// Package core is the backbone of the tunnel client,\n// it defines the tunnel lifecycle and allows attaching hooks for"
},
{
"path": "pkg/core/runner.go",
"chars": 4466,
"preview": "package core\n\nimport (\n\t\"context\"\n\t\"time\"\n\n\t\"github.com/LambdaTest/test-at-scale/config\"\n\t\"github.com/LambdaTest/test-at"
},
{
"path": "pkg/core/secrets.go",
"chars": 914,
"preview": "package core\n\nimport \"github.com/LambdaTest/test-at-scale/config\"\n\n// Secret struct for holding secret data\ntype Secret "
},
{
"path": "pkg/core/synapse.go",
"chars": 291,
"preview": "package core\n\nimport (\n\t\"context\"\n\t\"sync\"\n)\n\n// SynapseManager denfines operations for synapse client\ntype SynapseManage"
},
{
"path": "pkg/core/wsproto.go",
"chars": 2032,
"preview": "package core\n\n// MessageType defines type of message\ntype MessageType string\n\n// StatusType defines type job status\ntype"
},
{
"path": "pkg/cron/setup.go",
"chars": 713,
"preview": "package cron\n\nimport (\n\t\"context\"\n\t\"sync\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/core\"\n\t\"github.com/LambdaTest/test-"
},
{
"path": "pkg/diffmanager/setup.go",
"chars": 6437,
"preview": "// Package diffmanager is used for cloning repo\npackage diffmanager\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"err"
},
{
"path": "pkg/diffmanager/setup_test.go",
"chars": 8595,
"preview": "// Package diffmanager is used for cloning repo\npackage diffmanager\n\nimport (\n\t\"context\"\n\t\"math/rand\"\n\t\"net/http\"\n\t\"net/"
},
{
"path": "pkg/driver/builder.go",
"chars": 3251,
"preview": "package driver\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/core\"\n\t\"github.com/LambdaTes"
},
{
"path": "pkg/driver/builder_test.go",
"chars": 335,
"preview": "package driver\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n)\n\nfunc Test_driver(t *testing.T) {\n\tb := Builder{}\n\tinvalidVersion := 4\n\t_, "
},
{
"path": "pkg/driver/driver_v1.go",
"chars": 10039,
"preview": "/*\nThis file implements core.Driver with operation over TAS config (YAML) version 1\n*/\npackage driver\n\nimport (\n\t\"conte"
},
{
"path": "pkg/driver/driver_v2.go",
"chars": 17364,
"preview": "/*\nThis file implements core.Driver with operation over TAS config (YAML) version 2\n*/\npackage driver\n\nimport (\n\t\"bytes\""
},
{
"path": "pkg/driver/driver_v2_test.go",
"chars": 3501,
"preview": "package driver\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n)\n\ntype testArgs struct {\n\tname string\n\tsubModulePath string\n\tdi"
},
{
"path": "pkg/errs/nucleus.go",
"chars": 3070,
"preview": "package errs\n\nimport (\n\t\"fmt\"\n)\n\n// Err represents structure of a custom error\ntype Err struct {\n\tCode string\n\tMessag"
},
{
"path": "pkg/errs/nucleus_test.go",
"chars": 943,
"preview": "package errs\n\nimport (\n\t\"testing\"\n)\n\nfunc TestError_Error(t *testing.T) {\n\te := New(\"A secret message\")\n\tgot := e.Error("
},
{
"path": "pkg/errs/synapse.go",
"chars": 8336,
"preview": "package errs\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// ERR_DUMMY dummy error\nvar ERR_DUMMY = Err{\n\tCode: \"ERR::DUMMY\",\n\tMessa"
},
{
"path": "pkg/fileutils/fileutils.go",
"chars": 3216,
"preview": "package fileutils\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"io/fs\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// CopyFile copies the contents of the file "
},
{
"path": "pkg/fileutils/fileutils_test.go",
"chars": 4332,
"preview": "package fileutils\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"testing\"\n)\n\nfunc removeCopiedPath(path string) {\n\terr := os.RemoveAll(path)\n\t"
},
{
"path": "pkg/gitmanager/setup.go",
"chars": 6469,
"preview": "// Package gitmanager is used for cloning repo\npackage gitmanager\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"net/h"
},
{
"path": "pkg/gitmanager/setup_test.go",
"chars": 6376,
"preview": "package gitmanager\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"os\"\n\t\"strings"
},
{
"path": "pkg/global/nucleusconstants.go",
"chars": 2830,
"preview": "package global\n\nimport \"time\"\n\n// TestEnv : to set test env for urlmanager package\nvar TestEnv bool = false\n\n// TestServ"
},
{
"path": "pkg/global/synapseconstants.go",
"chars": 1406,
"preview": "package global\n\nimport (\n\t\"time\"\n)\n\n// all constant related to synapse\nconst (\n\tGracefulTimeout = 100 * time.Secon"
},
{
"path": "pkg/global/version.go",
"chars": 209,
"preview": "package global\n\nimport \"os\"\n\nvar (\n\t// NucleusBinaryVersion Nucleus version\n\tNucleusBinaryVersion = os.Getenv(\"VERSION\")"
},
{
"path": "pkg/listsubmoduleservice/setup.go",
"chars": 1356,
"preview": "package listsubmoduleservice\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/http\"\n\n\t\"github.com/LambdaTest/test-at-scale/pk"
},
{
"path": "pkg/logstream/mask.go",
"chars": 991,
"preview": "package logstream\n\nimport (\n\t\"io\"\n\t\"strings\"\n)\n\nconst (\n\tmaskedStr = \"****************\"\n)\n\n// masker wraps a stream writ"
},
{
"path": "pkg/logstream/mask_test.go",
"chars": 2578,
"preview": "package logstream\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n)\n\nconst keyLine = `{\n \"token\":\"dXNlcm5hbWU6cGFzc3dvcmQ=\"\n}`\n\nfunc Test"
},
{
"path": "pkg/logwriter/setup.go",
"chars": 2158,
"preview": "package logwriter\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/core\"\n\t\"github.c"
},
{
"path": "pkg/logwriter/setup_test.go",
"chars": 3946,
"preview": "package logwriter\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-scale/mocks\"\n\t\"githu"
},
{
"path": "pkg/lumber/logio.go",
"chars": 2341,
"preview": "package lumber\n\nimport (\n\t\"bytes\"\n)\n\n// Writer must be closed when finished to flush buffered data to the logger.\ntype W"
},
{
"path": "pkg/lumber/logrus.go",
"chars": 3172,
"preview": "package lumber\n\nimport (\n\t\"io\"\n\t\"os\"\n\n\t\"github.com/sirupsen/logrus\"\n\tlumberjack \"gopkg.in/natefinch/lumberjack.v2\"\n)\n\nty"
},
{
"path": "pkg/lumber/setup.go",
"chars": 2505,
"preview": "// Logging package for tunnel server\n\npackage lumber\n\nimport \"github.com/LambdaTest/test-at-scale/pkg/errs\"\n\n// LoggingC"
},
{
"path": "pkg/lumber/zap.go",
"chars": 2801,
"preview": "package lumber\n\nimport (\n\t\"os\"\n\n\t\"go.uber.org/zap\"\n\t\"go.uber.org/zap/zapcore\"\n\tlumberjack \"gopkg.in/natefinch/lumberjack"
},
{
"path": "pkg/payloadmanager/setup.go",
"chars": 2834,
"preview": "// Package payloadmanager is used for fetching and validating the nucleus execution payload\npackage payloadmanager\n\nimpo"
},
{
"path": "pkg/payloadmanager/setup_test.go",
"chars": 9489,
"preview": "// Package payloadmanager is used for fetching and validating the nucleus execution payload\npackage payloadmanager\n\nimpo"
},
{
"path": "pkg/procfs/procfs.go",
"chars": 2814,
"preview": "//go:build linux\n// +build linux\n\npackage procfs\n\nimport (\n\t\"context\"\n\t\"math\"\n\t\"runtime\"\n\t\"time\"\n\n\t\"github.com/shirou/go"
},
{
"path": "pkg/proxyserver/proxyhandler.go",
"chars": 1339,
"preview": "package proxyserver\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httputil\"\n\t\"net/url\"\n\n\t\"github.com/Lambda"
},
{
"path": "pkg/proxyserver/setup.go",
"chars": 1280,
"preview": "package proxyserver\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\n\t\"github.com/LambdaTest/test-at-scale/config\"\n\t\"github.com/LambdaT"
},
{
"path": "pkg/requestutils/request.go",
"chars": 2412,
"preview": "package requestutils\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"time\"\n\n\t\"g"
},
{
"path": "pkg/runner/docker/config.go",
"chars": 3668,
"preview": "package docker\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/core\"\n\t\"github.co"
},
{
"path": "pkg/runner/docker/docker.go",
"chars": 13790,
"preview": "package docker\n\nimport (\n\t\"archive/tar\"\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n\t\"s"
},
{
"path": "pkg/runner/docker/docker_test.go",
"chars": 5765,
"preview": "package docker\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-scale/config\"\n\t\""
},
{
"path": "pkg/runner/docker/setup_test.go",
"chars": 2484,
"preview": "package docker\n\nimport (\n\t\"context\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-scale/config\"\n\t\"github.com/LambdaT"
},
{
"path": "pkg/secret/secret.go",
"chars": 2875,
"preview": "package secret\n\nimport (\n\t\"encoding/json\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/LambdaTest/test-"
},
{
"path": "pkg/secret/secret_test.go",
"chars": 6875,
"preview": "package secret\n\nimport (\n\t\"errors\"\n\t\"log\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/LambdaTest/test-at"
},
{
"path": "pkg/secrets/secrets.go",
"chars": 2891,
"preview": "package secrets\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"errors\"\n\n\t\"github.com/LambdaTest/test-at-scale/config\"\n\t"
},
{
"path": "pkg/secrets/secrets_test.go",
"chars": 389,
"preview": "package secrets\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc removeCreatedPath(path "
},
{
"path": "pkg/secrets/setup_test.go",
"chars": 617,
"preview": "package secrets\n\nimport (\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-scale/config\"\n\t\"github.com/LambdaTest/test-a"
},
{
"path": "pkg/server/setup.go",
"chars": 1266,
"preview": "package server\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\n\t\"github.com/LambdaTest/test-at-scale/config\"\n\t\"github.com/LambdaTest/t"
},
{
"path": "pkg/service/coverage/coverage.go",
"chars": 13212,
"preview": "package coverage\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/fs\"\n\t\"io/ioutil\"\n\t\"net/http\""
},
{
"path": "pkg/service/coverage/coverage_test.go",
"chars": 13808,
"preview": "package coverage\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"os\"\n\t\"path/filepa"
},
{
"path": "pkg/service/coverage/models.go",
"chars": 445,
"preview": "package coverage\n\nimport \"encoding/json\"\n\ntype parentCommitCoverage struct {\n\tBloblink string `json:\"blob_link\"`\n\tPa"
},
{
"path": "pkg/service/teststats/teststats.go",
"chars": 4105,
"preview": "package teststats\n\nimport (\n\t\"sort\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/LambdaTest/test-at-scale/config\"\n\t\"github.com/LambdaTe"
},
{
"path": "pkg/service/teststats/teststats_test.go",
"chars": 9791,
"preview": "package teststats\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/LambdaTest/test-at-scale/config\"\n\t\"github"
},
{
"path": "pkg/synapse/synapse.go",
"chars": 13691,
"preview": "package synapse\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/"
},
{
"path": "pkg/synapse/utils.go",
"chars": 2275,
"preview": "package synapse\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/core\"\n)\n\n// CreateLoginMessage cre"
},
{
"path": "pkg/synapse/utils_test.go",
"chars": 1729,
"preview": "package synapse\n\nimport (\n\t\"encoding/json\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/core\"\n\t\"github.com/stre"
},
{
"path": "pkg/tasconfigdownloader/setup.go",
"chars": 2817,
"preview": "package tasconfigdownloader\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/core\""
},
{
"path": "pkg/tasconfigmanager/setup.go",
"chars": 5691,
"preview": "// Package tasconfigmanager is used for fetching and validating the tas config file\npackage tasconfigmanager\n\nimport (\n\t"
},
{
"path": "pkg/tasconfigmanager/setup_test.go",
"chars": 9117,
"preview": "package tasconfigmanager\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"path\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-scal"
},
{
"path": "pkg/task/task.go",
"chars": 1161,
"preview": "package task\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/http\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/core\"\n\t\"github"
},
{
"path": "pkg/task/task_test.go",
"chars": 3296,
"preview": "package task\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-sc"
},
{
"path": "pkg/testdiscoveryservice/testdiscovery.go",
"chars": 3803,
"preview": "// Package testdiscoveryservice is used for discover tests\npackage testdiscoveryservice\n\nimport (\n\t\"context\"\n\t\"encoding/"
},
{
"path": "pkg/testdiscoveryservice/testdiscovery_test.go",
"chars": 4443,
"preview": "// Package testdiscoveryservice is used for discover tests\npackage testdiscoveryservice\n\nimport (\n\t\"context\"\n\t\"reflect\"\n"
},
{
"path": "pkg/testexecutionservice/testexecution.go",
"chars": 6970,
"preview": "// Package testexecutionservice is used for executing tests\npackage testexecutionservice\n\nimport (\n\t\"context\"\n\t\"encoding"
},
{
"path": "pkg/testexecutionservice/testexecution_test.go",
"chars": 4035,
"preview": "// Package testexecutionservice is used for executing tests\npackage testexecutionservice\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"io"
},
{
"path": "pkg/tests/testutils.go",
"chars": 534,
"preview": "package tests\n\nimport (\n\t\"github.com/LambdaTest/test-at-scale/config\"\n)\n\n// MockConfig creates new dummy config\nfunc Moc"
},
{
"path": "pkg/urlmanager/urlmanager.go",
"chars": 3483,
"preview": "package urlmanager\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"strings\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/core\"\n\t\"github.com/"
},
{
"path": "pkg/urlmanager/urlmanager_test.go",
"chars": 3575,
"preview": "package urlmanager\n\nimport (\n\t\"net/url\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/global\"\n)\n\nfunc TestGetClo"
},
{
"path": "pkg/utils/utils.go",
"chars": 9132,
"preview": "package utils\n\nimport (\n\t\"context\"\n\t\"crypto/md5\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\n\t"
},
{
"path": "pkg/utils/utils_test.go",
"chars": 9829,
"preview": "package utils\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-scale/pkg/c"
},
{
"path": "pkg/zstd/zstd.go",
"chars": 2407,
"preview": "package zstd\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/LambdaT"
},
{
"path": "pkg/zstd/zstd_test.go",
"chars": 8253,
"preview": "package zstd\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/LambdaTest/test-at-s"
},
{
"path": "runner.conf",
"chars": 332,
"preview": "root: .\ntmp_path: ./builds\nbuild_name: lt\nvalid_ext: .go\nno_rebuild_ext: .tpl, "
},
{
"path": "sample-tas.yaml",
"chars": 1199,
"preview": "# supported frameworks: mocha|jest|jasmine\nframework: mocha\n# supported tiers: xmall|small|medium|large|xlarge\ntier: xsm"
},
{
"path": "scripts/.eslintrc.json",
"chars": 268,
"preview": "{\n \"env\": {\n \"commonjs\": true,\n \"es2021\": true,\n \"node\": true\n },\n \"extends\": [\n \"g"
},
{
"path": "scripts/custom-reporter.js",
"chars": 2371,
"preview": "\"use strict\";\nconst { ReportBase } = require(\"istanbul-lib-report\");\n\nfunction nodeMissing(metrics, fileCoverage) {\n co"
},
{
"path": "scripts/mapCoverage.js",
"chars": 2584,
"preview": "const istanbulCoverage = require('istanbul-lib-coverage');\nconst istanbulReport = require('istanbul-lib-report');\nconst "
},
{
"path": "scripts/package.json",
"chars": 376,
"preview": "{\n \"name\": \"scripts\",\n \"version\": \"1.0.0\",\n \"description\": \"JS scripts for nucleus\",\n \"dependencies\": {\n \"@babel/"
},
{
"path": "testutils/constants.go",
"chars": 659,
"preview": "package testutils\n\n// Various constant defined for to obtain dummy data for tests\nconst (\n\tApplicationConfigPath = \"/tes"
},
{
"path": "testutils/testdata/compare/abc...xyz",
"chars": 345,
"preview": " }\n const step = compiler.log.step('Bundling Resources...')\n let count = 0\n\n const testCommitChangeM = \"Added 1 line"
},
{
"path": "testutils/testdata/coverage/coverage-final.json",
"chars": 23,
"preview": "{\n \"cover1\" : \"f1\"\n}"
},
{
"path": "testutils/testdata/coverage/sample/coverage-final.json",
"chars": 164,
"preview": "{\n \"build_id\" : \"dummyBuildID\",\n \"repo_id\" : \"dummyRepoID\",\n \"commit_id\" : \"dummyCommitID\",\n \"blob_link\" : \""
},
{
"path": "testutils/testdata/gitlabCommitDiff.json",
"chars": 299348,
"preview": "{\"commit\":{\"id\":\"2295d352f6073101497f9bf4e4981c7ae72706a3\",\"short_id\":\"2295d352\",\"created_at\":\"2021-11-08T21:10:05.000+0"
},
{
"path": "testutils/testdata/index.json",
"chars": 998,
"preview": "{\"repo_slug\":\"sachin14/nexe\",\"fork_slug\":\"\",\"repo_link\":\"https://github.com/sachin14/nexe\",\"build_target_commit\":\"\",\"bui"
},
{
"path": "testutils/testdata/index.txt",
"chars": 1689,
"preview": "{\"event_id\":\"19fab9d6b1469h1b87ef421800994c57\",\"build_id\":\"2850df28b4a043959h65eb6c03772d5c\",\"repo_id\":\"7572a0f9a08a4130"
},
{
"path": "testutils/testdata/merge_requests/2/changes",
"chars": 39086,
"preview": "{\"id\":6029114,\"iid\":15335,\"project_id\":13083,\"title\":\"Backport of add-epic-sidebar\",\"description\":\"## What does this MR "
},
{
"path": "testutils/testdata/payload.json",
"chars": 612,
"preview": "{\n \"repo_link\": \"https://gittest.com/user/nexe\",\n \"repo_slug\": \"/user/nexe\",\n \"build_target_commit\": \"iued83e783dhiew"
},
{
"path": "testutils/testdata/pulls/2",
"chars": 599,
"preview": "diff --git a/src/steps/resource.ts b/src/steps/resource.ts\nindex b50377a8..37b84a2f 100644\n--- a/src/steps/resource.ts\n+"
},
{
"path": "testutils/testdata/sample_config.json",
"chars": 583,
"preview": "{\n \"Config\":\"\",\n \"DBConf\":{\n \"host\":\"\",\n \"port\":\"\",\n \"user\":\"\",\n \"password\":\"\"\n },\n \"Por"
},
{
"path": "testutils/testdata/secretTestData/invalidsecretfile.json",
"chars": 35,
"preview": "{\n \"data\": [\"qwert\", \"zxcvvb\"]\n}"
},
{
"path": "testutils/testdata/secretTestData/secretOauthFile.json",
"chars": 101,
"preview": "{\n \"access_token\": \"token\",\n \"expiry\": \"2022-02-22T16:22:01+05:30\",\n \"refresh_token\": \"refresh\"\n}\n"
},
{
"path": "testutils/testdata/secretTestData/secretfile.json",
"chars": 36,
"preview": "{\n \"abc\": \"val\",\n \"xyz\": \"val2\"\n}\n"
},
{
"path": "testutils/testdata/tas.yaml",
"chars": 1199,
"preview": "# supported frameworks: mocha|jest|jasmine\nframework: mocha\n# supported tiers: xmall|small|medium|large|xlarge\ntier: xsm"
},
{
"path": "testutils/testdata/taskPayload.json",
"chars": 465,
"preview": "{\n \"task_id\": \"axgubjynae\",\n \"status\": \"open\",\n \"repo_slug\": \"\",\n \"repo_link\": \"https://xyz123.com/qwerty/ne"
},
{
"path": "testutils/testdata/tasyml/duplicate_submodule_postmerge.yaml",
"chars": 494,
"preview": "postMerge:\n subModules:\n - name: some-module-1\n path: \"./somepath\"\n pattern:\n - \"./x/y/z\"\n fra"
},
{
"path": "testutils/testdata/tasyml/duplicate_submodule_premerge.yaml",
"chars": 499,
"preview": "postMerge:\n subModules:\n - name: some-module-1\n path: \"./somepath\"\n pattern:\n - \"./x/y/z\"\n fra"
},
{
"path": "testutils/testdata/tasyml/framework_only_required.yml",
"chars": 30,
"preview": "framework: mocha\nversion: 1.2\n"
},
{
"path": "testutils/testdata/tasyml/invalidVersion.yml",
"chars": 16,
"preview": "version: \"a.b.c\""
},
{
"path": "testutils/testdata/tasyml/invalid_fields.yml",
"chars": 48,
"preview": "framework: hello\nnodeVersion: test\nversion: 1.0\n"
},
{
"path": "testutils/testdata/tasyml/invalid_types.yml",
"chars": 50,
"preview": "framework: mocha\npreMerge: hello\npostMerge: world\n"
},
{
"path": "testutils/testdata/tasyml/invalid_typesv2.yml",
"chars": 390,
"preview": "postMerge:\n - name: some-module-1\n path: \"./somepath\"\n patterns:\n - \"./x/y/z\"\n framework: some-module\n "
},
{
"path": "testutils/testdata/tasyml/junk.yml",
"chars": 105,
"preview": "hadksjhdkjshd\nsdafjkdjf%aksjdf\n jhsjkfjdslf\n fsfdsfkljkljslfou2y73918yehqwqk384@#%$#^$%q312\n\najsdlsf\n"
},
{
"path": "testutils/testdata/tasyml/postmerge_emptyv1.yml",
"chars": 321,
"preview": "---\nframework: jest\npreMerge:\n env:\n NODE_ENV: development\n pattern:\n - \"{packages,scripts}/**/__tests__/*{.js,."
},
{
"path": "testutils/testdata/tasyml/postmerge_emptyv2.yaml",
"chars": 221,
"preview": "\npreMerge:\n subModules:\n - name: some-module-1\n path: \"./somepath\"\n framework: jasmine\n pattern:\n "
},
{
"path": "testutils/testdata/tasyml/pre_merge_emptyv1.yml",
"chars": 324,
"preview": "---\nframework: jest\npostMerge:\n env:\n NODE_ENV: development\n pattern:\n - \"{packages,scripts}/**/__tests__/*{.j"
},
{
"path": "testutils/testdata/tasyml/premerge_emptyv2.yaml",
"chars": 193,
"preview": "postMerge:\n subModules:\n - name: some-module-1\n path: \"./somepath\"\n pattern:\n - \"./x/y/z\"\n fra"
},
{
"path": "testutils/testdata/tasyml/valid.yml",
"chars": 441,
"preview": "---\nframework: jest\npostMerge:\n env:\n NODE_ENV: development\n pattern:\n - \"{packages,scripts}/**/__tests__/*{.j"
},
{
"path": "testutils/testdata/tasyml/validV2.yml",
"chars": 355,
"preview": "postMerge:\n subModules:\n - name: some-module-1\n path: \"./somepath\"\n pattern:\n - \"./x/y/z\"\n fra"
},
{
"path": "testutils/testdata/tasyml/valid_with_cachekeyV2.yml",
"chars": 397,
"preview": "postMerge:\n subModules:\n - name: some-module-1\n path: \"./somepath\"\n pattern:\n - \"./x/y/z\"\n fra"
},
{
"path": "testutils/testdata/tasyml/validwithCacheKey.yml",
"chars": 483,
"preview": "---\nframework: jest\npostMerge:\n env:\n NODE_ENV: development\n pattern:\n - \"{packages,scripts}/**/__tests__/*{.j"
},
{
"path": "testutils/testdata/testblocklistdata/testBlocklist.json",
"chars": 109,
"preview": "[\n {\n \"name\": \"t1\",\n \"repo\": \"fake\",\n \"test_locator\" : \"src/test/f1.spec.js\"\n }\n]\n"
},
{
"path": "testutils/testdirectory/testdir/file",
"chars": 0,
"preview": ""
},
{
"path": "testutils/testfile",
"chars": 0,
"preview": ""
},
{
"path": "testutils/utils.go",
"chars": 2990,
"preview": "package testutils\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"path\"\n\t\"runtime\"\n\n\t\"github.com/LambdaTest/test-at-scale/conf"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the LambdaTest/test-at-scale GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 201 files (13.0 MB), approximately 327.7k tokens, and a symbol index with 914 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.