Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Docker build #2618

Merged
merged 2 commits into from
Oct 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
**/node_modules
**/lib
**/scripts
45 changes: 26 additions & 19 deletions .github/workflows/action_deploy-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,23 @@ jobs:
credentials_json: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_SOONAVERSE }}'
- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v1'
- name: 'Use gcloud CLI'
run: 'gcloud info'
- name: Install dependencies
run: npm install
- name: Build Instance
run: npm run build:api
- name: Deploy Instance
- name: Build image
run: |
cp packages/api/Dockerfile .
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/api
- name: Deploy
run: |
cd packages/api
npm run deploy:prod
gcloud run deploy api \
--image gcr.io/$GOOGLE_CLOUD_PROJECT/api \
--min-instances=3 \
--memory=1Gi \
--cpu=1 \
--concurrency=1000 \
--allow-unauthenticated \
--timeout=600 \
--ingress=internal-and-cloud-load-balancing \
--region=us-central1 \

deploy_functions:
runs-on: ubuntu-latest
environment: production
Expand All @@ -37,17 +44,17 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version: 18
- name: Set env vars
working-directory: packages/functions
run: echo "$FUNCTIONS_ENV_VARS" >> .env
env:
FUNCTIONS_ENV_VARS: ${{ secrets.FUNCTIONS_ENV_VARS_PROD }}
- name: Deploy to Firebase
uses: w9jds/firebase-action@master
- id: 'auth'
uses: 'google-github-actions/auth@v1'
with:
args: deploy --only functions,firestore:indexes -P soonaverse -f
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
credentials_json: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_SOONAVERSE_TEST }}'
- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v1'
- name: Build and deploy
run: |
npm run create-deploy-script
chmod 777 ./deploy.sh
./deploy.sh

deploy_to_npm:
runs-on: ubuntu-latest
Expand Down
45 changes: 26 additions & 19 deletions .github/workflows/action_deploy-wen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,23 @@ jobs:
credentials_json: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_SOONAVERSE_TEST }}'
- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v1'
- name: 'Use gcloud CLI'
run: 'gcloud info'
- name: Install dependencies
run: npm install
- name: Build Instance
run: npm run build:api
- name: Deploy Instance
- name: Build image
run: |
cp packages/api/Dockerfile .
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/api
- name: Deploy
run: |
cd packages/api
npm run deploy:prod
gcloud run deploy api \
--image gcr.io/$GOOGLE_CLOUD_PROJECT/api \
--min-instances=3 \
--memory=1Gi \
--cpu=1 \
--concurrency=1000 \
--allow-unauthenticated \
--timeout=600 \
--ingress=internal-and-cloud-load-balancing \
--region=us-central1 \

deploy_functions:
runs-on: ubuntu-latest
environment: staging
Expand All @@ -38,17 +45,17 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version: 18
- name: Set env vars
working-directory: packages/functions
run: echo "$FUNCTIONS_ENV_VARS" >> .env
env:
FUNCTIONS_ENV_VARS: ${{ secrets.FUNCTIONS_ENV_VARS_TEST }}
- name: Deploy to Firebase
uses: w9jds/firebase-action@master
- id: 'auth'
uses: 'google-github-actions/auth@v1'
with:
args: deploy --only functions,firestore:indexes -P soonaverse-test -f
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
credentials_json: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_SOONAVERSE_TEST }}'
- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v1'
- name: Build and deploy
run: |
npm run create-deploy-script
chmod 777 ./deploy.sh
./deploy.sh

roll-firestore:
runs-on: ubuntu-latest
Expand Down
39 changes: 2 additions & 37 deletions .github/workflows/functions_emulated-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -220,49 +220,14 @@ jobs:
npm run test:ci -- --forceExit --findRelatedTests ./test/cron/nft-stake.cron.spec.ts &&
npm run test:ci -- --forceExit --findRelatedTests ./test/cron/proposal.cron.spec.ts &&
npm run test:ci -- --forceExit --findRelatedTests ./test/db.roll.spec.ts &&
npm run test:ci -- --forceExit --findRelatedTests ./test/dbRoll/total.guardians.roll.spec.ts &&
npm run test:ci -- --forceExit --findRelatedTests ./test/stake/delete.stake.reward.spec.ts &&
npm run test:ci -- --forceExit --findRelatedTests ./test/stake/stake.reward.cron.spec.ts
" --project dev --only functions,firestore,storage,ui,auth --export-on-exit=./firestore-data
- name: Archive firestore data
uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: firestore-data-test-chunk_4
path: ./packages/functions/firestore-data/
retention-days: 1
chunk_5:
needs: npm-install
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16.x
- uses: actions/cache@v3
with:
path: |
node_modules
packages/functions/node_modules
packages/interfaces/node_modules
key: ${{ runner.os }}-modules-${{ hashFiles('**/package.json') }}
- name: Init
run: |
npm run build:functions
npm install -g firebase-tools
- name: Test
working-directory: packages/functions
run: |
export GOOGLE_APPLICATION_CREDENTIALS="./test-service-account-key.json"
npm run milestone-sync &
firebase emulators:exec "
npm run test:ci -- --forceExit --findRelatedTests ./test/stake/stake.reward.cron.spec.ts &&
npm run test:ci -- --forceExit --findRelatedTests ./test/storage/resize.img.spec.ts
" --project dev --only functions,firestore,storage,ui,auth --export-on-exit=./firestore-data
- name: Archive firestore data
uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: firestore-data-test-chunk_5
name: firestore-data-test-chunk_4
path: ./packages/functions/firestore-data/
retention-days: 1
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,6 @@ dist

package-lock.json
packages/functions/scripts/*.json

/Dockerfile
deploy.sh
162 changes: 162 additions & 0 deletions data.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.events.cloud.firestore.v1;

import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
import "google/type/latlng.proto";

option csharp_namespace = "Google.Events.Protobuf.Cloud.Firestore.V1";
option php_namespace = "Google\\Events\\Cloud\\Firestore\\V1";
option ruby_package = "Google::Events::Cloud::Firestore::V1";

// The data within all Firestore document events.
message DocumentEventData {
// A Document object containing a post-operation document snapshot.
// This is not populated for delete events.
Document value = 1;

// A Document object containing a pre-operation document snapshot.
// This is only populated for update and delete events.
Document old_value = 2;

// A DocumentMask object that lists changed fields.
// This is only populated for update events.
DocumentMask update_mask = 3;
}

// A set of field paths on a document.
message DocumentMask {
// The list of field paths in the mask.
// See [Document.fields][google.cloud.firestore.v1.events.Document.fields]
// for a field path syntax reference.
repeated string field_paths = 1;
}

// A Firestore document.
message Document {
// The resource name of the document. For example:
// `projects/{project_id}/databases/{database_id}/documents/{document_path}`
string name = 1;

// The document's fields.
//
// The map keys represent field names.
//
// A simple field name contains only characters `a` to `z`, `A` to `Z`,
// `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
// `foo_bar_17`.
//
// Field names matching the regular expression `__.*__` are reserved. Reserved
// field names are forbidden except in certain documented contexts. The map
// keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
// empty.
//
// Field paths may be used in other contexts to refer to structured fields
// defined here. For `map_value`, the field path is represented by the simple
// or quoted field names of the containing fields, delimited by `.`. For
// example, the structured field
// `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
// represented by the field path `foo.x&y`.
//
// Within a field path, a quoted field name starts and ends with `` ` `` and
// may contain any character. Some characters, including `` ` ``, must be
// escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
// `` `bak\`tik` `` represents `` bak`tik ``.
map<string, Value> fields = 2;

// The time at which the document was created.
//
// This value increases monotonically when a document is deleted then
// recreated. It can also be compared to values from other documents and
// the `read_time` of a query.
google.protobuf.Timestamp create_time = 3;

// The time at which the document was last changed.
//
// This value is initially set to the `create_time` then increases
// monotonically with each change to the document. It can also be
// compared to values from other documents and the `read_time` of a query.
google.protobuf.Timestamp update_time = 4;
}

// A message that can hold any of the supported value types.
message Value {
// Must have a value set.
oneof value_type {
// A null value.
google.protobuf.NullValue null_value = 11;

// A boolean value.
bool boolean_value = 1;

// An integer value.
int64 integer_value = 2;

// A double value.
double double_value = 3;

// A timestamp value.
//
// Precise only to microseconds. When stored, any additional precision is
// rounded down.
google.protobuf.Timestamp timestamp_value = 10;

// A string value.
//
// The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
// Only the first 1,500 bytes of the UTF-8 representation are considered by
// queries.
string string_value = 17;

// A bytes value.
//
// Must not exceed 1 MiB - 89 bytes.
// Only the first 1,500 bytes are considered by queries.
bytes bytes_value = 18;

// A reference to a document. For example:
// `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
string reference_value = 5;

// An array value.
//
// Cannot directly contain another array value, though can contain an
// map which contains another array.
ArrayValue array_value = 9;

// A map value.
MapValue map_value = 6;
}
}

// An array value.
message ArrayValue {
// Values in the array.
repeated Value values = 1;
}

// A map value.
message MapValue {
// The map's fields.
//
// The map keys represent field names. Field names matching the regular
// expression `__.*__` are reserved. Reserved field names are forbidden except
// in certain documented contexts. The map keys, represented as UTF-8, must
// not exceed 1,500 bytes and cannot be empty.
map<string, Value> fields = 1;
}
10 changes: 0 additions & 10 deletions firebase.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,6 @@
"indexes": "firestore.indexes.json"
},
"functions": {
"predeploy": [
"npm run build:functions",
"cp -r packages/interfaces packages/functions/interfaces",
"sed -i.bu 's/\"*\"/\"file:.\\/interfaces\"/g' packages/functions/package.json",
"rm packages/functions/package.json.bu"
],
"postdeploy": [
"sed -i.bu 's/\"file:.\\/interfaces\"/\"*\"/g' packages/functions/package.json",
"rm packages/functions/package.json.bu"
],
"source": "packages/functions"
},
"emulators": {
Expand Down
8 changes: 5 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
"packages/functions"
],
"scripts": {
"build:functions": "npm run build:interfaces && npm i --workspace=packages/functions && npm run build --workspace=packages/functions",
"build:functions": "npm run build:database && npm i --workspace=packages/functions && npm run build --workspace=packages/functions",
"build:interfaces": "npm i --workspace=packages/interfaces && npm run build --workspace=packages/interfaces",
"build:lib": "npm run build:interfaces && npm i --workspace=packages/lib && npm run build --workspace=packages/lib",
"build:indexes": "npm i --workspace=packages/indexes && npm run build --workspace=packages/indexes",
"build:database": "npm run build:interfaces && npm i --workspace=packages/database && npm run build --workspace=packages/database",
"build:api": "npm run build:interfaces && npm run build:database && npm i --workspace=packages/api && npm run build --workspace=packages/api",
"build:api": "npm run build:database && npm i --workspace=packages/api && npm run build --workspace=packages/api",
"build": "npm i --workspaces && npm run build --workspaces",
"clean:api": "rm -rf packages/api/lib; rm -rf packages/api/node_modules",
"clean:database": "rm -rf packages/database/lib; rm -rf packages/database/node_modules",
Expand All @@ -31,7 +31,9 @@
"prettier:database": "npx prettier --write ./packages/database",
"prettier:api": "npx prettier --write ./packages/api",
"prettier": "npm run prettier:functions; npm run prettier:interfaces; npm run prettier:indexes; npm run prettier:lib; npm run prettier:database; npm run prettier:api",
"joi-to-types": "ts-node ./scripts/joi-generator-post.ts && ts-node ./scripts/joi-generator-tangle.ts && npm run prettier"
"joi-to-types": "ts-node ./scripts/joi-generator-post.ts && ts-node ./scripts/joi-generator-tangle.ts && npm run prettier",
"rebuild": "npm run clean && npm run build",
"create-deploy-script": "ts-node packages/functions/deploy.script.ts"
},
"devDependencies": {
"joi-to-typescript": "4.7.0"
Expand Down
Loading