.github,tools: clean up dead files (#30011)
This commit is contained in:
62
.github/ISSUE_TEMPLATE/2-issue-platform.yaml
vendored
62
.github/ISSUE_TEMPLATE/2-issue-platform.yaml
vendored
@@ -1,62 +0,0 @@
|
|||||||
name: 🐛 Report a platform, infra or deployment bug
|
|
||||||
description: Use this template when you have a problem operating Airbyte platform
|
|
||||||
labels: [type/bug, area/platform, needs-triage]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: >
|
|
||||||
<p align="center">
|
|
||||||
<a target="_blank" href="https://airbyte.com">
|
|
||||||
<image>
|
|
||||||
<source srcset="https://raw.githubusercontent.com/airbytehq/airbyte/master/.github/octavia-issue-template.svg">
|
|
||||||
<img alt="octavia-welcome" src="https://raw.githubusercontent.com/airbytehq/airbyte/master/.github/octavia-issue-template.svg" width="auto" height="120">
|
|
||||||
</image>
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for taking the time to fill out this bug report...
|
|
||||||
Make sure to update this issue with a concise title and provide all information you have to
|
|
||||||
help us debug the problem together. Issues not following the template will be closed.
|
|
||||||
- type: dropdown
|
|
||||||
id: deploy
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
attributes:
|
|
||||||
label: What method are you using to run Airbyte?
|
|
||||||
multiple: false
|
|
||||||
options:
|
|
||||||
- Docker
|
|
||||||
- Kubernetes
|
|
||||||
- type: input
|
|
||||||
id: platform-version
|
|
||||||
attributes:
|
|
||||||
label: Platform Version or Helm Chart Version
|
|
||||||
description: "Some examples are: (eg. 0.44.1, 0.30.0), you can find the version in the left bottom in Airbyte UI or in the .env / value.yaml file"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
id: step
|
|
||||||
attributes:
|
|
||||||
label: What step the error happened?
|
|
||||||
multiple: false
|
|
||||||
options:
|
|
||||||
- On deploy
|
|
||||||
- During the Sync
|
|
||||||
- Upgrading the Platform or Helm Chart
|
|
||||||
- Other
|
|
||||||
- type: textarea
|
|
||||||
id: description
|
|
||||||
attributes:
|
|
||||||
label: Revelant information
|
|
||||||
description: Please give any additional information you have and steps to reproduce the problem.
|
|
||||||
- type: textarea
|
|
||||||
id: logs
|
|
||||||
attributes:
|
|
||||||
label: Relevant log output
|
|
||||||
description: |
|
|
||||||
Please copy and paste any relevant log output.
|
|
||||||
This will be automatically formatted into code, so no need for backticks.
|
|
||||||
We strongly recommend to upload the log file for further debugging.
|
|
||||||
render: shell
|
|
||||||
23
.github/actions/ci-java-tests/action.yml
vendored
23
.github/actions/ci-java-tests/action.yml
vendored
@@ -1,23 +0,0 @@
|
|||||||
name: "Runner CI Java Tests"
|
|
||||||
description: "Runner CI Java Tests"
|
|
||||||
inputs:
|
|
||||||
module-name:
|
|
||||||
required: true
|
|
||||||
module-folder:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: "Build"
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
rm -rf ${{ inputs.module-folder }}/.venv ${{ inputs.module-folder }}/build
|
|
||||||
ROOT_DIR=$(git rev-parse --show-toplevel)
|
|
||||||
ARG=:$(python -c "import os; print(os.path.relpath('${{ inputs.module-folder }}', start='${ROOT_DIR}').replace('/', ':') )")
|
|
||||||
echo "./gradlew --no-daemon $ARG:build"
|
|
||||||
./gradlew --no-daemon "$ARG:clean"
|
|
||||||
./gradlew --no-daemon "$ARG:build"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
54
.github/actions/ci-py-tests/action.yml
vendored
54
.github/actions/ci-py-tests/action.yml
vendored
@@ -1,54 +0,0 @@
|
|||||||
name: "Runner CI Python Tests"
|
|
||||||
description: "Runner CI Python Tests"
|
|
||||||
inputs:
|
|
||||||
module-name:
|
|
||||||
required: true
|
|
||||||
module-folder:
|
|
||||||
required: true
|
|
||||||
outputs:
|
|
||||||
coverage-paths:
|
|
||||||
description: "Coverage Paths"
|
|
||||||
value: ${{ steps.build-coverage-reports.outputs.coverage-paths }}
|
|
||||||
flake8-logs:
|
|
||||||
description: "Flake8 Logs"
|
|
||||||
value: ${{ steps.build-linter-reports.outputs.flake8-logs }}
|
|
||||||
mypy-logs:
|
|
||||||
description: "MyPy Logs"
|
|
||||||
value: ${{ steps.build-linter-reports.outputs.mypy-logs }}
|
|
||||||
black-diff:
|
|
||||||
description: "Black Diff"
|
|
||||||
value: ${{ steps.build-linter-reports.outputs.black-diff }}
|
|
||||||
isort-diff:
|
|
||||||
description: "Isort Diff"
|
|
||||||
value: ${{ steps.build-linter-reports.outputs.isort-diff }}
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Build Coverage Reports
|
|
||||||
id: build-coverage-reports
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
GRADLE_JOB=$(source ./tools/lib/lib.sh; full_path_to_gradle_path ${{ inputs.module-folder }} "unitTest")
|
|
||||||
REPORT_FOLDER="${{ inputs.module-folder }}/coverage/"
|
|
||||||
./gradlew --no-daemon -Preports_folder=${REPORT_FOLDER} ${GRADLE_JOB}
|
|
||||||
|
|
||||||
echo "coverage-paths=coverage/coverage.xml" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Upload coverage to Codecov
|
|
||||||
uses: codecov/codecov-action@v2
|
|
||||||
with:
|
|
||||||
file: ${{ steps.build-coverage-reports.outputs.coverage-paths }}
|
|
||||||
name: "UnitTests of ${{ inputs.module-name }}"
|
|
||||||
|
|
||||||
- name: Build Linter Reports
|
|
||||||
id: build-linter-reports
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
GRADLE_JOB=$(source ./tools/lib/lib.sh; full_path_to_gradle_path ${{ inputs.module-folder }} "airbytePythonReport")
|
|
||||||
REPORT_FOLDER="${{ inputs.module-folder }}/reports/"
|
|
||||||
./gradlew --no-daemon -Preports_folder=${REPORT_FOLDER} ${GRADLE_JOB}
|
|
||||||
|
|
||||||
echo "mypy-logs=reports/mypy.log" >> $GITHUB_OUTPUT
|
|
||||||
echo "black-diff=reports/black.diff" >> $GITHUB_OUTPUT
|
|
||||||
echo "isort-diff=reports/isort.diff" >> $GITHUB_OUTPUT
|
|
||||||
echo "flake8-logs=reports/flake.txt" >> $GITHUB_OUTPUT
|
|
||||||
34
.github/labeler.yml
vendored
34
.github/labeler.yml
vendored
@@ -1,36 +1,8 @@
|
|||||||
# union of frontend, api, server, scheduler, protocol, worker, kubernetes
|
# Union of api, connectors, documentation, octavia-cli, CDK and normalization.
|
||||||
area/platform:
|
|
||||||
- airbyte-api/*
|
|
||||||
- airbyte-api/**/*
|
|
||||||
- airbyte-persistence/*
|
|
||||||
- airbyte-persistence/**/*
|
|
||||||
- airbyte-server/*
|
|
||||||
- airbyte-server/**/*
|
|
||||||
- airbyte-workers/*
|
|
||||||
- airbyte-workers/**/*
|
|
||||||
- kube/*
|
|
||||||
- kube/**/*
|
|
||||||
- charts/*
|
|
||||||
- charts/**/*
|
|
||||||
|
|
||||||
area/api:
|
area/api:
|
||||||
- airbyte-api/*
|
- airbyte-api/*
|
||||||
- airbyte-api/**/*
|
- airbyte-api/**/*
|
||||||
|
|
||||||
area/server:
|
|
||||||
- airbyte-server/*
|
|
||||||
- airbyte-server/**/*
|
|
||||||
|
|
||||||
area/worker:
|
|
||||||
- airbyte-workers/*
|
|
||||||
- airbyte-workers/**/*
|
|
||||||
|
|
||||||
kubernetes:
|
|
||||||
- kube/*
|
|
||||||
- kube/**/*
|
|
||||||
- charts/*
|
|
||||||
- charts/**/*
|
|
||||||
|
|
||||||
area/connectors:
|
area/connectors:
|
||||||
- airbyte-integrations/connectors/*
|
- airbyte-integrations/connectors/*
|
||||||
- airbyte-integrations/connectors/**/*
|
- airbyte-integrations/connectors/**/*
|
||||||
@@ -39,6 +11,10 @@ area/documentation:
|
|||||||
- docs/*
|
- docs/*
|
||||||
- docs/**/*
|
- docs/**/*
|
||||||
|
|
||||||
|
area/octavia-cli:
|
||||||
|
- octavia-cli/*
|
||||||
|
- octavia-cli/**/*
|
||||||
|
|
||||||
CDK:
|
CDK:
|
||||||
- airbyte-cdk/*
|
- airbyte-cdk/*
|
||||||
- airbyte-cdk/**/*
|
- airbyte-cdk/**/*
|
||||||
|
|||||||
5
.github/workflows/slash-commands.yml
vendored
5
.github/workflows/slash-commands.yml
vendored
@@ -25,13 +25,8 @@ jobs:
|
|||||||
test
|
test
|
||||||
legacy-test
|
legacy-test
|
||||||
test-performance
|
test-performance
|
||||||
build-connector
|
|
||||||
publish-connector
|
|
||||||
publish
|
publish
|
||||||
legacy-publish
|
legacy-publish
|
||||||
publish-external
|
|
||||||
gke-kube-test
|
|
||||||
run-specific-test
|
|
||||||
connector-performance
|
connector-performance
|
||||||
static-args: |
|
static-args: |
|
||||||
repo=${{ steps.getref.outputs.repo }}
|
repo=${{ steps.getref.outputs.repo }}
|
||||||
|
|||||||
368
CONTRIBUTORS.md
368
CONTRIBUTORS.md
@@ -1,138 +1,420 @@
|
|||||||
# Contributors
|
# Contributors
|
||||||
|
|
||||||
* [69mb](https://github.com/69mb)
|
* [69mb](https://github.com/69mb)
|
||||||
* [addack](https://github.com/addack)
|
* [a-honcharenko](https://github.com/a-honcharenko)
|
||||||
|
* [aadityasinha-dotcom](https://github.com/aadityasinha-dotcom)
|
||||||
|
* [aaronsteers](https://github.com/aaronsteers)
|
||||||
|
* [aazam-gh](https://github.com/aazam-gh)
|
||||||
|
* [abaerptc](https://github.com/abaerptc)
|
||||||
|
* [aballiet](https://github.com/aballiet)
|
||||||
|
* [achaussende](https://github.com/achaussende)
|
||||||
|
* [ad-m](https://github.com/ad-m)
|
||||||
|
* [adam-bloom](https://github.com/adam-bloom)
|
||||||
|
* [adamf](https://github.com/adamf)
|
||||||
|
* [adamschmidt](https://github.com/adamschmidt)
|
||||||
* [AetherUnbound](https://github.com/AetherUnbound)
|
* [AetherUnbound](https://github.com/AetherUnbound)
|
||||||
* [afranzi](https://github.com/afranzi)
|
* [afranzi](https://github.com/afranzi)
|
||||||
|
* [agrass](https://github.com/agrass)
|
||||||
|
* [ahmed-buksh](https://github.com/ahmed-buksh)
|
||||||
* [airbyte-jenny](https://github.com/airbyte-jenny)
|
* [airbyte-jenny](https://github.com/airbyte-jenny)
|
||||||
|
* [ajmhatch](https://github.com/ajmhatch)
|
||||||
|
* [ajzo90](https://github.com/ajzo90)
|
||||||
|
* [akashkulk](https://github.com/akashkulk)
|
||||||
|
* [akulgoel96](https://github.com/akulgoel96)
|
||||||
|
* [alafanechere](https://github.com/alafanechere)
|
||||||
|
* [alallema](https://github.com/alallema)
|
||||||
|
* [albert-marrero](https://github.com/albert-marrero)
|
||||||
|
* [alex-danilin](https://github.com/alex-danilin)
|
||||||
|
* [alex-gron](https://github.com/alex-gron)
|
||||||
|
* [alexander-marquardt](https://github.com/alexander-marquardt)
|
||||||
|
* [AlexanderBatoulis](https://github.com/AlexanderBatoulis)
|
||||||
|
* [alexandertsukanov](https://github.com/alexandertsukanov)
|
||||||
* [alexandr-shegeda](https://github.com/alexandr-shegeda)
|
* [alexandr-shegeda](https://github.com/alexandr-shegeda)
|
||||||
|
* [alexchouraki](https://github.com/alexchouraki)
|
||||||
|
* [AlexJameson](https://github.com/AlexJameson)
|
||||||
|
* [alexnikitchuk](https://github.com/alexnikitchuk)
|
||||||
|
* [Alihassanc5](https://github.com/Alihassanc5)
|
||||||
|
* [Allexik](https://github.com/Allexik)
|
||||||
|
* [alovew](https://github.com/alovew)
|
||||||
|
* [AM-I-Human](https://github.com/AM-I-Human)
|
||||||
|
* [amaliaroye](https://github.com/amaliaroye)
|
||||||
|
* [ambirdsall](https://github.com/ambirdsall)
|
||||||
|
* [aminamos](https://github.com/aminamos)
|
||||||
* [amitku](https://github.com/amitku)
|
* [amitku](https://github.com/amitku)
|
||||||
|
* [Amruta-Ranade](https://github.com/Amruta-Ranade)
|
||||||
|
* [anamargaridarl](https://github.com/anamargaridarl)
|
||||||
|
* [andnig](https://github.com/andnig)
|
||||||
|
* [andresbravog](https://github.com/andresbravog)
|
||||||
|
* [andrewlreeve](https://github.com/andrewlreeve)
|
||||||
|
* [andreyAtBB](https://github.com/andreyAtBB)
|
||||||
* [andriikorotkov](https://github.com/andriikorotkov)
|
* [andriikorotkov](https://github.com/andriikorotkov)
|
||||||
|
* [andrzejdackiewicz](https://github.com/andrzejdackiewicz)
|
||||||
|
* [andyjih](https://github.com/andyjih)
|
||||||
|
* [AndyTwiss](https://github.com/AndyTwiss)
|
||||||
|
* [animer3009](https://github.com/animer3009)
|
||||||
|
* [anna-geller](https://github.com/anna-geller)
|
||||||
* [annalvova05](https://github.com/annalvova05)
|
* [annalvova05](https://github.com/annalvova05)
|
||||||
* [antixar](https://github.com/antixar)
|
* [antixar](https://github.com/antixar)
|
||||||
|
* [antonioneto-hotmart](https://github.com/antonioneto-hotmart)
|
||||||
|
* [anujgupta0711](https://github.com/anujgupta0711)
|
||||||
* [Anurag870](https://github.com/Anurag870)
|
* [Anurag870](https://github.com/Anurag870)
|
||||||
|
* [anushree-agrawal](https://github.com/anushree-agrawal)
|
||||||
* [apostoltego](https://github.com/apostoltego)
|
* [apostoltego](https://github.com/apostoltego)
|
||||||
|
* [archangelic](https://github.com/archangelic)
|
||||||
|
* [arimbr](https://github.com/arimbr)
|
||||||
|
* [arnaudjnn](https://github.com/arnaudjnn)
|
||||||
|
* [ArneZsng](https://github.com/ArneZsng)
|
||||||
|
* [arsenlosenko](https://github.com/arsenlosenko)
|
||||||
|
* [artem1205](https://github.com/artem1205)
|
||||||
|
* [artusiep](https://github.com/artusiep)
|
||||||
|
* [asafepy](https://github.com/asafepy)
|
||||||
|
* [asyarif93](https://github.com/asyarif93)
|
||||||
|
* [augan-rymkhan](https://github.com/augan-rymkhan)
|
||||||
|
* [Auric-Manteo](https://github.com/Auric-Manteo)
|
||||||
* [avaidyanatha](https://github.com/avaidyanatha)
|
* [avaidyanatha](https://github.com/avaidyanatha)
|
||||||
* [avida](https://github.com/avida)
|
* [avida](https://github.com/avida)
|
||||||
|
* [avirajsingh7](https://github.com/avirajsingh7)
|
||||||
|
* [axaysagathiya](https://github.com/axaysagathiya)
|
||||||
|
* [azhard](https://github.com/azhard)
|
||||||
|
* [b4stien](https://github.com/b4stien)
|
||||||
|
* [bala-ceg](https://github.com/bala-ceg)
|
||||||
* [bazarnov](https://github.com/bazarnov)
|
* [bazarnov](https://github.com/bazarnov)
|
||||||
|
* [bbugh](https://github.com/bbugh)
|
||||||
|
* [bcbeidel](https://github.com/bcbeidel)
|
||||||
|
* [bdashrad](https://github.com/bdashrad)
|
||||||
|
* [benmoriceau](https://github.com/benmoriceau)
|
||||||
|
* [BenoitFayolle](https://github.com/BenoitFayolle)
|
||||||
|
* [BenoitHugonnard](https://github.com/BenoitHugonnard)
|
||||||
|
* [bgroff](https://github.com/bgroff)
|
||||||
|
* [Bhupesh-V](https://github.com/Bhupesh-V)
|
||||||
|
* [BirdboyBolu](https://github.com/BirdboyBolu)
|
||||||
|
* [bjgbeelen](https://github.com/bjgbeelen)
|
||||||
* [bkrausz](https://github.com/bkrausz)
|
* [bkrausz](https://github.com/bkrausz)
|
||||||
|
* [bleonard](https://github.com/bleonard)
|
||||||
|
* [bnchrch](https://github.com/bnchrch)
|
||||||
|
* [bobvanluijt](https://github.com/bobvanluijt)
|
||||||
|
* [brebuanirello-equinix](https://github.com/brebuanirello-equinix)
|
||||||
|
* [BrentSouza](https://github.com/BrentSouza)
|
||||||
|
* [brianjlai](https://github.com/brianjlai)
|
||||||
|
* [brunofaustino](https://github.com/brunofaustino)
|
||||||
|
* [bstrawson](https://github.com/bstrawson)
|
||||||
|
* [btkcodedev](https://github.com/btkcodedev)
|
||||||
|
* [burmecia](https://github.com/burmecia)
|
||||||
|
* [bzAmin](https://github.com/bzAmin)
|
||||||
|
* [calebfornari](https://github.com/calebfornari)
|
||||||
|
* [cameronwtaylor](https://github.com/cameronwtaylor)
|
||||||
* [camro](https://github.com/camro)
|
* [camro](https://github.com/camro)
|
||||||
|
* [carlkibler](https://github.com/carlkibler)
|
||||||
|
* [carlonuccio](https://github.com/carlonuccio)
|
||||||
|
* [catpineapple](https://github.com/catpineapple)
|
||||||
* [cgardens](https://github.com/cgardens)
|
* [cgardens](https://github.com/cgardens)
|
||||||
|
* [chandrasekharan98](https://github.com/chandrasekharan98)
|
||||||
|
* [ChristoGrab](https://github.com/ChristoGrab)
|
||||||
* [ChristopheDuong](https://github.com/ChristopheDuong)
|
* [ChristopheDuong](https://github.com/ChristopheDuong)
|
||||||
|
* [ciancullinan](https://github.com/ciancullinan)
|
||||||
|
* [cirdes](https://github.com/cirdes)
|
||||||
* [cjwooo](https://github.com/cjwooo)
|
* [cjwooo](https://github.com/cjwooo)
|
||||||
|
* [clnoll](https://github.com/clnoll)
|
||||||
|
* [cobobrien](https://github.com/cobobrien)
|
||||||
* [coetzeevs](https://github.com/coetzeevs)
|
* [coetzeevs](https://github.com/coetzeevs)
|
||||||
* [coeurdestenebres](https://github.com/coeurdestenebres)
|
* [colesnodgrass](https://github.com/colesnodgrass)
|
||||||
|
* [collinscangarella](https://github.com/collinscangarella)
|
||||||
|
* [cpdeethree](https://github.com/cpdeethree)
|
||||||
|
* [CrafterKolyan](https://github.com/CrafterKolyan)
|
||||||
|
* [cstruct](https://github.com/cstruct)
|
||||||
|
* [ct-martin](https://github.com/ct-martin)
|
||||||
|
* [cuyk](https://github.com/cuyk)
|
||||||
|
* [cynthiaxyin](https://github.com/cynthiaxyin)
|
||||||
|
* [CyprienBarbault](https://github.com/CyprienBarbault)
|
||||||
|
* [czuares](https://github.com/czuares)
|
||||||
|
* [Daemonxiao](https://github.com/Daemonxiao)
|
||||||
|
* [dainiussa](https://github.com/dainiussa)
|
||||||
|
* [dalo390](https://github.com/dalo390)
|
||||||
* [damianlegawiec](https://github.com/damianlegawiec)
|
* [damianlegawiec](https://github.com/damianlegawiec)
|
||||||
|
* [dandpz](https://github.com/dandpz)
|
||||||
|
* [daniel-cortez-stevenson](https://github.com/daniel-cortez-stevenson)
|
||||||
* [danieldiamond](https://github.com/danieldiamond)
|
* [danieldiamond](https://github.com/danieldiamond)
|
||||||
|
* [Danucas](https://github.com/Danucas)
|
||||||
|
* [danvass](https://github.com/danvass)
|
||||||
|
* [darian-heede](https://github.com/darian-heede)
|
||||||
|
* [darynaishchenko](https://github.com/darynaishchenko)
|
||||||
|
* [DavidSpek](https://github.com/DavidSpek)
|
||||||
* [davinchia](https://github.com/davinchia)
|
* [davinchia](https://github.com/davinchia)
|
||||||
|
* [davydov-d](https://github.com/davydov-d)
|
||||||
|
* [dbyzero](https://github.com/dbyzero)
|
||||||
|
* [ddoyediran](https://github.com/ddoyediran)
|
||||||
|
* [deepansh96](https://github.com/deepansh96)
|
||||||
|
* [delenamalan](https://github.com/delenamalan)
|
||||||
|
* [denis-sokolov](https://github.com/denis-sokolov)
|
||||||
* [dependabot[bot]](https://github.com/apps/dependabot)
|
* [dependabot[bot]](https://github.com/apps/dependabot)
|
||||||
|
* [dictcp](https://github.com/dictcp)
|
||||||
|
* [didistars328](https://github.com/didistars328)
|
||||||
|
* [digambar-t7](https://github.com/digambar-t7)
|
||||||
|
* [dijonkitchen](https://github.com/dijonkitchen)
|
||||||
|
* [dizel852](https://github.com/dizel852)
|
||||||
* [dmateusp](https://github.com/dmateusp)
|
* [dmateusp](https://github.com/dmateusp)
|
||||||
* [DominusKelvin](https://github.com/DominusKelvin)
|
* [domzae](https://github.com/domzae)
|
||||||
* [DoNotPanicUA](https://github.com/DoNotPanicUA)
|
* [DoNotPanicUA](https://github.com/DoNotPanicUA)
|
||||||
|
* [Dracyr](https://github.com/Dracyr)
|
||||||
|
* [drrest](https://github.com/drrest)
|
||||||
|
* [dtt101](https://github.com/dtt101)
|
||||||
* [edbizarro](https://github.com/edbizarro)
|
* [edbizarro](https://github.com/edbizarro)
|
||||||
|
* [edgao](https://github.com/edgao)
|
||||||
|
* [edmundito](https://github.com/edmundito)
|
||||||
|
* [efimmatytsin](https://github.com/efimmatytsin)
|
||||||
* [eliziario](https://github.com/eliziario)
|
* [eliziario](https://github.com/eliziario)
|
||||||
|
* [elliottrabac](https://github.com/elliottrabac)
|
||||||
|
* [emmaling27](https://github.com/emmaling27)
|
||||||
|
* [erica-airbyte](https://github.com/erica-airbyte)
|
||||||
|
* [erohmensing](https://github.com/erohmensing)
|
||||||
* [etsybaev](https://github.com/etsybaev)
|
* [etsybaev](https://github.com/etsybaev)
|
||||||
* [eugene-kulak](https://github.com/eugene-kulak)
|
* [eugene-kulak](https://github.com/eugene-kulak)
|
||||||
|
* [evantahler](https://github.com/evantahler)
|
||||||
* [ffabss](https://github.com/ffabss)
|
* [ffabss](https://github.com/ffabss)
|
||||||
|
* [flash1293](https://github.com/flash1293)
|
||||||
|
* [franviera92](https://github.com/franviera92)
|
||||||
* [freimer](https://github.com/freimer)
|
* [freimer](https://github.com/freimer)
|
||||||
* [FUT](https://github.com/FUT)
|
* [FUT](https://github.com/FUT)
|
||||||
* [gaart](https://github.com/gaart)
|
* [gaart](https://github.com/gaart)
|
||||||
* [gasparakos](https://github.com/gasparakos)
|
* [ganpatagarwal](https://github.com/ganpatagarwal)
|
||||||
* [geekwhocodes](https://github.com/geekwhocodes)
|
* [gargatuma](https://github.com/gargatuma)
|
||||||
* [gingeard](https://github.com/gingeard)
|
* [gergelylendvai](https://github.com/gergelylendvai)
|
||||||
|
* [girarda](https://github.com/girarda)
|
||||||
|
* [git-phu](https://github.com/git-phu)
|
||||||
|
* [github-actions[bot]](https://github.com/apps/github-actions)
|
||||||
|
* [Gitznik](https://github.com/Gitznik)
|
||||||
* [gordalina](https://github.com/gordalina)
|
* [gordalina](https://github.com/gordalina)
|
||||||
|
* [gosusnp](https://github.com/gosusnp)
|
||||||
* [grebessi](https://github.com/grebessi)
|
* [grebessi](https://github.com/grebessi)
|
||||||
|
* [grishick](https://github.com/grishick)
|
||||||
|
* [grubberr](https://github.com/grubberr)
|
||||||
|
* [gvillafanetapia](https://github.com/gvillafanetapia)
|
||||||
* [h7kanna](https://github.com/h7kanna)
|
* [h7kanna](https://github.com/h7kanna)
|
||||||
* [haliva-firmbase](https://github.com/haliva-firmbase)
|
* [haithem-souala](https://github.com/haithem-souala)
|
||||||
|
* [haoranyu](https://github.com/haoranyu)
|
||||||
* [harshithmullapudi](https://github.com/harshithmullapudi)
|
* [harshithmullapudi](https://github.com/harshithmullapudi)
|
||||||
* [heade](https://github.com/heade)
|
* [heade](https://github.com/heade)
|
||||||
|
* [hehex9](https://github.com/hehex9)
|
||||||
|
* [helderco](https://github.com/helderco)
|
||||||
|
* [henriblancke](https://github.com/henriblancke)
|
||||||
|
* [Hesperide](https://github.com/Hesperide)
|
||||||
* [hillairet](https://github.com/hillairet)
|
* [hillairet](https://github.com/hillairet)
|
||||||
|
* [himanshuc3](https://github.com/himanshuc3)
|
||||||
|
* [hntan](https://github.com/hntan)
|
||||||
* [htrueman](https://github.com/htrueman)
|
* [htrueman](https://github.com/htrueman)
|
||||||
* [hudsondba](https://github.com/hudsondba)
|
* [hydrosquall](https://github.com/hydrosquall)
|
||||||
|
* [iberchid](https://github.com/iberchid)
|
||||||
|
* [igrankova](https://github.com/igrankova)
|
||||||
|
* [igsaf2](https://github.com/igsaf2)
|
||||||
|
* [Imbruced](https://github.com/Imbruced)
|
||||||
* [irynakruk](https://github.com/irynakruk)
|
* [irynakruk](https://github.com/irynakruk)
|
||||||
|
* [isaacharrisholt](https://github.com/isaacharrisholt)
|
||||||
* [isalikov](https://github.com/isalikov)
|
* [isalikov](https://github.com/isalikov)
|
||||||
* [itaiad200](https://github.com/itaiad200)
|
* [itaseskii](https://github.com/itaseskii)
|
||||||
* [jacqueskpoty](https://github.com/jacqueskpoty)
|
* [jacqueskpoty](https://github.com/jacqueskpoty)
|
||||||
* [jaimefr](https://github.com/jaimefr)
|
* [Jagrutiti](https://github.com/Jagrutiti)
|
||||||
* [Jamakase](https://github.com/Jamakase)
|
* [jamakase](https://github.com/jamakase)
|
||||||
* [Janardhanpoola](https://github.com/Janardhanpoola)
|
* [jartek](https://github.com/jartek)
|
||||||
* [jinnig](https://github.com/jinnig)
|
* [jbfbell](https://github.com/jbfbell)
|
||||||
|
* [jcowanpdx](https://github.com/jcowanpdx)
|
||||||
|
* [jdclarke5](https://github.com/jdclarke5)
|
||||||
|
* [jdpgrailsdev](https://github.com/jdpgrailsdev)
|
||||||
|
* [jeremySrgt](https://github.com/jeremySrgt)
|
||||||
|
* [jhajajaas](https://github.com/jhajajaas)
|
||||||
|
* [jhammarstedt](https://github.com/jhammarstedt)
|
||||||
|
* [jnr0790](https://github.com/jnr0790)
|
||||||
|
* [joelluijmes](https://github.com/joelluijmes)
|
||||||
* [johnlafleur](https://github.com/johnlafleur)
|
* [johnlafleur](https://github.com/johnlafleur)
|
||||||
* [jonathan-duval](https://github.com/jonathan-duval)
|
* [JonsSpaghetti](https://github.com/JonsSpaghetti)
|
||||||
* [jonstacks](https://github.com/jonstacks)
|
* [jonstacks](https://github.com/jonstacks)
|
||||||
|
* [jordan-glitch](https://github.com/jordan-glitch)
|
||||||
|
* [josephkmh](https://github.com/josephkmh)
|
||||||
* [jrhizor](https://github.com/jrhizor)
|
* [jrhizor](https://github.com/jrhizor)
|
||||||
|
* [juliachvyrova](https://github.com/juliachvyrova)
|
||||||
|
* [JulianRommel](https://github.com/JulianRommel)
|
||||||
|
* [juliatournant](https://github.com/juliatournant)
|
||||||
|
* [justinbchau](https://github.com/justinbchau)
|
||||||
* [juweins](https://github.com/juweins)
|
* [juweins](https://github.com/juweins)
|
||||||
|
* [jzcruiser](https://github.com/jzcruiser)
|
||||||
|
* [kaklakariada](https://github.com/kaklakariada)
|
||||||
|
* [karinakuz](https://github.com/karinakuz)
|
||||||
|
* [kattos-aws](https://github.com/kattos-aws)
|
||||||
|
* [KayakinKoder](https://github.com/KayakinKoder)
|
||||||
* [keu](https://github.com/keu)
|
* [keu](https://github.com/keu)
|
||||||
|
* [kgrover](https://github.com/kgrover)
|
||||||
|
* [kimerinn](https://github.com/kimerinn)
|
||||||
|
* [koconder](https://github.com/koconder)
|
||||||
|
* [koji-m](https://github.com/koji-m)
|
||||||
|
* [krishnaglick](https://github.com/krishnaglick)
|
||||||
|
* [krisjan-oldekamp](https://github.com/krisjan-oldekamp)
|
||||||
|
* [ksengers](https://github.com/ksengers)
|
||||||
|
* [kzzzr](https://github.com/kzzzr)
|
||||||
* [lazebnyi](https://github.com/lazebnyi)
|
* [lazebnyi](https://github.com/lazebnyi)
|
||||||
|
* [leo-schick](https://github.com/leo-schick)
|
||||||
|
* [letiescanciano](https://github.com/letiescanciano)
|
||||||
|
* [lgomezm](https://github.com/lgomezm)
|
||||||
|
* [lideke](https://github.com/lideke)
|
||||||
* [lizdeika](https://github.com/lizdeika)
|
* [lizdeika](https://github.com/lizdeika)
|
||||||
* [lmeyerov](https://github.com/lmeyerov)
|
* [lmossman](https://github.com/lmossman)
|
||||||
* [luizgribeiro](https://github.com/luizgribeiro)
|
|
||||||
* [m-ronchi](https://github.com/m-ronchi)
|
|
||||||
* [maciej-nedza](https://github.com/maciej-nedza)
|
* [maciej-nedza](https://github.com/maciej-nedza)
|
||||||
|
* [macmv](https://github.com/macmv)
|
||||||
|
* [Mainara](https://github.com/Mainara)
|
||||||
* [makalaaneesh](https://github.com/makalaaneesh)
|
* [makalaaneesh](https://github.com/makalaaneesh)
|
||||||
* [manavkohli](https://github.com/manavkohli)
|
* [makyash](https://github.com/makyash)
|
||||||
|
* [malikdiarra](https://github.com/malikdiarra)
|
||||||
|
* [marcelopio](https://github.com/marcelopio)
|
||||||
* [marcosmarxm](https://github.com/marcosmarxm)
|
* [marcosmarxm](https://github.com/marcosmarxm)
|
||||||
|
* [mariamthiam](https://github.com/mariamthiam)
|
||||||
* [masonwheeler](https://github.com/masonwheeler)
|
* [masonwheeler](https://github.com/masonwheeler)
|
||||||
* [MatheusdiPaula](https://github.com/MatheusdiPaula)
|
* [masyagin1998](https://github.com/masyagin1998)
|
||||||
|
* [matter-q](https://github.com/matter-q)
|
||||||
|
* [maxi297](https://github.com/maxi297)
|
||||||
* [MaxKrog](https://github.com/MaxKrog)
|
* [MaxKrog](https://github.com/MaxKrog)
|
||||||
* [MaxwellJK](https://github.com/MaxwellJK)
|
* [mdibaiee](https://github.com/mdibaiee)
|
||||||
* [mbbroberg](https://github.com/mbbroberg)
|
* [mfsiega-airbyte](https://github.com/mfsiega-airbyte)
|
||||||
* [mhamas](https://github.com/mhamas)
|
* [michaelnguyen26](https://github.com/michaelnguyen26)
|
||||||
* [michel-tricot](https://github.com/michel-tricot)
|
* [michel-tricot](https://github.com/michel-tricot)
|
||||||
|
* [mickaelandrieu](https://github.com/mickaelandrieu)
|
||||||
* [midavadim](https://github.com/midavadim)
|
* [midavadim](https://github.com/midavadim)
|
||||||
* [mid](https://github.com/mid)
|
|
||||||
* [mildbyte](https://github.com/mildbyte)
|
* [mildbyte](https://github.com/mildbyte)
|
||||||
* [minimax75](https://github.com/minimax75)
|
* [misteryeo](https://github.com/misteryeo)
|
||||||
* [mjirv](https://github.com/mjirv)
|
* [mkhokh-33](https://github.com/mkhokh-33)
|
||||||
|
* [mlavoie-sm360](https://github.com/mlavoie-sm360)
|
||||||
* [mmolimar](https://github.com/mmolimar)
|
* [mmolimar](https://github.com/mmolimar)
|
||||||
* [MohamadHaziq](https://github.com/MohamadHaziq)
|
* [mohamagdy](https://github.com/mohamagdy)
|
||||||
* [mohammad-bolt](https://github.com/mohammad-bolt)
|
* [mohitreddy1996](https://github.com/mohitreddy1996)
|
||||||
* [moszutij](https://github.com/moszutij)
|
* [monai](https://github.com/monai)
|
||||||
|
* [mrhallak](https://github.com/mrhallak)
|
||||||
* [Muriloo](https://github.com/Muriloo)
|
* [Muriloo](https://github.com/Muriloo)
|
||||||
* [muutech](https://github.com/muutech)
|
* [mustangJaro](https://github.com/mustangJaro)
|
||||||
* [nclsbayona](https://github.com/nclsbayona)
|
* [Mykyta-Serbynevskyi](https://github.com/Mykyta-Serbynevskyi)
|
||||||
* [nicholasbull](https://github.com/nicholasbull)
|
* [n0rritt](https://github.com/n0rritt)
|
||||||
|
* [nastra](https://github.com/nastra)
|
||||||
|
* [nataliekwong](https://github.com/nataliekwong)
|
||||||
|
* [natalyjazzviolin](https://github.com/natalyjazzviolin)
|
||||||
|
* [nauxliu](https://github.com/nauxliu)
|
||||||
|
* [nguyenaiden](https://github.com/nguyenaiden)
|
||||||
|
* [NipunaPrashan](https://github.com/NipunaPrashan)
|
||||||
|
* [Nmaxime](https://github.com/Nmaxime)
|
||||||
|
* [noahkawasaki-airbyte](https://github.com/noahkawasaki-airbyte)
|
||||||
|
* [noahkawasakigoogle](https://github.com/noahkawasakigoogle)
|
||||||
|
* [novotl](https://github.com/novotl)
|
||||||
* [ntucker](https://github.com/ntucker)
|
* [ntucker](https://github.com/ntucker)
|
||||||
* [numphileo](https://github.com/numphileo)
|
* [octavia-squidington-iii](https://github.com/octavia-squidington-iii)
|
||||||
* [nyergler](https://github.com/nyergler)
|
|
||||||
* [olivermeyer](https://github.com/olivermeyer)
|
* [olivermeyer](https://github.com/olivermeyer)
|
||||||
|
* [omid](https://github.com/omid)
|
||||||
|
* [oreopot](https://github.com/oreopot)
|
||||||
|
* [pabloescoder](https://github.com/pabloescoder)
|
||||||
* [panhavad](https://github.com/panhavad)
|
* [panhavad](https://github.com/panhavad)
|
||||||
|
* [pecalleja](https://github.com/pecalleja)
|
||||||
|
* [pedroslopez](https://github.com/pedroslopez)
|
||||||
|
* [perangel](https://github.com/perangel)
|
||||||
|
* [peter279k](https://github.com/peter279k)
|
||||||
|
* [PhilipCorr](https://github.com/PhilipCorr)
|
||||||
|
* [philippeboyd](https://github.com/philippeboyd)
|
||||||
* [Phlair](https://github.com/Phlair)
|
* [Phlair](https://github.com/Phlair)
|
||||||
|
* [pmossman](https://github.com/pmossman)
|
||||||
* [po3na4skld](https://github.com/po3na4skld)
|
* [po3na4skld](https://github.com/po3na4skld)
|
||||||
* [ppatali](https://github.com/ppatali)
|
* [PoCTo](https://github.com/PoCTo)
|
||||||
|
* [postamar](https://github.com/postamar)
|
||||||
* [prasrvenkat](https://github.com/prasrvenkat)
|
* [prasrvenkat](https://github.com/prasrvenkat)
|
||||||
* [rclmenezes](https://github.com/rclmenezes)
|
* [prateekmukhedkar](https://github.com/prateekmukhedkar)
|
||||||
|
* [proprefenetre](https://github.com/proprefenetre)
|
||||||
|
* [Pwaldi](https://github.com/Pwaldi)
|
||||||
|
* [rach-r](https://github.com/rach-r)
|
||||||
|
* [ramonvermeulen](https://github.com/ramonvermeulen)
|
||||||
* [ReptilianBrain](https://github.com/ReptilianBrain)
|
* [ReptilianBrain](https://github.com/ReptilianBrain)
|
||||||
* [roshan](https://github.com/roshan)
|
* [rileybrook](https://github.com/rileybrook)
|
||||||
|
* [RobertoBonnet](https://github.com/RobertoBonnet)
|
||||||
|
* [robgleason](https://github.com/robgleason)
|
||||||
|
* [RobLucchi](https://github.com/RobLucchi)
|
||||||
|
* [rodireich](https://github.com/rodireich)
|
||||||
|
* [roisinbolt](https://github.com/roisinbolt)
|
||||||
|
* [roman-romanov-o](https://github.com/roman-romanov-o)
|
||||||
|
* [roman-yermilov-gl](https://github.com/roman-yermilov-gl)
|
||||||
|
* [ron-damon](https://github.com/ron-damon)
|
||||||
* [rparrapy](https://github.com/rparrapy)
|
* [rparrapy](https://github.com/rparrapy)
|
||||||
* [sabifranjo](https://github.com/sabifranjo)
|
* [ryankfu](https://github.com/ryankfu)
|
||||||
|
* [sajarin](https://github.com/sajarin)
|
||||||
|
* [samos123](https://github.com/samos123)
|
||||||
|
* [sarafonseca-123](https://github.com/sarafonseca-123)
|
||||||
|
* [sashaNeshcheret](https://github.com/sashaNeshcheret)
|
||||||
|
* [SatishChGit](https://github.com/SatishChGit)
|
||||||
|
* [sbjorn](https://github.com/sbjorn)
|
||||||
|
* [schlattk](https://github.com/schlattk)
|
||||||
|
* [scottleechua](https://github.com/scottleechua)
|
||||||
|
* [sdairs](https://github.com/sdairs)
|
||||||
|
* [sergei-solonitcyn](https://github.com/sergei-solonitcyn)
|
||||||
|
* [sergio-ropero](https://github.com/sergio-ropero)
|
||||||
|
* [sh4sh](https://github.com/sh4sh)
|
||||||
* [shadabshaukat](https://github.com/shadabshaukat)
|
* [shadabshaukat](https://github.com/shadabshaukat)
|
||||||
* [sherifnada](https://github.com/sherifnada)
|
* [sherifnada](https://github.com/sherifnada)
|
||||||
* [subhaklp](https://github.com/subhaklp)
|
* [Shishir-rmv](https://github.com/Shishir-rmv)
|
||||||
|
* [shrodingers](https://github.com/shrodingers)
|
||||||
|
* [shyngysnurzhan](https://github.com/shyngysnurzhan)
|
||||||
|
* [siddhant3030](https://github.com/siddhant3030)
|
||||||
|
* [sivankumar86](https://github.com/sivankumar86)
|
||||||
|
* [snyk-bot](https://github.com/snyk-bot)
|
||||||
|
* [SofiiaZaitseva](https://github.com/SofiiaZaitseva)
|
||||||
|
* [sophia-wiley](https://github.com/sophia-wiley)
|
||||||
|
* [SPTKL](https://github.com/SPTKL)
|
||||||
|
* [subhamX](https://github.com/subhamX)
|
||||||
* [subodh1810](https://github.com/subodh1810)
|
* [subodh1810](https://github.com/subodh1810)
|
||||||
* [tgiardina](https://github.com/tgiardina)
|
* [suhomud](https://github.com/suhomud)
|
||||||
|
* [supertopher](https://github.com/supertopher)
|
||||||
|
* [swyxio](https://github.com/swyxio)
|
||||||
|
* [tbcdns](https://github.com/tbcdns)
|
||||||
|
* [tealjulia](https://github.com/tealjulia)
|
||||||
|
* [terencecho](https://github.com/terencecho)
|
||||||
|
* [thanhlmm](https://github.com/thanhlmm)
|
||||||
* [thomas-vl](https://github.com/thomas-vl)
|
* [thomas-vl](https://github.com/thomas-vl)
|
||||||
* [troyharvey](https://github.com/troyharvey)
|
* [timroes](https://github.com/timroes)
|
||||||
|
* [tirth7777777](https://github.com/tirth7777777)
|
||||||
|
* [tjirab](https://github.com/tjirab)
|
||||||
|
* [tkorenko](https://github.com/tkorenko)
|
||||||
|
* [tolik0](https://github.com/tolik0)
|
||||||
|
* [topefolorunso](https://github.com/topefolorunso)
|
||||||
|
* [trowacat](https://github.com/trowacat)
|
||||||
|
* [tryangul](https://github.com/tryangul)
|
||||||
|
* [TSkrebe](https://github.com/TSkrebe)
|
||||||
|
* [tuanchris](https://github.com/tuanchris)
|
||||||
* [tuliren](https://github.com/tuliren)
|
* [tuliren](https://github.com/tuliren)
|
||||||
|
* [tyagi-data-wizard](https://github.com/tyagi-data-wizard)
|
||||||
|
* [tybernstein](https://github.com/tybernstein)
|
||||||
* [TymoshokDmytro](https://github.com/TymoshokDmytro)
|
* [TymoshokDmytro](https://github.com/TymoshokDmytro)
|
||||||
* [tyschroed](https://github.com/tyschroed)
|
* [tyschroed](https://github.com/tyschroed)
|
||||||
* [varunbpatil](https://github.com/varunbpatil)
|
* [ufou](https://github.com/ufou)
|
||||||
* [vinhloc30796](https://github.com/vinhloc30796)
|
* [Upmitt](https://github.com/Upmitt)
|
||||||
* [VitaliiMaltsev](https://github.com/VitaliiMaltsev)
|
* [VitaliiMaltsev](https://github.com/VitaliiMaltsev)
|
||||||
* [vitaliizazmic](https://github.com/vitaliizazmic)
|
* [vitaliizazmic](https://github.com/vitaliizazmic)
|
||||||
* [vladimir-remar](https://github.com/vladimir-remar)
|
* [vladimir-remar](https://github.com/vladimir-remar)
|
||||||
* [vovavovavovavova](https://github.com/vovavovavovavova)
|
* [vovavovavovavova](https://github.com/vovavovavovavova)
|
||||||
* [vsayer](https://github.com/vsayer)
|
|
||||||
* [wallies](https://github.com/wallies)
|
* [wallies](https://github.com/wallies)
|
||||||
* [winar-jin](https://github.com/winar-jin)
|
* [winar-jin](https://github.com/winar-jin)
|
||||||
|
* [wissevrowl](https://github.com/wissevrowl)
|
||||||
|
* [Wittiest](https://github.com/Wittiest)
|
||||||
|
* [wjwatkinson](https://github.com/wjwatkinson)
|
||||||
|
* [Xabilahu](https://github.com/Xabilahu)
|
||||||
|
* [xiaohansong](https://github.com/xiaohansong)
|
||||||
|
* [xpuska513](https://github.com/xpuska513)
|
||||||
* [yahu98](https://github.com/yahu98)
|
* [yahu98](https://github.com/yahu98)
|
||||||
|
* [yannibenoit](https://github.com/yannibenoit)
|
||||||
* [yaroslav-dudar](https://github.com/yaroslav-dudar)
|
* [yaroslav-dudar](https://github.com/yaroslav-dudar)
|
||||||
* [yaroslav-hrytsaienko](https://github.com/yaroslav-hrytsaienko)
|
* [yaroslav-hrytsaienko](https://github.com/yaroslav-hrytsaienko)
|
||||||
|
* [YatsukBogdan1](https://github.com/YatsukBogdan1)
|
||||||
|
* [ycherniaiev](https://github.com/ycherniaiev)
|
||||||
* [yevhenii-ldv](https://github.com/yevhenii-ldv)
|
* [yevhenii-ldv](https://github.com/yevhenii-ldv)
|
||||||
|
* [YiyangLi](https://github.com/YiyangLi)
|
||||||
|
* [YowanR](https://github.com/YowanR)
|
||||||
|
* [yuhuishi-convect](https://github.com/yuhuishi-convect)
|
||||||
|
* [yurii-bidiuk](https://github.com/yurii-bidiuk)
|
||||||
|
* [Zawar92](https://github.com/Zawar92)
|
||||||
* [zestyping](https://github.com/zestyping)
|
* [zestyping](https://github.com/zestyping)
|
||||||
* [Zirochkaa](https://github.com/Zirochkaa)
|
* [Zirochkaa](https://github.com/Zirochkaa)
|
||||||
|
* [zkid18](https://github.com/zkid18)
|
||||||
* [zuc](https://github.com/zuc)
|
* [zuc](https://github.com/zuc)
|
||||||
* [zzstoatzz](https://github.com/zzstoatzz)
|
* [zzstoatzz](https://github.com/zzstoatzz)
|
||||||
|
* [zzztimbo](https://github.com/zzztimbo)
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
p=1;
|
p=1;
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
. tools/lib/lib.sh
|
|
||||||
|
|
||||||
assert_root
|
|
||||||
|
|
||||||
## Helper functions
|
|
||||||
|
|
||||||
get_epoch_time() {
|
|
||||||
date +'%s'
|
|
||||||
}
|
|
||||||
|
|
||||||
check_success() {
|
|
||||||
docker compose ps --all | grep "^$1" | grep -ie 'exit 0' -ie 'exited (0)' >/dev/null || (echo "$1 didn't run successfully"; exit 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
##
|
|
||||||
|
|
||||||
echo "Starting app..."
|
|
||||||
|
|
||||||
# Detach so we can run subsequent commands
|
|
||||||
# NOTE: this passes APPLY_FIELD_SELECTION=true, which enables a feature -- field selection -- which is currently disabled by default.
|
|
||||||
# We want to run our CI tests against the new feature while we prepare to release it.
|
|
||||||
VERSION=dev TRACKING_STRATEGY=logging USE_STREAM_CAPABLE_STATE=true BASIC_AUTH_USERNAME="" BASIC_AUTH_PASSWORD="" APPLY_FIELD_SELECTION=true docker compose -f docker-compose.yaml -f docker-compose.acceptance-test.yaml up -d
|
|
||||||
|
|
||||||
# Sometimes source/dest containers using airbyte volumes survive shutdown, which need to be killed in order to shut down properly.
|
|
||||||
shutdown_cmd="docker compose down -v || docker kill \$(docker ps -a -f volume=airbyte_workspace -f volume=airbyte_data -f volume=airbyte_db -q) && docker compose down -v"
|
|
||||||
# Uncomment for debugging. Warning, this is verbose.
|
|
||||||
# trap "echo 'docker compose logs:' && docker compose logs -t --tail 1000 && $shutdown_cmd" EXIT
|
|
||||||
|
|
||||||
echo "Waiting for services to begin"
|
|
||||||
starttime=`get_epoch_time`
|
|
||||||
maxtime=300
|
|
||||||
while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8000/api/v1/health)" != "200" ]];
|
|
||||||
do
|
|
||||||
echo "Waiting for docker deployment.."
|
|
||||||
currenttime=`get_epoch_time`
|
|
||||||
if [[ $(( $currenttime - $starttime )) -gt $maxtime ]]; then
|
|
||||||
docker compose ps
|
|
||||||
echo "Platform is taking more than ${maxtime}s to start. Aborting..."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
|
|
||||||
# Getting a snapshot of the docker compose state
|
|
||||||
docker compose ps
|
|
||||||
|
|
||||||
# Make sure init containers ran successfully
|
|
||||||
check_success 'init'
|
|
||||||
check_success 'airbyte-bootloader'
|
|
||||||
|
|
||||||
echo "Running e2e tests via gradle"
|
|
||||||
SUB_BUILD=PLATFORM USE_EXTERNAL_DEPLOYMENT=true ./gradlew :airbyte-tests:acceptanceTests --rerun-tasks --scan
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
. tools/lib/lib.sh
|
|
||||||
|
|
||||||
assert_root
|
|
||||||
|
|
||||||
|
|
||||||
echo "Getting docker internal host ip"
|
|
||||||
DOCKER_HOST_IP=$(ip -f inet add show docker0 | sed -En -e 's/.*inet ([0-9.]+).*/\1/p')
|
|
||||||
|
|
||||||
echo "Patching coredns configmap NodeHosts with new entry for docker host"
|
|
||||||
kubectl patch configmap/coredns \
|
|
||||||
-n kube-system \
|
|
||||||
--type merge \
|
|
||||||
-p '{"data":{"NodeHosts": "${DOCKER_HOST_IP} host.docker.internal" }}'
|
|
||||||
|
|
||||||
if [ -n "$CI" ]; then
|
|
||||||
echo "Deploying fluentbit"
|
|
||||||
helm repo add fluent https://fluent.github.io/helm-charts
|
|
||||||
helm repo update fluent
|
|
||||||
sed -i "s/PLACEHOLDER/${WORKFLOW_RUN_ID}/" tools/bin/fluent_values.yaml
|
|
||||||
helm install --values tools/bin/fluent_values.yaml --set env[1].name="AWS_ACCESS_KEY_ID" --set env[1].value=$(echo "$AWS_S3_INTEGRATION_TEST_CREDS" | jq -r .aws_access_key_id) \
|
|
||||||
--set env[2].name="AWS_SECRET_ACCESS_KEY" --set env[2].value=$(echo "$AWS_S3_INTEGRATION_TEST_CREDS" | jq -r .aws_secret_access_key) \
|
|
||||||
--set env[3].name="AWS_S3_BUCKET" --set env[3].value=${AWS_S3_BUCKET} \
|
|
||||||
--set env[4].name="SUITE_TYPE" --set env[4].value="helm-logs" \
|
|
||||||
--generate-name fluent/fluent-bit
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Replacing default Chart.yaml and values.yaml with a test one"
|
|
||||||
mv charts/airbyte/Chart.yaml charts/airbyte/Chart.yaml.old
|
|
||||||
mv charts/airbyte/Chart.yaml.test charts/airbyte/Chart.yaml
|
|
||||||
mv charts/airbyte/values.yaml charts/airbyte/values.yaml.old
|
|
||||||
mv charts/airbyte/values.yaml.test charts/airbyte/values.yaml
|
|
||||||
|
|
||||||
echo "Starting app..."
|
|
||||||
|
|
||||||
echo "Check if kind cluster is running..."
|
|
||||||
sudo docker ps
|
|
||||||
|
|
||||||
echo "Applying dev-integration-test manifests to kubernetes..."
|
|
||||||
cd charts/airbyte && helm repo add bitnami https://charts.bitnami.com/bitnami && helm dep update && cd -
|
|
||||||
helm upgrade --install --debug airbyte charts/airbyte
|
|
||||||
|
|
||||||
echo "Waiting for server to be ready..."
|
|
||||||
kubectl wait --for=condition=Available deployment/airbyte-server --timeout=300s || (kubectl describe pods && exit 1)
|
|
||||||
|
|
||||||
echo "Scale up workers by 2"
|
|
||||||
kubectl scale --replicas=2 deployment airbyte-worker
|
|
||||||
|
|
||||||
echo "Listing nodes scheduled for pods..."
|
|
||||||
kubectl describe pods | grep "Name\|Node"
|
|
||||||
|
|
||||||
|
|
||||||
# allocates a lot of time to start kube. takes a while for postgres+temporal to work things out
|
|
||||||
sleep 120
|
|
||||||
|
|
||||||
if [ -n "$CI" ]; then
|
|
||||||
server_logs () { kubectl logs deployment.apps/airbyte-server > /tmp/kubernetes_logs/server.txt; }
|
|
||||||
pod_sweeper_logs () { kubectl logs deployment.apps/airbyte-pod-sweeper > /tmp/kubernetes_logs/pod_sweeper.txt; }
|
|
||||||
worker_logs () { kubectl logs deployment.apps/airbyte-worker > /tmp/kubernetes_logs/worker.txt; }
|
|
||||||
db_logs () { kubectl logs deployment.apps/airbyte-db > /tmp/kubernetes_logs/db.txt; }
|
|
||||||
temporal_logs () { kubectl logs deployment.apps/airbyte-temporal > /tmp/kubernetes_logs/temporal.txt; }
|
|
||||||
describe_pods () { kubectl describe pods > /tmp/kubernetes_logs/describe_pods.txt; }
|
|
||||||
describe_nodes () { kubectl describe nodes > /tmp/kubernetes_logs/describe_nodes.txt; }
|
|
||||||
write_all_logs () {
|
|
||||||
server_logs;
|
|
||||||
worker_logs;
|
|
||||||
db_logs;
|
|
||||||
temporal_logs;
|
|
||||||
pod_sweeper_logs;
|
|
||||||
describe_nodes;
|
|
||||||
describe_pods;
|
|
||||||
}
|
|
||||||
# Uncomment for debugging. Warning, this is verbose.
|
|
||||||
# trap "mkdir -p /tmp/kubernetes_logs && write_all_logs" EXIT
|
|
||||||
fi
|
|
||||||
|
|
||||||
kubectl expose $(kubectl get po -l app.kubernetes.io/name=server -o name) --name exposed-server-svc --type NodePort --overrides '{ "apiVersion": "v1","spec":{"ports": [{"port":8001,"protocol":"TCP","targetPort":8001,"nodePort":8001}]}}'
|
|
||||||
|
|
||||||
echo "Running worker integration tests..."
|
|
||||||
KUBE=true SUB_BUILD=PLATFORM ./gradlew :airbyte-workers:integrationTest --scan
|
|
||||||
|
|
||||||
echo "Printing system disk usage..."
|
|
||||||
df -h
|
|
||||||
|
|
||||||
echo "Printing docker disk usage..."
|
|
||||||
docker system df
|
|
||||||
|
|
||||||
if [ -n "$CI" ]; then
|
|
||||||
echo "Pruning all images..."
|
|
||||||
docker image prune --all --force
|
|
||||||
|
|
||||||
echo "Printing system disk usage after pruning..."
|
|
||||||
df -h
|
|
||||||
|
|
||||||
echo "Printing docker disk usage after pruning..."
|
|
||||||
fi
|
|
||||||
docker system df
|
|
||||||
|
|
||||||
echo "Running e2e tests via gradle..."
|
|
||||||
KUBE=true SUB_BUILD=PLATFORM USE_EXTERNAL_DEPLOYMENT=true ./gradlew :airbyte-tests:acceptanceTests --scan
|
|
||||||
|
|
||||||
echo "Reverting changes back"
|
|
||||||
mv charts/airbyte/Chart.yaml charts/airbyte/Chart.yaml.test
|
|
||||||
mv charts/airbyte/Chart.yaml.old charts/airbyte/Chart.yaml
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# ------------- Import some defaults for the shell
|
|
||||||
|
|
||||||
# Source shell defaults
|
|
||||||
# $0 is the currently running program (this file)
|
|
||||||
this_file_directory=$(dirname $0)
|
|
||||||
relative_path_to_defaults=$this_file_directory/../shell_defaults
|
|
||||||
|
|
||||||
# if a file exists there, source it. otherwise complain
|
|
||||||
if test -f $relative_path_to_defaults; then
|
|
||||||
# source and '.' are the same program
|
|
||||||
source $relative_path_to_defaults
|
|
||||||
else
|
|
||||||
echo -e "\033[31m\nFAILED TO SOURCE TEST RUNNING OPTIONS.\033[39m"
|
|
||||||
echo -e "\033[31mTried $relative_path_to_defaults\033[39m"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# ------------- Start Main
|
|
||||||
set +o xtrace
|
|
||||||
echo -e "$blue_text""This test ensures no changes result from running docusaurs build""$default_text"
|
|
||||||
set -o xtrace
|
|
||||||
|
|
||||||
# Generate static files
|
|
||||||
cd $this_file_directory #lets us run this without relative path dep
|
|
||||||
cd ../../docusaurus
|
|
||||||
yarn install
|
|
||||||
yarn run build
|
|
||||||
|
|
||||||
|
|
||||||
# +o counterintuitively unsets the option
|
|
||||||
set +o errexit # exit 1 expected below in normal operation
|
|
||||||
# this line is the test
|
|
||||||
git diff-index --quiet HEAD --
|
|
||||||
clean=$? # $? is the return status of the last command
|
|
||||||
set -o errexit
|
|
||||||
|
|
||||||
|
|
||||||
# ------------- User communication on testing results
|
|
||||||
|
|
||||||
set +o xtrace
|
|
||||||
|
|
||||||
if test $clean -eq 0; then
|
|
||||||
echo -e "$blue_text""\n\n\nDocusaurs has no changes to commit!""$default_text"
|
|
||||||
echo -e "$blue_text""Generated documentation should be as local testing""$default_text"
|
|
||||||
|
|
||||||
else
|
|
||||||
echo -e "$red_text""\n\n\ndocusaurs build resulted in changes from this commit.""$default_text"
|
|
||||||
echo -e "$red_text"" Run docusaurus build locally (yarn run build), commit, and try again""$default_text"
|
|
||||||
fi
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# ------------- Import some defaults for the shell
|
|
||||||
|
|
||||||
# Source shell defaults
|
|
||||||
# $0 is the currently running program (this file)
|
|
||||||
this_file_directory=$(dirname $0)
|
|
||||||
relative_path_to_defaults=$this_file_directory/../shell_defaults
|
|
||||||
|
|
||||||
# if a file exists there, source it. otherwise complain
|
|
||||||
if test -f $relative_path_to_defaults; then
|
|
||||||
# source and '.' are the same program
|
|
||||||
source $relative_path_to_defaults
|
|
||||||
else
|
|
||||||
echo -e "\033[31m\nFAILED TO SOURCE TEST RUNNING OPTIONS.\033[39m"
|
|
||||||
echo -e "\033[31mTried $relative_path_to_defaults\033[39m"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
diff_output="$(git --no-pager diff)"
|
|
||||||
|
|
||||||
set +o xtrace
|
|
||||||
if test -n "$diff_output"; then
|
|
||||||
echo -e "$red_text""File changes were detected! Lame!""$default_text"
|
|
||||||
echo -e "$red_text""This is usually do to forgetting to run a command locally before committing""$default_text"
|
|
||||||
echo -e "$red_text""try running the format command and see if you get a diff ""$default_text"
|
|
||||||
echo -e "$red_text""ie: SUB_BUILD=PLATFORM ./gradlew format --scan --info --stacktrace""$default_text"
|
|
||||||
else
|
|
||||||
echo -e "$blue_text""No git changes detected! Yay!""$default_text"
|
|
||||||
fi
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
printf "Docker ";
|
|
||||||
if [[ $(which docker) && $(docker --version) ]]; then
|
|
||||||
printf "is installed"
|
|
||||||
else
|
|
||||||
printf "needs to be installed"
|
|
||||||
fi;
|
|
||||||
printf "\n";
|
|
||||||
desired="14"
|
|
||||||
printf "Java ";
|
|
||||||
if [[ "$(which java)" && "$(java --version)" ]];
|
|
||||||
then
|
|
||||||
printf "installed"
|
|
||||||
str="$(java --version)"
|
|
||||||
IFS=' ' read -ra array <<< "${str}"
|
|
||||||
version="${array[1]}"
|
|
||||||
if [[ "${version}" > "${desired}" || "${version}" == "${desired}" ]];
|
|
||||||
then
|
|
||||||
printf " and functional"
|
|
||||||
else
|
|
||||||
printf " but not functional, must have version ${desired} at least"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
printf "not installed, must have version ${desired} at least"
|
|
||||||
fi;
|
|
||||||
printf "\n";
|
|
||||||
desired="20.1"
|
|
||||||
printf "Pip ";
|
|
||||||
if [[ "$(which pip)" && "$(pip --version)" ]];
|
|
||||||
then
|
|
||||||
printf "installed"
|
|
||||||
str="$(pip --version)"
|
|
||||||
IFS=' ' read -ra array <<< "${str}"
|
|
||||||
version="${array[1]}"
|
|
||||||
if [[ "${version}" > "${desired}" || "${version}" == "${desired}" ]];
|
|
||||||
then
|
|
||||||
printf " and functional"
|
|
||||||
else
|
|
||||||
printf " but not functional, must have version ${desired} at least"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
printf "not installed, must have version ${desired} at least"
|
|
||||||
fi;
|
|
||||||
printf "\n";
|
|
||||||
desired="3.9.11"
|
|
||||||
printf "Python ";
|
|
||||||
if [[ "$(which python3)" && "$(python3 --version)" ]];
|
|
||||||
then
|
|
||||||
printf "installed"
|
|
||||||
str="$(python3 --version)"
|
|
||||||
IFS=' ' read -ra array <<< "${str}"
|
|
||||||
version="${array[1]}"
|
|
||||||
if [[ "${version}" > "${desired}" || "${version}" == "${desired}" ]];
|
|
||||||
then
|
|
||||||
printf " and functional"
|
|
||||||
else
|
|
||||||
printf " but not functional, must have version ${desired} at least"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
printf "not installed, must have version ${desired} at least"
|
|
||||||
fi;
|
|
||||||
printf "\n";
|
|
||||||
printf "JQ ";
|
|
||||||
if [[ $(which jq) && $(jq --version) ]]; then
|
|
||||||
printf "is installed"
|
|
||||||
else
|
|
||||||
printf "needs to be installed"
|
|
||||||
fi;
|
|
||||||
printf "\n";
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# GCS resources for the following tests are located in the dataline-integration-testing GCP project.
|
|
||||||
# GCS testing creds can be found in the "google cloud storage ( gcs ) test creds" secret in the `Shared-integration-tests`
|
|
||||||
# folder in Lastpass.
|
|
||||||
|
|
||||||
# AWS resources for the following tests are located in the dev account.
|
|
||||||
# S3 testing creds can be found in the `AWS_S3_INTEGRATION_TEST_CREDS` secret in the `Shared-integration-tests`
|
|
||||||
# folder in Lastpass.
|
|
||||||
|
|
||||||
echo "Writing cloud storage credentials.."
|
|
||||||
|
|
||||||
# S3
|
|
||||||
export AWS_ACCESS_KEY_ID="$(echo "$AWS_S3_INTEGRATION_TEST_CREDS" | jq -r .aws_access_key_id)"
|
|
||||||
export AWS_SECRET_ACCESS_KEY="$(echo "$AWS_S3_INTEGRATION_TEST_CREDS" | jq -r .aws_secret_access_key)"
|
|
||||||
export S3_LOG_BUCKET=airbyte-kube-integration-logging-test
|
|
||||||
export S3_LOG_BUCKET_REGION=us-west-2
|
|
||||||
|
|
||||||
# GCS
|
|
||||||
echo "$GOOGLE_CLOUD_STORAGE_TEST_CREDS" > "/tmp/gcs.json"
|
|
||||||
export GOOGLE_APPLICATION_CREDENTIALS="/tmp/gcs.json"
|
|
||||||
export GCS_LOG_BUCKET=airbyte-kube-integration-logging-test
|
|
||||||
|
|
||||||
# Run the logging test first since the same client is used in the log4j2 integration test.
|
|
||||||
echo "Running log client tests.."
|
|
||||||
SUB_BUILD=PLATFORM ./gradlew :airbyte-config:models:logClientsIntegrationTest --scan
|
|
||||||
|
|
||||||
echo "Running cloud storage tests.."
|
|
||||||
SUB_BUILD=PLATFORM ./gradlew :airbyte-workers:cloudStorageIntegrationTest --scan
|
|
||||||
|
|
||||||
# Reset existing configurations and run this for each possible configuration
|
|
||||||
# These configurations mirror the configurations documented in https://docs.airbyte.io/deploying-airbyte/on-kubernetes#configure-logs.
|
|
||||||
# Some duplication here for clarity.
|
|
||||||
export WORKER_ENVIRONMENT=kubernetes
|
|
||||||
|
|
||||||
echo "Setting S3 configuration.."
|
|
||||||
export AWS_ACCESS_KEY_ID="$(echo "$AWS_S3_INTEGRATION_TEST_CREDS" | jq -r .aws_access_key_id)"
|
|
||||||
export AWS_SECRET_ACCESS_KEY="$(echo "$AWS_S3_INTEGRATION_TEST_CREDS" | jq -r .aws_secret_access_key)"
|
|
||||||
export S3_LOG_BUCKET=airbyte-kube-integration-logging-test
|
|
||||||
export S3_LOG_BUCKET_REGION=us-west-2
|
|
||||||
export S3_MINIO_ENDPOINT=
|
|
||||||
export S3_PATH_STYLE_ACCESS=
|
|
||||||
|
|
||||||
export GOOGLE_APPLICATION_CREDENTIALS=
|
|
||||||
export GCS_LOG_BUCKET=
|
|
||||||
|
|
||||||
echo "Running logging to S3 test.."
|
|
||||||
SUB_BUILD=PLATFORM ./gradlew :airbyte-config:models:log4j2IntegrationTest --scan --rerun-tasks -i
|
|
||||||
|
|
||||||
echo "Setting GCS configuration.."
|
|
||||||
export AWS_ACCESS_KEY_ID=
|
|
||||||
export AWS_SECRET_ACCESS_KEY=
|
|
||||||
export S3_LOG_BUCKET=
|
|
||||||
export S3_LOG_BUCKET_REGION=
|
|
||||||
export S3_MINIO_ENDPOINT=
|
|
||||||
export S3_PATH_STYLE_ACCESS=
|
|
||||||
|
|
||||||
export GOOGLE_APPLICATION_CREDENTIALS="/tmp/gcs.json"
|
|
||||||
export GCS_LOG_BUCKET=airbyte-kube-integration-logging-test
|
|
||||||
|
|
||||||
echo "Running logging to GCS test.."
|
|
||||||
SUB_BUILD=PLATFORM ./gradlew :airbyte-config:models:log4j2IntegrationTest --scan --rerun-tasks -i
|
|
||||||
|
|
||||||
echo "Starting Minio service.."
|
|
||||||
wget https://dl.min.io/server/minio/release/linux-amd64/minio
|
|
||||||
chmod +x minio
|
|
||||||
|
|
||||||
export MINIO_ROOT_USER=minio
|
|
||||||
export MINIO_ROOT_PASSWORD=miniostorage
|
|
||||||
./minio server /tmp/desktop &
|
|
||||||
|
|
||||||
echo "Setting Minio configuration.."
|
|
||||||
export AWS_ACCESS_KEY_ID=minio
|
|
||||||
export AWS_SECRET_ACCESS_KEY=miniostorage
|
|
||||||
export S3_LOG_BUCKET=airbyte-kube-integration-logging-test
|
|
||||||
export S3_LOG_BUCKET_REGION=
|
|
||||||
export S3_MINIO_ENDPOINT=http://localhost:9000
|
|
||||||
export S3_PATH_STYLE_ACCESS=true
|
|
||||||
|
|
||||||
export GOOGLE_APPLICATION_CREDENTIALS=
|
|
||||||
export GCS_LOG_BUCKET=
|
|
||||||
|
|
||||||
echo "Running logging to Minio test.."
|
|
||||||
SUB_BUILD=PLATFORM ./gradlew :airbyte-config:models:log4j2IntegrationTest --scan --rerun-tasks -i
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
config:
|
|
||||||
outputs: |
|
|
||||||
[OUTPUT]
|
|
||||||
Name s3
|
|
||||||
Match kube.*
|
|
||||||
bucket ${AWS_S3_BUCKET}
|
|
||||||
region us-east-2
|
|
||||||
total_file_size 1M
|
|
||||||
upload_timeout 2m
|
|
||||||
use_put_object On
|
|
||||||
log_key log
|
|
||||||
s3_key_format /${SUITE_TYPE}/${WORKFLOW_RUN_ID}/$TAG[4]/$UUID.log
|
|
||||||
env:
|
|
||||||
- name: WORKFLOW_RUN_ID
|
|
||||||
value: 'PLACEHOLDER'
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
. tools/lib/lib.sh
|
|
||||||
|
|
||||||
assert_root
|
|
||||||
kubectl --help
|
|
||||||
|
|
||||||
NAMESPACE=$(openssl rand -hex 12)
|
|
||||||
echo "Namespace" $NAMESPACE
|
|
||||||
|
|
||||||
TAG=$(openssl rand -hex 12)
|
|
||||||
echo "Tag" $TAG
|
|
||||||
|
|
||||||
docker login -u "$DOCKER_HUB_USERNAME" -p "$DOCKER_HUB_PASSWORD"
|
|
||||||
VERSION=$TAG ./gradlew build
|
|
||||||
# VERSION=$TAG docker compose -f docker-compose.build.yaml push
|
|
||||||
|
|
||||||
# For running on Mac
|
|
||||||
#sed -i .bak 's/default/'$NAMESPACE'/g' kube/overlays/dev/kustomization.yaml
|
|
||||||
#sed -i .bak 's/dev/'$TAG'/g' kube/overlays/dev/kustomization.yaml
|
|
||||||
|
|
||||||
# sed -i 's/default/'$NAMESPACE'/g' kube/overlays/dev/kustomization.yaml
|
|
||||||
# sed -i 's/dev/'$TAG'/g' kube/overlays/dev/kustomization.yaml
|
|
||||||
|
|
||||||
helm upgrade --install --debug --namespace $NAMESPACE \\
|
|
||||||
--set airbyte-bootloader.image.tag=$TAG \\
|
|
||||||
--set webapp.image.tag=$TAG \\
|
|
||||||
--set worker.image.tag=$TAG \\
|
|
||||||
--set server.image.tag=$TAG \\
|
|
||||||
ab charts/airbyte
|
|
||||||
kubectl apply -f tools/bin/gke-kube-helm-acceptance-test/postgres-source.yaml --namespace=$NAMESPACE
|
|
||||||
kubectl apply -f tools/bin/gke-kube-helm-acceptance-test/postgres-destination.yaml --namespace=$NAMESPACE
|
|
||||||
|
|
||||||
sleep 180s
|
|
||||||
|
|
||||||
function findAndDeleteTag () {
|
|
||||||
if [ $(curl --fail -LI --request GET 'https://hub.docker.com/v2/repositories/airbyte/'$1'/tags/'$TAG'/' --header 'Authorization: JWT '$2'' -o /dev/null -w '%{http_code}\n' -s) == "200" ];
|
|
||||||
then
|
|
||||||
echo "FOUND TAG" $TAG "in repository" $1 ",DELETING IT"
|
|
||||||
curl --request DELETE 'https://hub.docker.com/v2/repositories/airbyte/'$1'/tags/'$TAG'/' --header 'Authorization: JWT '$2'';
|
|
||||||
else
|
|
||||||
echo "NOT FOUND TAG" $TAG "in repository" $1;
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function cleanUpImages () {
|
|
||||||
TOKEN=$(curl --request POST 'https://hub.docker.com/v2/users/login/' --header 'Content-Type: application/json' --data-raw '{"username":"'$DOCKER_HUB_USERNAME'","password":"'$DOCKER_HUB_PASSWORD'"}' | jq '.token')
|
|
||||||
TOKEN="${TOKEN%\"}"
|
|
||||||
TOKEN="${TOKEN#\"}"
|
|
||||||
|
|
||||||
findAndDeleteTag "init" $TOKEN
|
|
||||||
findAndDeleteTag "db" $TOKEN
|
|
||||||
findAndDeleteTag "seed" $TOKEN
|
|
||||||
findAndDeleteTag "scheduler" $TOKEN
|
|
||||||
findAndDeleteTag "server" $TOKEN
|
|
||||||
findAndDeleteTag "webapp" $TOKEN
|
|
||||||
findAndDeleteTag "migration" $TOKEN
|
|
||||||
findAndDeleteTag "cron" $TOKEN
|
|
||||||
}
|
|
||||||
|
|
||||||
trap "kubectl delete namespaces $NAMESPACE --grace-period=0 --force" EXIT
|
|
||||||
|
|
||||||
kubectl port-forward svc/airbyte-server-svc 8001:8001 --namespace=$NAMESPACE &
|
|
||||||
|
|
||||||
kubectl port-forward svc/postgres-source-svc 2000:5432 --namespace=$NAMESPACE &
|
|
||||||
|
|
||||||
kubectl port-forward svc/postgres-destination-svc 4000:5432 --namespace=$NAMESPACE &
|
|
||||||
|
|
||||||
sleep 10s
|
|
||||||
|
|
||||||
echo "Running e2e tests via gradle..."
|
|
||||||
KUBE=true IS_GKE=true SUB_BUILD=PLATFORM USE_EXTERNAL_DEPLOYMENT=true ./gradlew :airbyte-tests:acceptanceTests --scan -i
|
|
||||||
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: postgres-destination-config
|
|
||||||
labels:
|
|
||||||
app: postgres-destination
|
|
||||||
data:
|
|
||||||
POSTGRES_DB: postgresdb
|
|
||||||
POSTGRES_USER: postgresadmin
|
|
||||||
POSTGRES_PASSWORD: admin123
|
|
||||||
---
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: postgres-destination
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: postgres-destination
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: postgres-destination
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: postgres-destination
|
|
||||||
image: postgres:13-alpine
|
|
||||||
imagePullPolicy: "IfNotPresent"
|
|
||||||
ports:
|
|
||||||
- containerPort: 5432
|
|
||||||
envFrom:
|
|
||||||
- configMapRef:
|
|
||||||
name: postgres-destination-config
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: postgres-destination-svc
|
|
||||||
labels:
|
|
||||||
app: postgres-destination
|
|
||||||
spec:
|
|
||||||
type: ClusterIP
|
|
||||||
ports:
|
|
||||||
- port: 5432
|
|
||||||
selector:
|
|
||||||
app: postgres-destination
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: postgres-source-config
|
|
||||||
labels:
|
|
||||||
app: postgres-source
|
|
||||||
data:
|
|
||||||
POSTGRES_DB: postgresdb
|
|
||||||
POSTGRES_USER: postgresadmin
|
|
||||||
POSTGRES_PASSWORD: admin123
|
|
||||||
---
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: postgres-source
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: postgres-source
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: postgres-source
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: postgres-source
|
|
||||||
image: debezium/postgres:13-alpine
|
|
||||||
imagePullPolicy: "IfNotPresent"
|
|
||||||
ports:
|
|
||||||
- containerPort: 5432
|
|
||||||
envFrom:
|
|
||||||
- configMapRef:
|
|
||||||
name: postgres-source-config
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: postgres-source-svc
|
|
||||||
labels:
|
|
||||||
app: postgres-source
|
|
||||||
spec:
|
|
||||||
type: ClusterIP
|
|
||||||
ports:
|
|
||||||
- port: 5432
|
|
||||||
selector:
|
|
||||||
app: postgres-source
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
. tools/lib/lib.sh
|
|
||||||
|
|
||||||
IMG_NAME=airbyte/build-project:dev
|
|
||||||
TMP_VOLUME_NAME=gradlew-tmp
|
|
||||||
|
|
||||||
main() {
|
|
||||||
assert_root
|
|
||||||
|
|
||||||
if [[ $# -gt 0 ]]; then
|
|
||||||
OPTS=
|
|
||||||
CMD="./gradlew $@"
|
|
||||||
else
|
|
||||||
OPTS=-it
|
|
||||||
CMD=/bin/bash
|
|
||||||
fi
|
|
||||||
local args=${@:-/bin/bash}
|
|
||||||
|
|
||||||
docker build -f Dockerfile.build . -t $IMG_NAME --target build-project
|
|
||||||
|
|
||||||
docker run $OPTS --rm \
|
|
||||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
||||||
-v /tmp:/tmp \
|
|
||||||
-v $(pwd):/code \
|
|
||||||
-p 5005:5005 \
|
|
||||||
-e GRADLE_OPTS="-Dorg.gradle.daemon=false" \
|
|
||||||
$IMG_NAME $CMD
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
1
tools/bin/load_test/.gitignore
vendored
1
tools/bin/load_test/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
cleanup/
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
# Load Testing Airbyte
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
To perform a stress test of an Airbyte deployment, the `load_test_airbyte.sh` shell script is useful to quickly and easily create many connections.
|
|
||||||
This script creates a new E2E Test Source, E2E Test Destination, and a configurable number of connections in the indicated workspace.
|
|
||||||
|
|
||||||
## Instructions
|
|
||||||
From your top-level `/airbyte` directory, run the following to perform a load test:
|
|
||||||
|
|
||||||
```
|
|
||||||
./tools/bin/load_test/load_test_airbyte.sh -W <workspace id> -C <num_connections>
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
By default, the script assumes that the Airbyte instance's server is accessible at `localhost:8001`. This is the default server location when
|
|
||||||
deploying Airbyte with `docker compose up`.
|
|
||||||
|
|
||||||
Additionally, the E2E Test Source created by the script will take 10 minutes to complete a sync by default.
|
|
||||||
|
|
||||||
These defaults can be overridden with flags. All available flags are described as follows:
|
|
||||||
|
|
||||||
```
|
|
||||||
-h
|
|
||||||
Display help
|
|
||||||
|
|
||||||
-W <workspace id>
|
|
||||||
Specify the workspace ID where new connectors and connections should be created.
|
|
||||||
Required.
|
|
||||||
|
|
||||||
-H <hostname>
|
|
||||||
Specify the Airbyte API server hostname that the script should call to create new connectors and connections.
|
|
||||||
Defaults to 'localhost'.
|
|
||||||
|
|
||||||
-P <port>
|
|
||||||
Specify the port for the Airbyte server.
|
|
||||||
Defaults to '8001'.
|
|
||||||
|
|
||||||
-X <header>
|
|
||||||
Specify the X-Endpoint-API-UserInfo header value for API authentication.
|
|
||||||
For Google Cloud Endpoint authentication only.
|
|
||||||
|
|
||||||
-C <count>
|
|
||||||
Specify the number of connections that should be created by the script.
|
|
||||||
Defaults to '1'.
|
|
||||||
|
|
||||||
-T <minutes>
|
|
||||||
Specify the time in minutes that each connection should sync for.
|
|
||||||
Defaults to '10'.
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### Load Testing on Kubernetes
|
|
||||||
|
|
||||||
To load test a deployment of Airbyte running on Kubernetes, you will need to set up port-forwarding to the `airbyte-server` deployment.
|
|
||||||
This can be accomplished with the following command:
|
|
||||||
|
|
||||||
```
|
|
||||||
kubectl port-forward deployment/airbyte-server -n ab 8001:8001
|
|
||||||
```
|
|
||||||
|
|
||||||
This will make the Airbyte server available at `localhost:8001`
|
|
||||||
|
|
||||||
|
|
||||||
### Authentication
|
|
||||||
|
|
||||||
If your deployment of Airbyte happens to use Google Cloud Endpoints for authentication, you can use the `-X` option to pass
|
|
||||||
an `X-Endpoint-API-UserInfo` header value.
|
|
||||||
|
|
||||||
|
|
||||||
## Cleanup
|
|
||||||
The `load_test_airbyte.sh` script writes created IDs to files in the script's `/cleanup` directory. To delete resources that were created by the load
|
|
||||||
test script, you can run `cleanup_load_test.sh`, which reads IDs from the `/cleanup` directory and calls the Airbyte API to delete them.
|
|
||||||
|
|
||||||
|
|
||||||
### Cleanup Instructions
|
|
||||||
To run the cleanup script, from the top-level `airbyte` directory, run the following:
|
|
||||||
|
|
||||||
```
|
|
||||||
./tools/bin/load_test/cleanup_load_test.sh -W <workspace_id>
|
|
||||||
```
|
|
||||||
|
|
||||||
All available cleanup script flags are described as follows:
|
|
||||||
|
|
||||||
```
|
|
||||||
-h
|
|
||||||
Display help
|
|
||||||
|
|
||||||
-W <workspace id>
|
|
||||||
Specify the workspace ID from where connectors and connections should be deleted.
|
|
||||||
Required.
|
|
||||||
|
|
||||||
-H <hostname>
|
|
||||||
Specify the Airbyte API server hostname that the script should call to delete connectors and connections.
|
|
||||||
Defaults to 'localhost'.
|
|
||||||
|
|
||||||
-P <port>
|
|
||||||
Specify the port for the Airbyte server.
|
|
||||||
Defaults to '8001'.
|
|
||||||
|
|
||||||
-X <header>
|
|
||||||
Specify the X-Endpoint-API-UserInfo header value for API authentication.
|
|
||||||
For Google Cloud Endpoint authentication only.
|
|
||||||
```
|
|
||||||
@@ -1,158 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
<<comment
|
|
||||||
This script cleans up an earlier load test. It reads from cleanup files that the load test script writes to
|
|
||||||
in order to determine which IDs to delete.
|
|
||||||
comment
|
|
||||||
|
|
||||||
echo "Sourcing environment variables from .env"
|
|
||||||
source .env
|
|
||||||
|
|
||||||
cd "$(dirname "$0")"
|
|
||||||
source load_test_utils.sh
|
|
||||||
|
|
||||||
function showhelp {
|
|
||||||
echo -e """Usage $(dirname $0)/cleanup_load_test [OPTIONS]
|
|
||||||
|
|
||||||
cleanup_load_test deletes resources that were created from an earlier load test.
|
|
||||||
|
|
||||||
Available OPTIONs:
|
|
||||||
|
|
||||||
${CLEAR}-h
|
|
||||||
${GREEN}Display help
|
|
||||||
|
|
||||||
${CLEAR}-W <workspace id>
|
|
||||||
${GREEN}Specify the workspace ID from where connectors and connections should be deleted.
|
|
||||||
Required.
|
|
||||||
|
|
||||||
${CLEAR}-H <hostname>
|
|
||||||
${GREEN}Specify the Airbyte API server hostname that the script should call to delete connectors and connections.
|
|
||||||
Defaults to 'localhost'.
|
|
||||||
|
|
||||||
${CLEAR}-P <port>
|
|
||||||
${GREEN}Specify the port for the Airbyte server.
|
|
||||||
Defaults to '8001'.
|
|
||||||
|
|
||||||
${CLEAR}-X <header>
|
|
||||||
${GREEN}Specify the X-Endpoint-API-UserInfo header value for API authentication.
|
|
||||||
For Google Cloud Endpoint authentication only.
|
|
||||||
""" && exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
hostname=localhost
|
|
||||||
api_port=8001
|
|
||||||
x_endpoint_header=""
|
|
||||||
|
|
||||||
while getopts "hW:H:P:X:kN:" options ; do
|
|
||||||
case "${options}" in
|
|
||||||
h)
|
|
||||||
showhelp
|
|
||||||
;;
|
|
||||||
W)
|
|
||||||
workspace_id="${OPTARG}"
|
|
||||||
;;
|
|
||||||
H)
|
|
||||||
hostname="${OPTARG}"
|
|
||||||
;;
|
|
||||||
P)
|
|
||||||
api_port="${OPTARG}"
|
|
||||||
;;
|
|
||||||
X)
|
|
||||||
x_endpoint_header="${OPTARG}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
showhelp
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
function setup {
|
|
||||||
if test -z "$workspace_id"; then
|
|
||||||
echo "error: must set a workspace id with -W"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "set workspace_id to ${workspace_id}"
|
|
||||||
echo "set hostname to ${hostname}"
|
|
||||||
echo "set api_port to ${api_port}"
|
|
||||||
|
|
||||||
setCleanupFilesForWorkspace $workspace_id
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteConnections {
|
|
||||||
while test -s $CONNECTION_CLEANUP_FILE
|
|
||||||
do
|
|
||||||
connectionId=$(readFirstLineFromFile $CONNECTION_CLEANUP_FILE)
|
|
||||||
callApi "connections/delete" "{\"connectionId\":\"$connectionId\"}"
|
|
||||||
echo "deleted connection with ID $connectionId"
|
|
||||||
|
|
||||||
# deletion succeeded, so remove the ID from the cleanup file
|
|
||||||
removeFirstLineFromFile $CONNECTION_CLEANUP_FILE
|
|
||||||
done
|
|
||||||
|
|
||||||
# if file exists and is empty
|
|
||||||
if test -e $CONNECTION_CLEANUP_FILE && ! test -s $CONNECTION_CLEANUP_FILE
|
|
||||||
then
|
|
||||||
rm $CONNECTION_CLEANUP_FILE
|
|
||||||
echo "removed cleanup file $CONNECTION_CLEANUP_FILE"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteSources {
|
|
||||||
while test -s $SOURCE_CLEANUP_FILE
|
|
||||||
do
|
|
||||||
sourceId=$(readFirstLineFromFile $SOURCE_CLEANUP_FILE)
|
|
||||||
callApi "sources/delete" "{\"sourceId\":\"$sourceId\"}"
|
|
||||||
echo "deleted source with ID $sourceId"
|
|
||||||
|
|
||||||
# deletion succeeded, so remove the ID from the cleanup file
|
|
||||||
removeFirstLineFromFile $SOURCE_CLEANUP_FILE
|
|
||||||
done
|
|
||||||
|
|
||||||
# if file exists and is empty
|
|
||||||
if test -e $SOURCE_CLEANUP_FILE && ! test -s $SOURCE_CLEANUP_FILE
|
|
||||||
then
|
|
||||||
rm $SOURCE_CLEANUP_FILE
|
|
||||||
echo "removed cleanup file $SOURCE_CLEANUP_FILE"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteDestinations {
|
|
||||||
while test -s $DESTINATION_CLEANUP_FILE
|
|
||||||
do
|
|
||||||
destinationId=$(readFirstLineFromFile $DESTINATION_CLEANUP_FILE)
|
|
||||||
callApi "destinations/delete" "{\"destinationId\":\"$destinationId\"}"
|
|
||||||
echo "deleted destination with ID $destinationId"
|
|
||||||
|
|
||||||
# deletion succeeded, so remove the ID from the cleanup file
|
|
||||||
removeFirstLineFromFile $DESTINATION_CLEANUP_FILE
|
|
||||||
done
|
|
||||||
|
|
||||||
# if file exists and is empty
|
|
||||||
if test -e $DESTINATION_CLEANUP_FILE && ! test -s $DESTINATION_CLEANUP_FILE
|
|
||||||
then
|
|
||||||
rm $DESTINATION_CLEANUP_FILE
|
|
||||||
echo "removed cleanup file $DESTINATION_CLEANUP_FILE"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
############
|
|
||||||
## MAIN ##
|
|
||||||
############
|
|
||||||
|
|
||||||
if [[ $# -eq 0 ]] ; then
|
|
||||||
showhelp
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
setup
|
|
||||||
|
|
||||||
deleteConnections
|
|
||||||
|
|
||||||
deleteSources
|
|
||||||
|
|
||||||
deleteDestinations
|
|
||||||
|
|
||||||
echo "Finished!"
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
{
|
|
||||||
"sourceId": "replace_source_id",
|
|
||||||
"destinationId": "replace_destination_id",
|
|
||||||
"syncCatalog": {
|
|
||||||
"streams": [
|
|
||||||
{
|
|
||||||
"config": {
|
|
||||||
"syncMode": "full_refresh",
|
|
||||||
"cursorField": [],
|
|
||||||
"destinationSyncMode": "overwrite",
|
|
||||||
"primaryKey": [],
|
|
||||||
"aliasName": "data_stream",
|
|
||||||
"selected": true
|
|
||||||
},
|
|
||||||
"stream": {
|
|
||||||
"name": "data_stream",
|
|
||||||
"jsonSchema": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"column1": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"supportedSyncModes": [
|
|
||||||
"full_refresh"
|
|
||||||
],
|
|
||||||
"defaultCursorField": [],
|
|
||||||
"sourceDefinedPrimaryKey": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"prefix": "",
|
|
||||||
"namespaceDefinition": "destination",
|
|
||||||
"namespaceFormat": "${SOURCE_NAMESPACE}",
|
|
||||||
"scheduleType": "basic",
|
|
||||||
"scheduleData": {
|
|
||||||
"basicSchedule": {
|
|
||||||
"units": 24,
|
|
||||||
"timeUnit": "hours"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"name": "replace_connection_name",
|
|
||||||
"operations": [],
|
|
||||||
"status": "active"
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "End-to-End Testing (/dev/null)",
|
|
||||||
"destinationDefinitionId": "replace_destination_definition_id",
|
|
||||||
"workspaceId": "replace_workspace_id",
|
|
||||||
"connectionConfiguration": {
|
|
||||||
"type": "SILENT"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,243 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
<<comment
|
|
||||||
This script performs a load test against an existing Airbyte instance by calling the instance's API to create and sync new connections.
|
|
||||||
It is intended to work with any Airbyte instance (local or remote, docker or kube, OSS or Cloud). It authenticates using a special auth header
|
|
||||||
that requires port-forwarding. It stores connector and connection IDs that it creates in a local file. The script can be run in cleanup mode,
|
|
||||||
which means the script will delete every connector and connection ID that it created and stored in that file.
|
|
||||||
comment
|
|
||||||
|
|
||||||
echo "Sourcing environment variables from .env"
|
|
||||||
source .env
|
|
||||||
|
|
||||||
cd "$(dirname "$0")"
|
|
||||||
source load_test_utils.sh
|
|
||||||
|
|
||||||
function showhelp {
|
|
||||||
echo -e """Usage $(dirname $0)/load_test_airbyte [OPTIONS]
|
|
||||||
|
|
||||||
load_test_airbyte performs a load-test against an existing Airbyte instance.
|
|
||||||
|
|
||||||
Available OPTIONs:
|
|
||||||
|
|
||||||
${CLEAR}-h
|
|
||||||
${GREEN}Display help
|
|
||||||
|
|
||||||
${CLEAR}-W <workspace id>
|
|
||||||
${GREEN}Specify the workspace ID where new connectors and connections should be created.
|
|
||||||
Required.
|
|
||||||
|
|
||||||
${CLEAR}-H <hostname>
|
|
||||||
${GREEN}Specify the Airbyte API server hostname that the script should call to create new connectors and connections.
|
|
||||||
Defaults to 'localhost'.
|
|
||||||
|
|
||||||
${CLEAR}-P <port>
|
|
||||||
${GREEN}Specify the port for the Airbyte server.
|
|
||||||
Defaults to '8001'.
|
|
||||||
|
|
||||||
${CLEAR}-X <header>
|
|
||||||
${GREEN}Specify the X-Endpoint-API-UserInfo header value for API authentication.
|
|
||||||
For Google Cloud Endpoint authentication only.
|
|
||||||
|
|
||||||
${CLEAR}-C <count>
|
|
||||||
${GREEN}Specify the number of connections that should be created by the script.
|
|
||||||
Defaults to '1'.
|
|
||||||
|
|
||||||
${CLEAR}-T <minutes>
|
|
||||||
${GREEN}Specify the time in minutes that each connection should sync for.
|
|
||||||
Defaults to '10'.
|
|
||||||
"""
|
|
||||||
}
|
|
||||||
|
|
||||||
hostname=localhost
|
|
||||||
api_port=8001
|
|
||||||
x_endpoint_header=
|
|
||||||
num_connections=1
|
|
||||||
sync_minutes=10
|
|
||||||
|
|
||||||
while getopts "hW:H:P:X:C:T:kN:-:" options ; do
|
|
||||||
case "${options}" in
|
|
||||||
-)
|
|
||||||
case "${OPTARG}" in
|
|
||||||
debug)
|
|
||||||
PS4="$GREEN"'${BASH_SOURCE}:${LINENO}:$CLEAR '
|
|
||||||
set -o xtrace #xtrace calls the PS4 string and show all lines as executed
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
showhelp
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
esac;;
|
|
||||||
h)
|
|
||||||
showhelp
|
|
||||||
;;
|
|
||||||
W)
|
|
||||||
workspace_id="${OPTARG}"
|
|
||||||
;;
|
|
||||||
H)
|
|
||||||
hostname="${OPTARG}"
|
|
||||||
;;
|
|
||||||
P)
|
|
||||||
api_port="${OPTARG}"
|
|
||||||
;;
|
|
||||||
X)
|
|
||||||
x_endpoint_header="${OPTARG}"
|
|
||||||
;;
|
|
||||||
C)
|
|
||||||
num_connections="${OPTARG}"
|
|
||||||
;;
|
|
||||||
T)
|
|
||||||
sync_minutes="${OPTARG}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
showhelp
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
function setup {
|
|
||||||
set -e
|
|
||||||
if test -z "$workspace_id"; then
|
|
||||||
echo "error: must set a workspace id with -W"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "set workspace_id to ${workspace_id}"
|
|
||||||
echo "set hostname to ${hostname}"
|
|
||||||
echo "set api_port to ${api_port}"
|
|
||||||
echo "set x_endpoint_header to ${x_endpoint_header}"
|
|
||||||
echo "set num_connections to ${num_connections}"
|
|
||||||
echo "set sync_minutes to ${sync_minutes}"
|
|
||||||
|
|
||||||
setCleanupFilesForWorkspace $workspace_id
|
|
||||||
|
|
||||||
mkdir -p cleanup
|
|
||||||
|
|
||||||
touch $CONNECTION_CLEANUP_FILE
|
|
||||||
touch $SOURCE_CLEANUP_FILE
|
|
||||||
touch $DESTINATION_CLEANUP_FILE
|
|
||||||
}
|
|
||||||
|
|
||||||
function getE2ETestSourceDefinitionId {
|
|
||||||
# call source_definitions/list and search response for the E2E Test dockerRepository to get the ID.
|
|
||||||
# local uses `source-e2e-test`, while cloud uses `source-e2e-test-cloud`
|
|
||||||
sourceDefinitionId=$(
|
|
||||||
callApi "source_definitions/list" |
|
|
||||||
jq -r '.sourceDefinitions[] |
|
|
||||||
select(
|
|
||||||
(.dockerRepository == "airbyte/source-e2e-test") or
|
|
||||||
(.dockerRepository == "airbyte/source-e2e-test-cloud")
|
|
||||||
) |
|
|
||||||
.sourceDefinitionId'
|
|
||||||
)
|
|
||||||
export sourceDefinitionId
|
|
||||||
}
|
|
||||||
|
|
||||||
function getE2ETestDestinationDefinition {
|
|
||||||
# call destination_definitions/list and search response for the E2E Test dockerRepository to get the ID.
|
|
||||||
# local uses `destination-dev-null`, while cloud uses `destination-e2e-test-cloud`
|
|
||||||
destinationDefinitionId=$(
|
|
||||||
callApi "destination_definitions/list" |
|
|
||||||
jq -r '.destinationDefinitions[] |
|
|
||||||
select(
|
|
||||||
(.dockerRepository == "airbyte/destination-e2e-test") or
|
|
||||||
(.dockerRepository == "airbyte/destination-dev-null")
|
|
||||||
) |
|
|
||||||
.destinationDefinitionId'
|
|
||||||
)
|
|
||||||
export destinationDefinitionId
|
|
||||||
}
|
|
||||||
|
|
||||||
function createSource {
|
|
||||||
body=$(
|
|
||||||
sed "
|
|
||||||
s/replace_source_read_secs/$(( 60*sync_minutes ))/g ;
|
|
||||||
s/replace_source_definition_id/$sourceDefinitionId/g ;
|
|
||||||
s/replace_workspace_id/$workspace_id/g" source_spec.json |
|
|
||||||
tr -d '\n' |
|
|
||||||
tr -d ' '
|
|
||||||
)
|
|
||||||
|
|
||||||
sourceId=$(
|
|
||||||
callApi "sources/create" $body |
|
|
||||||
jq -r '.sourceId'
|
|
||||||
)
|
|
||||||
export sourceId
|
|
||||||
echo $sourceId >> $SOURCE_CLEANUP_FILE
|
|
||||||
}
|
|
||||||
|
|
||||||
function createDestination {
|
|
||||||
body=$(
|
|
||||||
sed "
|
|
||||||
s/replace_destination_definition_id/$destinationDefinitionId/g ;
|
|
||||||
s/replace_workspace_id/$workspace_id/g" destination_spec.json |
|
|
||||||
tr -d '\n' |
|
|
||||||
tr -d ' '
|
|
||||||
)
|
|
||||||
destinationId=$(
|
|
||||||
callApi "destinations/create" $body |
|
|
||||||
jq -r '.destinationId'
|
|
||||||
)
|
|
||||||
export destinationId
|
|
||||||
echo $destinationId >> $DESTINATION_CLEANUP_FILE
|
|
||||||
}
|
|
||||||
|
|
||||||
function createMultipleConnections {
|
|
||||||
for i in $(seq 1 $num_connections)
|
|
||||||
do
|
|
||||||
echo "Creating connection number $i (out of $num_connections)..."
|
|
||||||
createConnection $i
|
|
||||||
done
|
|
||||||
echo "Finished creating $num_connections connections."
|
|
||||||
}
|
|
||||||
|
|
||||||
# Call the API to create a connection. Replace strings in connection_spec.json with real IDs.
|
|
||||||
# $1 arg is the connection count, which is used in the name of the created connection
|
|
||||||
# Connection spec might change and this function could break in the future. If that happens, we need
|
|
||||||
# to update the connection spec.
|
|
||||||
function createConnection {
|
|
||||||
body=$(
|
|
||||||
sed "
|
|
||||||
s/replace_source_id/$sourceId/g ;
|
|
||||||
s/replace_destination_id/$destinationId/g ;
|
|
||||||
s/replace_connection_name/load_test_connection_$1/g" connection_spec.json |
|
|
||||||
tr -d '\n' |
|
|
||||||
tr -d ' '
|
|
||||||
)
|
|
||||||
|
|
||||||
connectionId=$(
|
|
||||||
callApi "web_backend/connections/create" $body |
|
|
||||||
jq -r '.connectionId'
|
|
||||||
)
|
|
||||||
echo $connectionId >> $CONNECTION_CLEANUP_FILE
|
|
||||||
}
|
|
||||||
|
|
||||||
############
|
|
||||||
## MAIN ##
|
|
||||||
############
|
|
||||||
|
|
||||||
if [[ $# -eq 0 ]] ; then
|
|
||||||
showhelp
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
setup
|
|
||||||
|
|
||||||
getE2ETestSourceDefinitionId
|
|
||||||
echo "Retrieved E2E Test Source Definition ID: ${sourceDefinitionId}"
|
|
||||||
|
|
||||||
getE2ETestDestinationDefinition
|
|
||||||
echo "Retrieved E2E Test Destination Definition ID: ${destinationDefinitionId}"
|
|
||||||
|
|
||||||
createSource
|
|
||||||
echo "Created Source with ID: ${sourceId}"
|
|
||||||
|
|
||||||
createDestination
|
|
||||||
echo "Created Destination with ID: ${destinationId}"
|
|
||||||
|
|
||||||
createMultipleConnections
|
|
||||||
|
|
||||||
echo "Finished!"
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
<<comment
|
|
||||||
This file contains common util functions for use in load testing scripts.
|
|
||||||
comment
|
|
||||||
|
|
||||||
echo "Loading utils from $0"
|
|
||||||
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
RED='\033[0;31m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
CLEAR='\033[0m'
|
|
||||||
|
|
||||||
function callApi {
|
|
||||||
# call the API with the endpoint passed as arg $1, and (optional) payload passed as arg $2
|
|
||||||
# example of calling the API with a payload:
|
|
||||||
# callApi "destinations/list" "{\"workspaceId\":\"${workspace}\"}"
|
|
||||||
endpoint=$1
|
|
||||||
payload=${2:-""}
|
|
||||||
|
|
||||||
curl --silent \
|
|
||||||
--request POST \
|
|
||||||
--fail-with-body \
|
|
||||||
--show-error \
|
|
||||||
--header 'Content-Type: application/json' \
|
|
||||||
--header "X-Endpoint-API-UserInfo: ${x_endpoint_header}" \
|
|
||||||
--user "${BASIC_AUTH_USERNAME}:${BASIC_AUTH_PASSWORD}" \
|
|
||||||
--data "${payload}" \
|
|
||||||
"${hostname}:${api_port}/api/v1/${endpoint}"
|
|
||||||
}
|
|
||||||
|
|
||||||
function readFirstLineFromFile {
|
|
||||||
echo "$(head -1 $1)"
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeFirstLineFromFile {
|
|
||||||
echo "$(sed -i '' -e '1d' $1)"
|
|
||||||
}
|
|
||||||
|
|
||||||
function setCleanupFilesForWorkspace {
|
|
||||||
export CONNECTION_CLEANUP_FILE="cleanup/${1}_connection_ids.txt"
|
|
||||||
export DESTINATION_CLEANUP_FILE="cleanup/${1}_destination_ids.txt"
|
|
||||||
export SOURCE_CLEANUP_FILE="cleanup/${1}_source_ids.txt"
|
|
||||||
|
|
||||||
echo "set connection cleanup file to $CONNECTION_CLEANUP_FILE"
|
|
||||||
echo "set destination cleanup file to $DESTINATION_CLEANUP_FILE"
|
|
||||||
echo "set source cleanup file to $SOURCE_CLEANUP_FILE"
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "End-to-End Testing (Mock API)",
|
|
||||||
"sourceDefinitionId": "replace_source_definition_id",
|
|
||||||
"workspaceId": "replace_workspace_id",
|
|
||||||
"connectionConfiguration": {
|
|
||||||
"type": "CONTINUOUS_FEED",
|
|
||||||
"mock_catalog": {
|
|
||||||
"type": "SINGLE_STREAM",
|
|
||||||
"stream_name": "data_stream",
|
|
||||||
"stream_schema": "{ \"type\": \"object\", \"properties\": { \"column1\": { \"type\": \"string\" } } }",
|
|
||||||
"stream_duplication": 1
|
|
||||||
},
|
|
||||||
"seed": 0,
|
|
||||||
"max_messages": replace_source_read_secs,
|
|
||||||
"message_interval_ms": 1000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
. tools/lib/lib.sh
|
|
||||||
|
|
||||||
[[ -z "$GIT_REVISION" ]] && echo "Couldn't get the git revision..." && exit 1
|
|
||||||
|
|
||||||
echo "*IMPORTANT: Only merge if the platform build is passing!*"
|
|
||||||
echo
|
|
||||||
# Do not change the following line - the Create Release Github action relies on it
|
|
||||||
echo "Changelog:"
|
|
||||||
echo
|
|
||||||
PAGER=cat git log v${PREV_VERSION}..${GIT_REVISION} --oneline --decorate=no
|
|
||||||
# The following empty 'echo' is also important for marking the end of the changelog for the Create Release Github action
|
|
||||||
echo
|
|
||||||
echo "### Instructions"
|
|
||||||
echo "1) *SQUASH MERGE* this PR - this is necessary to ensure the automated Create Release action is triggered."
|
|
||||||
echo "2) Double check that the [Create Release](https://github.com/airbytehq/airbyte/actions/workflows/create-release.yml) action was triggered and ran successfully on the commit to master \
|
|
||||||
(this should only take a few seconds)."
|
|
||||||
echo "3) If the Create Release action failed due to a transient issue, retry the action. If it failed due to \
|
|
||||||
a non-transient issue, create a release manually by following the below instructions."
|
|
||||||
echo
|
|
||||||
echo "<details>"
|
|
||||||
echo "<summary>Create the GitHub release manually</summary>"
|
|
||||||
echo
|
|
||||||
echo "1. Pull most recent version of master"
|
|
||||||
echo "2. Run ./tools/bin/tag_version.sh"
|
|
||||||
echo "3. Create a GitHub release with the changelog"
|
|
||||||
echo "</details>"
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# todo (cgardens) - remove this file. used in platform build script only.
|
|
||||||
# List of directories without "airbyte-" prefix.
|
|
||||||
projectDir=(
|
|
||||||
"bootloader"
|
|
||||||
"container-orchestrator"
|
|
||||||
"cron"
|
|
||||||
"connector-builder-server"
|
|
||||||
"metrics/reporter"
|
|
||||||
"proxy"
|
|
||||||
"server"
|
|
||||||
"temporal"
|
|
||||||
"webapp"
|
|
||||||
"workers"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Set default values to required vars. If set in env, values will be taken from there.
|
|
||||||
# Primarily for testing.
|
|
||||||
JDK_VERSION=${JDK_VERSION:-17.0.4}
|
|
||||||
ALPINE_IMAGE=${ALPINE_IMAGE:-alpine:3.14}
|
|
||||||
POSTGRES_IMAGE=${POSTGRES_IMAGE:-postgres:13-alpine}
|
|
||||||
|
|
||||||
# Iterate over all directories in list to build one by one.
|
|
||||||
# metrics-reporter are exception due to wrong artifact naming
|
|
||||||
for workdir in "${projectDir[@]}"
|
|
||||||
do
|
|
||||||
case $workdir in
|
|
||||||
"metrics/reporter")
|
|
||||||
artifactName="metrics-reporter"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"config/init")
|
|
||||||
artifactName="init"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"workers")
|
|
||||||
artifactName="worker"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
artifactName=${workdir%/*}
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo "Publishing airbyte/$artifactName..."
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
docker buildx create --use --name $artifactName && \
|
|
||||||
docker buildx build -t "airbyte/$artifactName:$VERSION" \
|
|
||||||
--platform linux/amd64,linux/arm64 \
|
|
||||||
--build-arg VERSION=$VERSION \
|
|
||||||
--build-arg ALPINE_IMAGE=$ALPINE_IMAGE \
|
|
||||||
--build-arg POSTGRES_IMAGE=$POSTGRES_IMAGE \
|
|
||||||
--build-arg JDK_VERSION=$JDK_VERSION \
|
|
||||||
--push \
|
|
||||||
airbyte-$workdir/build/docker
|
|
||||||
docker buildx rm $artifactName
|
|
||||||
done
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
retries=3
|
|
||||||
|
|
||||||
function pull_dockerhub_image_with_retries() {
|
|
||||||
local image=$1
|
|
||||||
local retries=$2
|
|
||||||
|
|
||||||
for (( i=1; i<=$retries; i++ )); do
|
|
||||||
docker pull $image
|
|
||||||
# NOTE: this does not discriminate on the failure, any failure will retry
|
|
||||||
test "$?" -eq 0 && return || echo "Docker pull failed, sleeping for 5 seconds before retrying ($i/$retries)" && sleep 5
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
function main() {
|
|
||||||
while getopts ':i:r:' OPTION; do
|
|
||||||
case "$OPTION" in
|
|
||||||
i)
|
|
||||||
image="$OPTARG"
|
|
||||||
;;
|
|
||||||
r)
|
|
||||||
if [[ "$OPTARG" =~ ^(-)?[0-9]+$ ]]; then
|
|
||||||
retries="$OPTARG"
|
|
||||||
else
|
|
||||||
echo "retries (-r) must be a number" && exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
?)
|
|
||||||
echo "script usage: $(basename "$0") [-i image] [-r retries]" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift "$(($OPTIND -1))"
|
|
||||||
|
|
||||||
pull_dockerhub_image_with_retries $image $retries
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# When running acceptance tests, this often manifests as a conenctor sometimes getting stuck for no discernable reason.
|
|
||||||
# This script allows building all of the connector images used in the acceptance tests.
|
|
||||||
# We will need to update this file if the versions used for source-e2e-test and destination-e2e-test change before we start publishing ARM images.
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
. tools/lib/lib.sh
|
|
||||||
|
|
||||||
assert_root
|
|
||||||
|
|
||||||
unset SUB_BUILD
|
|
||||||
|
|
||||||
LATEST_POSTGRES_SOURCE=$(grep -A0 'dockerImageTag' ./airbyte-integrations/connectors/source-postgres/metadata.yaml | cut -d ' ' -f 4)
|
|
||||||
LATEST_POSTGRES_DESTINATION=$(grep -A0 'dockerImageTag' ./airbyte-integrations/connectors/destination-postgres/metadata.yaml | cut -d ' ' -f 4)
|
|
||||||
|
|
||||||
git checkout master && ./gradlew clean :airbyte-integrations:connectors:source-postgres:build -x test && docker tag airbyte/source-postgres:dev airbyte/source-postgres:"$LATEST_POSTGRES_SOURCE"
|
|
||||||
git checkout master && ./gradlew clean :airbyte-integrations:connectors:destination-postgres:build -x test && docker tag airbyte/destination-postgres:dev airbyte/destination-postgres:"$LATEST_POSTGRES_DESTINATION"
|
|
||||||
git checkout 464c485b94c9f023b4c5929610f60a6b53bf657b && ./gradlew clean :airbyte-integrations:connectors:source-e2e-test:build -x test && docker tag airbyte/source-e2e-test:dev airbyte/source-e2e-test:0.1.1
|
|
||||||
git checkout 464c485b94c9f023b4c5929610f60a6b53bf657b && ./gradlew clean :airbyte-integrations:connectors:destination-e2e-test:build -x test && docker tag airbyte/destination-e2e-test:dev airbyte/destination-e2e-test:0.1.1
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
. tools/lib/lib.sh
|
|
||||||
|
|
||||||
if [[ -z "${CLOUDREPO_USER}" ]]; then
|
|
||||||
echo 'CLOUDREPO_USER env var not set. Please retrieve the user email from the CloudRepo lastpass secret and run export CLOUDREPO_USER=<user_from_secret>.';
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "${CLOUDREPO_PASSWORD}" ]]; then
|
|
||||||
echo 'CLOUDREPO_PASSWORD env var not set. Please retrieve the user email from the CloudRepo lastpass secret and run export CLOUDREPO_PASSWORD=<password_from_secret>.';
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "${DOCKER_HUB_USERNAME}" ]]; then
|
|
||||||
echo 'DOCKER_HUB_USERNAME not set.';
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "${DOCKER_HUB_PASSWORD}" ]]; then
|
|
||||||
echo 'DOCKER_HUB_PASSWORD for docker user not set.';
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
docker login -u "${DOCKER_HUB_USERNAME}" -p "${DOCKER_HUB_PASSWORD}"
|
|
||||||
|
|
||||||
source ./tools/bin/bump_version.sh
|
|
||||||
|
|
||||||
echo "Building and publishing PLATFORM version $NEW_VERSION for git revision $GIT_REVISION..."
|
|
||||||
VERSION=$NEW_VERSION SUB_BUILD=PLATFORM ./gradlew clean build --scan
|
|
||||||
VERSION=$NEW_VERSION SUB_BUILD=PLATFORM ./gradlew publish --scan
|
|
||||||
|
|
||||||
# Container should be running before build starts
|
|
||||||
# It generates binaries to build images for different CPU architecture
|
|
||||||
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
||||||
VERSION=$NEW_VERSION ./tools/bin/publish_docker.sh
|
|
||||||
echo "Completed building and publishing PLATFORM..."
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
. tools/lib/lib.sh
|
|
||||||
|
|
||||||
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
||||||
if [[ "$BRANCH" != "master" ]]; then
|
|
||||||
echo 'This script should be run from master after merging the changes from release_version.sh!';
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
[[ ! -z "$(git status --porcelain)" ]] && echo "Cannot tag revision if all changes aren't checked in..." && exit 1
|
|
||||||
|
|
||||||
# make sure your master branch is up to date
|
|
||||||
git pull --rebase
|
|
||||||
|
|
||||||
VERSION=$(cat .env | grep -w VERSION | cut -d= -f 2)
|
|
||||||
[[ -z "$VERSION" ]] && echo "Couldn't find version in env file..." && exit 1
|
|
||||||
|
|
||||||
TAG_NAME="v$VERSION"
|
|
||||||
git tag -a "$TAG_NAME" -m "Version $VERSION"
|
|
||||||
git push origin "$TAG_NAME"
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
||||||
|
|
||||||
if ! command -v timeout &> /dev/null
|
|
||||||
then
|
|
||||||
echo "timeout could not be found, installing it"
|
|
||||||
brew install coreutils
|
|
||||||
fi
|
|
||||||
|
|
||||||
NEW_HASH="$( git rev-parse HEAD )"
|
|
||||||
|
|
||||||
git checkout master
|
|
||||||
git pull --no-rebase
|
|
||||||
|
|
||||||
SUB_BUILD=PLATFORM "$SCRIPT_DIR"/../../gradlew -p "$SCRIPT_DIR"/../.. generate-docker
|
|
||||||
|
|
||||||
cd "$SCRIPT_DIR"/../..
|
|
||||||
VERSION=dev docker compose -f "$SCRIPT_DIR"/../../docker-compose.yaml up &
|
|
||||||
|
|
||||||
sleep 75
|
|
||||||
VERSION=dev docker compose down
|
|
||||||
|
|
||||||
git stash
|
|
||||||
git checkout $NEW_HASH
|
|
||||||
SUB_BUILD=PLATFORM "$SCRIPT_DIR"/../../gradlew -p "$SCRIPT_DIR"/../.. generate-docker
|
|
||||||
|
|
||||||
VERSION=dev docker compose -f "$SCRIPT_DIR"/../../docker-compose.yaml up
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
FROM mcr.microsoft.com/mssql/server:2019-latest
|
|
||||||
|
|
||||||
COPY mssql.key /etc/ssl/private/mssql.key
|
|
||||||
COPY mssql.pem /etc/ssl/certs/mssql.pem
|
|
||||||
COPY mssql.conf /var/opt/mssql/mssql.conf
|
|
||||||
|
|
||||||
EXPOSE 1433
|
|
||||||
|
|
||||||
USER root
|
|
||||||
RUN chmod 755 /etc/ssl/private
|
|
||||||
USER mssql
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
FROM postgres:11-alpine
|
|
||||||
|
|
||||||
COPY server.key /var/lib/postgresql/server.key
|
|
||||||
COPY server.crt /var/lib/postgresql/server.crt
|
|
||||||
|
|
||||||
# update the privileges on the .key, no need to touch the .crt
|
|
||||||
RUN chmod 600 /var/lib/postgresql/server.key
|
|
||||||
RUN chown postgres:postgres /var/lib/postgresql/server.key
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
openssl req -new -text -passout pass:abcd -subj /CN=localhost -out server.req -keyout privkey.pem
|
|
||||||
openssl rsa -in privkey.pem -passin pass:abcd -out server.key
|
|
||||||
openssl req -x509 -in server.req -text -key server.key -out server.crt
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=sqltest.airbyte.com' -keyout mssql.key -out mssql.pem
|
|
||||||
chmod 440 mssql.pem
|
|
||||||
chmod 440 mssql.key
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
[network]
|
|
||||||
tlscert = /etc/ssl/certs/mssql.pem
|
|
||||||
tlskey = /etc/ssl/private/mssql.key
|
|
||||||
tlsprotocols = 1.2
|
|
||||||
forceencryption = 1
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
|
||||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC5bUoMylrFiaAC
|
|
||||||
1sYCQlMqqX/yvGwZAIoWq5mo4Kc1PB1JDS8+vB7s8SMsJSMldB1udSEsv0P4k1sV
|
|
||||||
pymRZp0Y2IAepcJ1qpFEUJGH5E1A6JIDW3EyvddO5u4BoA+ZDUFvlRyozZumSbP8
|
|
||||||
hvBtFv8OR/guB1938XB185CM5EFZydKeTkKiPhvTA2fbqmmi96DAxDMI2ggBBKDI
|
|
||||||
UVTUWJqJMOcj/sLGY87jPiltgQGknSxKZoJYeqFeyhYPrzvUrzLJJQPBJ9L7HwoO
|
|
||||||
In4jxIN8sDhl/4yXSmX8bGRRXOLhrspGp0KRIQXUeClZLswz+YT07pPl6oMXQnD/
|
|
||||||
dl/WcSuZAgMBAAECggEABbzoCbVJUcuMdAoJXpCG2k8ccnp6LdviagktXBh3lCIk
|
|
||||||
Fdqel6ZinppnqDoN+F67emuNd0ED7XFB5E2j76fpPJeWf1xJxDJfBGop1rat3VBV
|
|
||||||
FF2EBznwq7RhsRMu6GGMoNNQa7jRFDg7pZjXX8jSY7K+b04zGhcSj9PVqUZ27zxO
|
|
||||||
AwKsRVDwbJ3SkQKhUTMvzgJiaIinvE8qMjFby+ar5R7HrQOXKKKwZDuTlLQGinMF
|
|
||||||
Nskb6e9uI5T4KVnp7JDGPw/rojBYEJnCnUv3nL51UYjRDl1lX+KPEf8a3nK37Nk5
|
|
||||||
Xalj7IKAbyw6vbqr8qPcRWsOloC3KF/O5v+5nxSAMQKBgQDzahPceQxeZHpeWpC3
|
|
||||||
9nUIHBt9zqkg9eszNZ9MyVjUbBraBRwYX1sBjZz+l5ohMA5VqyPlv31LFp9B6V/A
|
|
||||||
GI6b1qFWQ0RnzNT7DT0xSq5Ble6DKmksJjcONEVy6oROhj/GGQuufx1+sstARxk8
|
|
||||||
H3A6uFtL53Hjgf8vGQEeFjIqcwKBgQDDA6sW41xwfGPGfu355oN6s4fVrfA8wocv
|
|
||||||
zNGXSMtJbAXLAC1fpOhbWzAWGRt8KqQWhTcpmBAClotNi4ollWlzHit6u34l4tL+
|
|
||||||
dba7Vo2qbEs6IggE4zLHznEO/yKBOXVNB2PV+fnQo90kZ76AxEbGywz4BJ5ImO2C
|
|
||||||
rpV+flZSwwKBgQCbCyY7eJ74QOfw0Z78jm9dCwo3yDrSU9HMfItLTbTXGUTBOh/7
|
|
||||||
JkHBa4JkaAw0t3dp+eiTnrUf7vjh8tSadwnfGYcKey5HL6E5h+VCUF9OR0H1Kj5z
|
|
||||||
cKQA2CqkV9yOZ9SXSby3GSCgYyIzfxYDxcKmpGcCohlY4KS6SyL7Fwg9IQKBgQCk
|
|
||||||
ktTw1ODvANqG6hlU+ubcRuQMPOTvsc66VSRPgpwkEyh0X2rrO1Tnu/XBwGCEkcu2
|
|
||||||
QagCzxQ7yuY2g9sKyqOaBcz1n4Le4CPloFucj3ewagG2Rn/z9/Sj0CFzYXayDVZj
|
|
||||||
sifbrUDYhWEb1v1a18lO/I6uQ998LqrJzSHWBTI+VwKBgBek9td3SMUCjQ49toer
|
|
||||||
WKb69wqHIwgniOZmemX7EStfI7oQUtUZi0ZRvQd220oJI/jmarNlmi4Myuj2E8bI
|
|
||||||
pn3TRi3tAsxZ8y59BFNZkeHNAv4//ei0+6Y9HN43Ie7rpXIvEmL/8QMDUsfOXkto
|
|
||||||
s4bzmT5NcOMZuDr7fjKic/hl
|
|
||||||
-----END PRIVATE KEY-----
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDHTCCAgWgAwIBAgIUXEXm761ENtHmsrdb12sJyPedfW8wDQYJKoZIhvcNAQEL
|
|
||||||
BQAwHjEcMBoGA1UEAwwTc3FsdGVzdC5haXJieXRlLmNvbTAeFw0yMTA1MDcyMzA3
|
|
||||||
NDBaFw0yMTA2MDYyMzA3NDBaMB4xHDAaBgNVBAMME3NxbHRlc3QuYWlyYnl0ZS5j
|
|
||||||
b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5bUoMylrFiaAC1sYC
|
|
||||||
QlMqqX/yvGwZAIoWq5mo4Kc1PB1JDS8+vB7s8SMsJSMldB1udSEsv0P4k1sVpymR
|
|
||||||
Zp0Y2IAepcJ1qpFEUJGH5E1A6JIDW3EyvddO5u4BoA+ZDUFvlRyozZumSbP8hvBt
|
|
||||||
Fv8OR/guB1938XB185CM5EFZydKeTkKiPhvTA2fbqmmi96DAxDMI2ggBBKDIUVTU
|
|
||||||
WJqJMOcj/sLGY87jPiltgQGknSxKZoJYeqFeyhYPrzvUrzLJJQPBJ9L7HwoOIn4j
|
|
||||||
xIN8sDhl/4yXSmX8bGRRXOLhrspGp0KRIQXUeClZLswz+YT07pPl6oMXQnD/dl/W
|
|
||||||
cSuZAgMBAAGjUzBRMB0GA1UdDgQWBBQO7E0qXXC6/C63Ph02pmr1DGhTfjAfBgNV
|
|
||||||
HSMEGDAWgBQO7E0qXXC6/C63Ph02pmr1DGhTfjAPBgNVHRMBAf8EBTADAQH/MA0G
|
|
||||||
CSqGSIb3DQEBCwUAA4IBAQA9uejsECQbFqNw2oXnOZfcHSvfslWq11GdPLqMWFYW
|
|
||||||
NBWAEw2PS5uiB3B8Q+sFZ/7sXcGyK7e55JPMUxnsH3yIiE0NB0S56pcfFBL9k9xB
|
|
||||||
4zL7h1LMnmYTueIhUWOInbc1VNrdycMjpTqkVjNYabiXwvza/iWG+EQfxh3bABtE
|
|
||||||
+t1omtwMGtOB/XF7jPndfBk7Tdj2PgsTGBru3HVP7hTwHOSlhpGt+p5hsWQVAbBl
|
|
||||||
PSQyvP1xX/KfjGOs8WtKtpwc6RMNbreJfA4ktqvYTYPCvVm9+LpdLZ1jj0OAxKe6
|
|
||||||
dcshkMOfJUPBb4HmDX0RZrDJH+4UKbqQ9vC6sTvPQtDO
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
Reference in New Issue
Block a user