diff --git a/.env.minio.env b/.env.minio.env
new file mode 100644
index 000000000..5817924c2
--- /dev/null
+++ b/.env.minio.env
@@ -0,0 +1,5 @@
+AWS_ACCESS_KEY=minioadmin
+AWS_SECRET_KEY=minioadmin
+AWS_REGION=us-east-1
+BUCKET_NAME=test-bucket
+MINIO_ENDPOINT=http://localhost:9000
\ No newline at end of file
diff --git a/.github/workflows/run-tests.yaml b/.github/workflows/run-tests.yaml
index 00cb8ca9e..57baf1ece 100644
--- a/.github/workflows/run-tests.yaml
+++ b/.github/workflows/run-tests.yaml
@@ -4,35 +4,38 @@ on:
workflow_dispatch:
jobs:
- # Label of the container job
container-job:
- # Containers must run in Linux based operating systems
runs-on: ubuntu-latest
- # Docker Hub image that `container-job` executes in
- # container: node:latest
- # container: pyramation/node-gyp
container: node:20.12.0-alpine
- # Service containers to run with `container-job`
services:
- # Label used to access the service container
- postgres:
- # Docker Hub image
+ pg_db:
image: pyramation/postgis
- # Provide the password for postgres
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
- # Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- # Maps tcp port 5432 on service container to the host
- 5432:5432
+ minio_cdn:
+ image: minio/minio:edge-cicd
+ env:
+ MINIO_ROOT_USER: minioadmin
+ MINIO_ROOT_PASSWORD: minioadmin
+ ports:
+ - 9000:9000
+ - 9001:9001
+ options: >-
+ --health-cmd "curl -f http://localhost:9000/minio/health/live || exit 1"
+ --health-interval 10s
+ --health-timeout 5s
+ --health-retries 5
+
steps:
- name: checkout
uses: actions/checkout@v4
@@ -51,8 +54,9 @@ jobs:
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
- POSTGRES_HOST: localhost
+ POSTGRES_HOST: pg_db
POSTGRES_PORT: 5432
+ DATABASE_URL: postgres://postgres:password@pg_db:5432/postgres
- name: launchql/orm
run: cd ./packages/orm && yarn test
@@ -65,3 +69,27 @@ jobs:
- name: launchql/codegen
run: cd ./packages/codegen && yarn test
+
+ - name: launchql/content-type-stream
+ run: cd ./packages/content-type-stream && yarn test
+
+ - name: launchql/s3-streamer
+ run: cd ./packages/s3-streamer && yarn test
+ env:
+ MINIO_ENDPOINT: http://minio_cdn:9000
+ AWS_ACCESS_KEY: minioadmin
+ AWS_SECRET_KEY: minioadmin
+ AWS_REGION: us-east-1
+ BUCKET_NAME: test-bucket
+
+ - name: launchql/stream-to-s3
+ run: cd ./packages/stream-to-s3 && yarn test
+ env:
+ MINIO_ENDPOINT: http://minio_cdn:9000
+ AWS_ACCESS_KEY: minioadmin
+ AWS_SECRET_KEY: minioadmin
+ AWS_REGION: us-east-1
+ BUCKET_NAME: test-bucket
+
+ - name: launchql/upload-names
+ run: cd ./packages/upload-names && yarn test
diff --git a/__fixtures__/kitchen-sink/.gitignore b/__fixtures__/kitchen-sink/.gitignore
new file mode 100644
index 000000000..e43b0f988
--- /dev/null
+++ b/__fixtures__/kitchen-sink/.gitignore
@@ -0,0 +1 @@
+.DS_Store
diff --git a/__fixtures__/kitchen-sink/.travis.yml b/__fixtures__/kitchen-sink/.travis.yml
new file mode 100644
index 000000000..dc1aee66b
--- /dev/null
+++ b/__fixtures__/kitchen-sink/.travis.yml
@@ -0,0 +1,33 @@
+language: node_js
+notifications:
+ email: false
+node_js:
+ - node
+services:
+ - docker
+env:
+ global:
+ - PGPORT=7777
+ - PGDATABASE=testing-db
+ - PGTEMPLATE_DATABASE=testing-template-db
+ - PGHOST=localhost
+ - PGPASSWORD=
+ - PGUSER=postgres
+ - TMPDIR=/tmp
+ matrix:
+ - PACKAGE=core/skitch-testing
+ - PACKAGE=core/skitch-transform
+ - PACKAGE=core/skitch-utils
+before_install:
+ - sudo apt-get -qq update
+ - sudo apt-get install -qy --force-yes perl build-essential cpanminus
+ - PERL_MM_USE_DEFAULT=1 sudo cpan List::MoreUtils >/dev/null 2>/dev/null
+ - PERL_MM_USE_DEFAULT=1 sudo cpan DBD::Pg >/dev/null 2>/dev/null
+ - PERL_MM_USE_DEFAULT=1 sudo cpan App::Sqitch >/dev/null 2>/dev/null
+ - docker run -p 7777:5432 --name postgritty -d postgres:10.3
+ - sleep 3
+ - while ! docker exec -it postgritty pg_isready -U postgres -h 127.0.0.1; do echo "$(date) - waiting for database to start"; sleep 1; done
+script:
+ - cd $PACKAGE
+ - yarn install
+ - yarn test
diff --git a/__fixtures__/kitchen-sink/LICENSE b/__fixtures__/kitchen-sink/LICENSE
new file mode 100644
index 000000000..38ce56737
--- /dev/null
+++ b/__fixtures__/kitchen-sink/LICENSE
@@ -0,0 +1,3 @@
+Copyright (c) 2020-present, Web, Inc. All rights reserved.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL WE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/__fixtures__/kitchen-sink/ai.ai b/__fixtures__/kitchen-sink/ai.ai
new file mode 100644
index 000000000..8c7f387c0
--- /dev/null
+++ b/__fixtures__/kitchen-sink/ai.ai
@@ -0,0 +1,6286 @@
+%PDF-1.5
%
+1 0 obj
<>/OCGs[6 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<>stream
+
+
+
+
+ application/pdf
+
+
+ Untitled-1
+
+
+ 2018-10-04T13:35:49-07:00
+ 2018-10-04T13:35:49-07:00
+ 2018-10-04T13:35:49-07:00
+ Adobe Illustrator CC 22.1 (Macintosh)
+
+
+
+ 256
+ 252
+ JPEG
+ /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA/AEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9D+XfLvl9/L+mO+mWjM1
pAWYwRkkmNaknjiqY/4a8uf9Wqz/AOkeL/mnFXf4a8uf9Wqz/wCkeL/mnFXf4a8uf9Wqz/6R4v8A
mnFXf4a8uf8AVqs/+keL/mnFXf4a8uf9Wqz/AOkeL/mnFXf4a8uf9Wqz/wCkeL/mnFXf4a8uf9Wq
z/6R4v8AmnFXf4a8uf8AVqs/+keL/mnFXf4a8uf9Wqz/AOkeL/mnFXf4a8uf9Wqz/wCkeL/mnFXf
4a8uf9Wqz/6R4v8AmnFXf4a8uf8AVqs/+keL/mnFXf4a8uf9Wqz/AOkeL/mnFXf4a8uf9Wqz/wCk
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
Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FX//2Q==
+
+
+
+ uuid:a5260dd5-65a7-f243-8853-e699484c739b
+ xmp.did:34e282e2-5777-443f-b659-aa1c894c8b09
+ uuid:5D20892493BFDB11914A8590D31508C8
+ proof:pdf
+
+ uuid:d1c078a0-2746-42b2-b0d1-25aedff8fb1e
+ xmp.did:1b6690ed-28a8-c141-9479-b6a9cf6be651
+ uuid:5D20892493BFDB11914A8590D31508C8
+ proof:pdf
+
+
+
+
+ saved
+ xmp.iid:34e282e2-5777-443f-b659-aa1c894c8b09
+ 2018-10-04T13:35:48-07:00
+ Adobe Illustrator CC 22.1 (Macintosh)
+ /
+
+
+
+ Document
+ Print
+ False
+ False
+ 1
+
+ 612.000000
+ 792.000000
+ Points
+
+
+
+
+ MyriadPro-Regular
+ Myriad Pro
+ Regular
+ Open Type
+ Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329
+ False
+ MyriadPro-Regular.otf
+
+
+
+
+
+ Black
+
+
+
+
+
+ Default Swatch Group
+ 0
+
+
+
+ White
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 0.000000
+
+
+ Black
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 100.000000
+
+
+ CMYK Red
+ CMYK
+ PROCESS
+ 0.000000
+ 100.000000
+ 100.000000
+ 0.000000
+
+
+ CMYK Yellow
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 100.000000
+ 0.000000
+
+
+ CMYK Green
+ CMYK
+ PROCESS
+ 100.000000
+ 0.000000
+ 100.000000
+ 0.000000
+
+
+ CMYK Cyan
+ CMYK
+ PROCESS
+ 100.000000
+ 0.000000
+ 0.000000
+ 0.000000
+
+
+ CMYK Blue
+ CMYK
+ PROCESS
+ 100.000000
+ 100.000000
+ 0.000000
+ 0.000000
+
+
+ CMYK Magenta
+ CMYK
+ PROCESS
+ 0.000000
+ 100.000000
+ 0.000000
+ 0.000000
+
+
+ C=15 M=100 Y=90 K=10
+ CMYK
+ PROCESS
+ 15.000000
+ 100.000000
+ 90.000000
+ 10.000000
+
+
+ C=0 M=90 Y=85 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 90.000000
+ 85.000000
+ 0.000000
+
+
+ C=0 M=80 Y=95 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 80.000000
+ 95.000000
+ 0.000000
+
+
+ C=0 M=50 Y=100 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 50.000000
+ 100.000000
+ 0.000000
+
+
+ C=0 M=35 Y=85 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 35.000000
+ 85.000000
+ 0.000000
+
+
+ C=5 M=0 Y=90 K=0
+ CMYK
+ PROCESS
+ 5.000000
+ 0.000000
+ 90.000000
+ 0.000000
+
+
+ C=20 M=0 Y=100 K=0
+ CMYK
+ PROCESS
+ 20.000000
+ 0.000000
+ 100.000000
+ 0.000000
+
+
+ C=50 M=0 Y=100 K=0
+ CMYK
+ PROCESS
+ 50.000000
+ 0.000000
+ 100.000000
+ 0.000000
+
+
+ C=75 M=0 Y=100 K=0
+ CMYK
+ PROCESS
+ 75.000000
+ 0.000000
+ 100.000000
+ 0.000000
+
+
+ C=85 M=10 Y=100 K=10
+ CMYK
+ PROCESS
+ 85.000000
+ 10.000000
+ 100.000000
+ 10.000000
+
+
+ C=90 M=30 Y=95 K=30
+ CMYK
+ PROCESS
+ 90.000000
+ 30.000000
+ 95.000000
+ 30.000000
+
+
+ C=75 M=0 Y=75 K=0
+ CMYK
+ PROCESS
+ 75.000000
+ 0.000000
+ 75.000000
+ 0.000000
+
+
+ C=80 M=10 Y=45 K=0
+ CMYK
+ PROCESS
+ 80.000000
+ 10.000000
+ 45.000000
+ 0.000000
+
+
+ C=70 M=15 Y=0 K=0
+ CMYK
+ PROCESS
+ 70.000000
+ 15.000000
+ 0.000000
+ 0.000000
+
+
+ C=85 M=50 Y=0 K=0
+ CMYK
+ PROCESS
+ 85.000000
+ 50.000000
+ 0.000000
+ 0.000000
+
+
+ C=100 M=95 Y=5 K=0
+ CMYK
+ PROCESS
+ 100.000000
+ 95.000000
+ 5.000000
+ 0.000000
+
+
+ C=100 M=100 Y=25 K=25
+ CMYK
+ PROCESS
+ 100.000000
+ 100.000000
+ 25.000000
+ 25.000000
+
+
+ C=75 M=100 Y=0 K=0
+ CMYK
+ PROCESS
+ 75.000000
+ 100.000000
+ 0.000000
+ 0.000000
+
+
+ C=50 M=100 Y=0 K=0
+ CMYK
+ PROCESS
+ 50.000000
+ 100.000000
+ 0.000000
+ 0.000000
+
+
+ C=35 M=100 Y=35 K=10
+ CMYK
+ PROCESS
+ 35.000000
+ 100.000000
+ 35.000000
+ 10.000000
+
+
+ C=10 M=100 Y=50 K=0
+ CMYK
+ PROCESS
+ 10.000000
+ 100.000000
+ 50.000000
+ 0.000000
+
+
+ C=0 M=95 Y=20 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 95.000000
+ 20.000000
+ 0.000000
+
+
+ C=25 M=25 Y=40 K=0
+ CMYK
+ PROCESS
+ 25.000000
+ 25.000000
+ 40.000000
+ 0.000000
+
+
+ C=40 M=45 Y=50 K=5
+ CMYK
+ PROCESS
+ 40.000000
+ 45.000000
+ 50.000000
+ 5.000000
+
+
+ C=50 M=50 Y=60 K=25
+ CMYK
+ PROCESS
+ 50.000000
+ 50.000000
+ 60.000000
+ 25.000000
+
+
+ C=55 M=60 Y=65 K=40
+ CMYK
+ PROCESS
+ 55.000000
+ 60.000000
+ 65.000000
+ 40.000000
+
+
+ C=25 M=40 Y=65 K=0
+ CMYK
+ PROCESS
+ 25.000000
+ 40.000000
+ 65.000000
+ 0.000000
+
+
+ C=30 M=50 Y=75 K=10
+ CMYK
+ PROCESS
+ 30.000000
+ 50.000000
+ 75.000000
+ 10.000000
+
+
+ C=35 M=60 Y=80 K=25
+ CMYK
+ PROCESS
+ 35.000000
+ 60.000000
+ 80.000000
+ 25.000000
+
+
+ C=40 M=65 Y=90 K=35
+ CMYK
+ PROCESS
+ 40.000000
+ 65.000000
+ 90.000000
+ 35.000000
+
+
+ C=40 M=70 Y=100 K=50
+ CMYK
+ PROCESS
+ 40.000000
+ 70.000000
+ 100.000000
+ 50.000000
+
+
+ C=50 M=70 Y=80 K=70
+ CMYK
+ PROCESS
+ 50.000000
+ 70.000000
+ 80.000000
+ 70.000000
+
+
+
+
+
+ Grays
+ 1
+
+
+
+ C=0 M=0 Y=0 K=100
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 100.000000
+
+
+ C=0 M=0 Y=0 K=90
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 89.999400
+
+
+ C=0 M=0 Y=0 K=80
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 79.998800
+
+
+ C=0 M=0 Y=0 K=70
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 69.999700
+
+
+ C=0 M=0 Y=0 K=60
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 59.999100
+
+
+ C=0 M=0 Y=0 K=50
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 50.000000
+
+
+ C=0 M=0 Y=0 K=40
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 39.999400
+
+
+ C=0 M=0 Y=0 K=30
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 29.998800
+
+
+ C=0 M=0 Y=0 K=20
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 19.999700
+
+
+ C=0 M=0 Y=0 K=10
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 9.999100
+
+
+ C=0 M=0 Y=0 K=5
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 4.998800
+
+
+
+
+
+ Brights
+ 1
+
+
+
+ C=0 M=100 Y=100 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 100.000000
+ 100.000000
+ 0.000000
+
+
+ C=0 M=75 Y=100 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 75.000000
+ 100.000000
+ 0.000000
+
+
+ C=0 M=10 Y=95 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 10.000000
+ 95.000000
+ 0.000000
+
+
+ C=85 M=10 Y=100 K=0
+ CMYK
+ PROCESS
+ 85.000000
+ 10.000000
+ 100.000000
+ 0.000000
+
+
+ C=100 M=90 Y=0 K=0
+ CMYK
+ PROCESS
+ 100.000000
+ 90.000000
+ 0.000000
+ 0.000000
+
+
+ C=60 M=90 Y=0 K=0
+ CMYK
+ PROCESS
+ 60.000000
+ 90.000000
+ 0.003100
+ 0.003100
+
+
+
+
+
+
+ Adobe PDF library 15.00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
endstream
endobj
3 0 obj
<>
endobj
8 0 obj
<>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/Thumb 13 0 R/TrimBox[0.0 0.0 612.0 792.0]/Type/Page>>
endobj
9 0 obj
<>stream
+H