diff --git a/.gitignore b/.gitignore index 2cbbca9c..734f0ee0 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ yarn-error.log .yarn/ .yarnrc -packages/backend/environments/local.toml \ No newline at end of file +packages/backend/environments/local.toml diff --git a/packages/deployer/README.md b/packages/deployer/README.md new file mode 100644 index 00000000..695775c1 --- /dev/null +++ b/packages/deployer/README.md @@ -0,0 +1,86 @@ +# deployer + +- Install dependencies + ```bash + yarn + ``` + +- Replace variables in the following files + - [records/application-deployment-request.yml](records/application-deployment-request.yml) + - ``: Replace with current time which can be generated by command `date -u` + ```yml + # Example + record: + ... + meta: + note: Added by Snowball @ Friday 23 February 2024 06:35:50 AM UTC + ... + ``` + +- Update record version in [records/application-record.yml](records/application-record.yml) + ```yml + record: + type: ApplicationRecord + version: + ... + ``` + +- Update commit hash in the following places: + - [records/application-record.yml](records/application-record.yml) + ```yml + record: + ... + repository_ref: + ... + ``` + - [records/application-deployment-request.yml](records/application-deployment-request.yml) + ```yml + record: + ... + meta: + ... + repository_ref: + ``` + - [deploy-frontend.sh](deploy-frontend.sh) + ```bash + ... + RCD_APP_VERSION="0.1.0" + REPO_REF="" + ... + ``` + +- Run script to deploy app + ``` + ./deploy-frontend.sh + ``` + +- Commit the updated [ApplicationRecord](records/application-record.yml) and [ApplicationDeploymentRequest](records/application-deployment-request.yml) files to the repository + +## Notes + +- Any config env can be updated in [records/application-deployment-request.yml](records/application-deployment-request.yml) + ```yml + record: + ... + config: + env: + LACONIC_HOSTED_CONFIG_app_server_url: https://snowballtools-base-api-001.apps.snowballtools.com + ... + ``` + - On changing `LACONIC_HOSTED_CONFIG_app_github_clientid`, the GitHub client ID and secret need to be changed in backend config too + +## Troubleshoot + +- If deployment fails due to low bond balance + - Check balances + ```bash + # Account balance + yarn laconic cns account get + + # Bond balance + yarn laconic cns bond get --id 8fcf44b2f326b4b63ac57547777f1c78b7d494e5966e508f09001af53cb440ac + ``` + - Command to refill bond + ```bash + yarn laconic cns bond refill --id 8fcf44b2f326b4b63ac57547777f1c78b7d494e5966e508f09001af53cb440ac --type aphoton --quantity 10000000 + ``` \ No newline at end of file diff --git a/packages/deployer/config.yml b/packages/deployer/config.yml new file mode 100644 index 00000000..2c6410df --- /dev/null +++ b/packages/deployer/config.yml @@ -0,0 +1,9 @@ +services: + cns: + restEndpoint: http://console.laconic.com:1317 + gqlEndpoint: http://console.laconic.com:9473/api + chainId: laconic_9000-1 + gas: 1000000 + fees: 200000aphoton + userKey: 0524fc22ea0a12e6c5cc4cfe08e73c95dffd0ab5ed72a59f459ed33134fa3b16 + bondId: 8fcf44b2f326b4b63ac57547777f1c78b7d494e5966e508f09001af53cb440ac diff --git a/packages/deployer/deploy-frontend.sh b/packages/deployer/deploy-frontend.sh new file mode 100755 index 00000000..66736e32 --- /dev/null +++ b/packages/deployer/deploy-frontend.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +# Reference: https://git.vdb.to/cerc-io/test-progressive-web-app/src/branch/main/scripts + +RECORD_FILE=records/application-record.yml +CONFIG_FILE=config.yml +RCD_APP_VERSION="0.1.0" +REPO_REF="353fd0f6219a955be186b5914e93baa9058b4473" + +# Publish ApplicationRecord +RECORD_ID=$(yarn --silent laconic -c $CONFIG_FILE cns record publish --filename $RECORD_FILE | jq -r '.id') +echo "ApplicationRecord published" +echo $RECORD_ID + +# Set name to record +REGISTRY_APP_CRN="crn://snowballtools/applications/snowballtools-base-frontend" + +yarn --silent laconic -c $CONFIG_FILE cns name set "$REGISTRY_APP_CRN@${RCD_APP_VERSION}" "$RECORD_ID" +yarn --silent laconic -c $CONFIG_FILE cns name set "$REGISTRY_APP_CRN@${REPO_REF}" "$RECORD_ID" +# Set name if latest release +yarn --silent laconic -c $CONFIG_FILE cns name set "$REGISTRY_APP_CRN" "$RECORD_ID" +echo "$REGISTRY_APP_CRN set for ApplicationRecord" + +# Check if record found for REGISTRY_APP_CRN +APP_RECORD=$(yarn --silent laconic -c $CONFIG_FILE cns name resolve "$REGISTRY_APP_CRN" | jq '.[0]') +if [ -z "$APP_RECORD" ] || [ "null" == "$APP_RECORD" ]; then + echo "No record found for $REGISTRY_APP_CRN." + exit 1 +fi + +RECORD_FILE=records/application-deployment-request.yml + +DEPLOYMENT_REQUEST_ID=$(yarn --silent laconic -c $CONFIG_FILE cns record publish --filename $RECORD_FILE | jq -r '.id') +echo "ApplicationDeploymentRequest published" +echo $DEPLOYMENT_REQUEST_ID diff --git a/packages/deployer/package.json b/packages/deployer/package.json new file mode 100644 index 00000000..ca7a0320 --- /dev/null +++ b/packages/deployer/package.json @@ -0,0 +1,9 @@ +{ + "name": "deployer", + "version": "1.0.0", + "main": "index.js", + "private": true, + "devDependencies": { + "@cerc-io/laconic-registry-cli": "^0.1.10" + } +} diff --git a/packages/deployer/records/application-deployment-request.yml b/packages/deployer/records/application-deployment-request.yml new file mode 100644 index 00000000..13061828 --- /dev/null +++ b/packages/deployer/records/application-deployment-request.yml @@ -0,0 +1,21 @@ +record: + type: ApplicationDeploymentRequest + version: '1.0.0' + name: snowballtools-base-frontend@0.1.0 + application: crn://snowballtools/applications/snowballtools-base-frontend@0.1.0 + dns: dashboard + config: + env: + LACONIC_HOSTED_CONFIG_app_server_url: https://snowballtools-base-api-001.apps.snowballtools.com + # If GitHub client ID is changed, same ID and corresponding secret has to be set in backend config + LACONIC_HOSTED_CONFIG_app_github_clientid: 1ed99146e0d07aa62d44 + LACONIC_HOSTED_CONFIG_app_github_templaterepo: deep-stack/test-progressive-web-app + # New config env after changes for image upload PWA + LACONIC_HOSTED_CONFIG_app_github_pwa_templaterepo: deep-stack/test-progressive-web-app + LACONIC_HOSTED_CONFIG_app_github_image_upload_templaterepo: deep-stack/image-upload-pwa-example + LACONIC_HOSTED_CONFIG_app_wallet_connect_id: eda9ba18042a5ea500f358194611ece2 + meta: + # Set CURRENT_DATE_TIME; Use command date -u + note: Added by Snowball @ + repository: "https://git.vdb.to/cerc-io/snowballtools-base" + repository_ref: 353fd0f6219a955be186b5914e93baa9058b4473 diff --git a/packages/deployer/records/application-record.yml b/packages/deployer/records/application-record.yml new file mode 100644 index 00000000..302bff8e --- /dev/null +++ b/packages/deployer/records/application-record.yml @@ -0,0 +1,10 @@ +record: + type: ApplicationRecord + version: 0.0.5 + repository_ref: 353fd0f6219a955be186b5914e93baa9058b4473 + repository: ["https://git.vdb.to/cerc-io/snowballtools-base"] + app_type: webapp + # name is set to repo name + name: snowballtools-base-frontend + # app_version is set from package.json + app_version: 0.1.0 diff --git a/yarn.lock b/yarn.lock index dc3b01d6..3ec5b346 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1301,7 +1301,19 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cerc-io/laconic-sdk@^0.1.14": +"@cerc-io/laconic-registry-cli@^0.1.10": + version "0.1.10" + resolved "https://git.vdb.to/api/packages/cerc-io/npm/%40cerc-io%2Flaconic-registry-cli/-/0.1.10/laconic-registry-cli-0.1.10.tgz#9adf5fe9bc532f1b1d9cdfaa409fc42ec879454f" + integrity sha512-wiww5Zbio5RnP9SwCftk9rfRq1xGJUi5Iujbr3mbkyG5Aff4Z9QIT6cwxdP6r83osf5CF4eRu203t4CipdKgiA== + dependencies: + "@cerc-io/laconic-sdk" "^0.1.15" + fs-extra "^10.1.0" + js-yaml "^3.14.1" + lodash "^4.17.21" + lodash-clean "^2.2.3" + yargs "^17.4.1" + +"@cerc-io/laconic-sdk@^0.1.14", "@cerc-io/laconic-sdk@^0.1.15": version "0.1.15" resolved "https://git.vdb.to/api/packages/cerc-io/npm/%40cerc-io%2Flaconic-sdk/-/0.1.15/laconic-sdk-0.1.15.tgz#1011a07933c6f1525e05e1ba7dd6a4e4df9b6edb" integrity sha512-Ifl4JUGpckZsu2RkaGyGlObpu9B9GhwFVoDCt8WM9ApdtFnGEVSbDzRuh4f2vLj9WaZkbfdSI/Xci1Fugj3lZg== @@ -10151,7 +10163,7 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^10.0.0: +fs-extra@^10.0.0, fs-extra@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== @@ -12846,6 +12858,13 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash-clean@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/lodash-clean/-/lodash-clean-2.2.3.tgz#eb72801ba9ebfb2771bed3cc971d9e7835a78611" + integrity sha512-ioRhn/L0NNKq220nba58FPvjZ+bTdlUCb37+mhlDe4kzIzuPC/prUHLwDM9izeicr/rcnWrn0EanzNxhAbo8oA== + dependencies: + lodash "^4.17.21" + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -19063,7 +19082,7 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@17.7.2, yargs@^17.5.1, yargs@^17.6.2: +yargs@17.7.2, yargs@^17.4.1, yargs@^17.5.1, yargs@^17.6.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==