diff --git a/.github/workflows/build-ci.yml b/.github/workflows/build-ci.yml new file mode 100644 index 0000000..f2f01ec --- /dev/null +++ b/.github/workflows/build-ci.yml @@ -0,0 +1,57 @@ +name: CI + +on: + pull_request: + paths: + - '.github/workflows/build-ci.yml' + - 'example/**' + - 'jsonforms-property-view/**' + - 'package.json' + - '!**/*.md' + push: + branches: + - main + paths: + - '.github/workflows/build-ci.yml' + - 'example/**' + - 'jsonforms-property-view/**' + - 'package.json' + - '!**/*.md' + +permissions: + contents: read + +jobs: + verify: + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - name: Checkout + uses: actions/checkout@v4.2.0 + + - name: Setup Node 20 + uses: actions/setup-node@v4.0.4 + with: + node-version: 20.x + registry-url: 'https://registry.npmjs.org' + + - name: Install tools and libraries + run: sudo apt-get install -y build-essential libx11-dev libxkbfile-dev libsecret-1-dev + + - name: Use Python 3.11 + uses: actions/setup-python@v5.2.0 + with: + python-version: '3.11' + + - name: Install and Build + shell: bash + run: | + yarn global add node-gyp + yarn --skip-integrity-check --network-timeout 100000 + env: + NODE_OPTIONS: --max_old_space_size=4096 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Lint with ESLint + run: yarn lint diff --git a/.github/workflows/publish-ci.yml b/.github/workflows/publish-ci.yml new file mode 100644 index 0000000..ceb4fb7 --- /dev/null +++ b/.github/workflows/publish-ci.yml @@ -0,0 +1,61 @@ +name: Publish JSONForms Property-View Packages + +on: + workflow_run: + workflows: ['CI'] + types: [completed] + branches: [main] + +permissions: + contents: write + packages: write + id-token: write + +jobs: + verify-and-publish: + runs-on: ubuntu-latest + timeout-minutes: 30 + if: ${{ github.event.workflow_run.conclusion == 'success' }} + + steps: + - name: Checkout Repository + uses: actions/checkout@v4.2.0 + with: + fetch-depth: 0 # pulls all history and tags for Lerna to detect which packages changed + + - name: Setup Node 20 + uses: actions/setup-node@v4.0.4 + with: + node-version: 20.x + registry-url: 'https://registry.npmjs.org' + + - name: Install tools and libraries + run: sudo apt-get install -y build-essential libx11-dev libxkbfile-dev libsecret-1-dev + + - name: Use Python 3.11 + uses: actions/setup-python@v5.2.0 + with: + python-version: '3.11' + + - name: Install and Build + shell: bash + run: | + yarn global add node-gyp + yarn --skip-integrity-check --network-timeout 100000 + env: + NODE_OPTIONS: --max_old_space_size=4096 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Lint with ESLint + run: yarn lint + + # Publish the ModelHub packages. Ignore lifecycle scripts and add verbose logging + # Scripts are ignored because we build and lint before this step + - name: Publish packages + run: | + git config user.email 'eclipse-emfcloud-bot@eclipse.org' + git config user.name 'eclipse-emfcloud-bot' + yarn lerna publish -y --ignore-scripts --loglevel=verbose + env: + NPM_CONFIG_PROVENANCE: 'true' + NODE_AUTH_TOKEN: ${{ secrets.NPMJS_TOKEN }} diff --git a/.prettierrc.js b/.prettierrc.js index 88df092..09486fa 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -7,8 +7,9 @@ module.exports = { arrowParens: 'avoid', overrides: [ { - files: '*.json', + files: ['*.json', '*.yaml', '*.yml'], options: { + printWidth: 100, tabWidth: 2 } }, diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index dd23804..0000000 --- a/Jenkinsfile +++ /dev/null @@ -1,114 +0,0 @@ -def kubernetes_config = """ -apiVersion: v1 -kind: Pod -spec: - containers: - - name: node - image: eclipsetheia/theia-blueprint:builder - tty: true - resources: - limits: - memory: "4Gi" - cpu: "1" - requests: - memory: "4Gi" - cpu: "1" - command: - - cat - volumeMounts: - - mountPath: "/home/jenkins" - name: "jenkins-home" - readOnly: false - - mountPath: "/.yarn" - name: "yarn-global" - readOnly: false - volumes: - - name: "jenkins-home" - emptyDir: {} - - name: "yarn-global" - emptyDir: {} -""" - -pipeline { - agent { - kubernetes { - label 'emfcloud-agent-pod' - yaml kubernetes_config - } - } - - options { - buildDiscarder logRotator(numToKeepStr: '15') - } - - environment { - EMAIL_TO = "ndoschek+eclipseci@eclipsesource.com, eneufeld+eclipseci@eclipsesource.com" - PUPPETEER_SKIP_DOWNLOAD = "true" - } - - stages { - stage('Build') { - steps { - container('node') { - withCredentials([string(credentialsId: "github-bot-token", variable: 'GITHUB_TOKEN')]) { - sh "yarn" - } - } - } - } - - stage('Codechecks ESLint') { - steps { - container('node') { - sh "yarn lint:ci" - } - } - } - - stage('Deploy (master only)') { - when { branch 'master' } - steps { - build job: 'deploy-jsonforms-property-view-npm', wait: false - } - } - } - - post { - always { - // Record & publish ESLint issues - recordIssues enabledForFailure: true, publishAllIssues: true, aggregatingResults: true, - tools: [esLint(pattern: '**/eslint.xml')], - qualityGates: [[threshold: 1, type: 'TOTAL', unstable: true]] - } - failure { - script { - if (env.BRANCH_NAME == 'master') { - echo "Build result FAILURE: Send email notification to ${EMAIL_TO}" - emailext attachLog: true, - body: 'Job: ${JOB_NAME}
Build Number: ${BUILD_NUMBER}
Build URL: ${BUILD_URL}', - mimeType: 'text/html', subject: 'Build ${JOB_NAME} (#${BUILD_NUMBER}) FAILURE', to: "${EMAIL_TO}" - } - } - } - unstable { - script { - if (env.BRANCH_NAME == 'master') { - echo "Build result UNSTABLE: Send email notification to ${EMAIL_TO}" - emailext attachLog: true, - body: 'Job: ${JOB_NAME}
Build Number: ${BUILD_NUMBER}
Build URL: ${BUILD_URL}', - mimeType: 'text/html', subject: 'Build ${JOB_NAME} (#${BUILD_NUMBER}) UNSTABLE', to: "${EMAIL_TO}" - } - } - } - fixed { - script { - if (env.BRANCH_NAME == 'master') { - echo "Build back to normal: Send email notification to ${EMAIL_TO}" - emailext attachLog: false, - body: 'Job: ${JOB_NAME}
Build Number: ${BUILD_NUMBER}
Build URL: ${BUILD_URL}', - mimeType: 'text/html', subject: 'Build ${JOB_NAME} back to normal (#${BUILD_NUMBER})', to: "${EMAIL_TO}" - } - } - } - } -} diff --git a/README.md b/README.md index 5f2641c..444f8c9 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ -# Eclipse EMF Cloud JSONForms property-view for Eclipse Theia applications +# Eclipse EMF Cloud JSONForms property-view for Eclipse Theia applications [![build-CI](https://img.shields.io/github/actions/workflow/status/eclipse-emfcloud/jsonforms-property-view/build-ci.yml?label=Build%20CI)](https://github.com/eclipse-emfcloud/jsonforms-property-view/actions/workflows/build-ci.yml) [![Aim - Framework](https://img.shields.io/badge/Aim-Framework-brightgreen)](https://github.com/eclipsesource/.github/blob/main/repository-classification.md) [![Project - Maintenance](https://img.shields.io/badge/Project-Maintenance-872ea4)](https://github.com/eclipsesource/.github/blob/main/repository-classification.md) -![build-status](https://img.shields.io/jenkins/build?jobUrl=https://ci.eclipse.org/emfcloud/job/eclipse-emfcloud/job/jsonforms-property-view/job/master/) [![License: EPL v2.0](https://img.shields.io/badge/License-EPL%20v2.0-yellow.svg)](https://www.eclipse.org/legal/epl-2.0/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) @@ -14,10 +13,9 @@ For more information, please visit the [EMF Cloud Website](https://www.eclipse.o If you are interested in adopting this framework for your product or enhancing its feature spectrum, please get in contact with us using the [discussions forum](https://github.com/eclipse-emfcloud/emfcloud/discussions) and have a look at our [support options](https://www.eclipse.org/emfcloud/contact/)! -## Available via NPM ![build-status-server](https://img.shields.io/jenkins/build?jobUrl=https://ci.eclipse.org/emfcloud/job/deploy-jsonforms-property-view-npm/&label=publish) +## Available via NPM [![publish-CI](https://img.shields.io/github/actions/workflow/status/eclipse-emfcloud/jsonforms-property-view/publish-ci.yml?label=Publish%20CI)](https://github.com/eclipse-emfcloud/jsonforms-property-view/actions/workflows/publish-ci.yml) -- -- +- [`@eclipse-emfcloud/jsonforms-property-view`](https://www.npmjs.com/package/@eclipse-emfcloud/jsonforms-property-view) ## Project structure @@ -26,13 +24,17 @@ If you are interested in adopting this framework for your product or enhancing i This package provides a framework to integrate a form-based property-view using JSONForms in an Eclipse Theia application. For more details on the Eclipse Theia property-view please visit the `@theia/property-view` [documentation](https://github.com/eclipse-theia/theia/tree/master/packages/property-view). +### [`example/person-detail-property-view`](./example/person-detail-property-view) + +This basic development example uses the jsonforms-property-view in a minimal Eclipse Theia browser application. + ### [`@eclipse-emfcloud/modelserver-jsonforms-property-view`](./modelserver-jsonforms-property-view/README.md) -This package provides a [Model Server](https://github.com/eclipse-emfcloud/emfcloud-modelserver) aware version of the jsonforms-property-view. +#### :warning: **This package is no longer actively maintained and is kept here as a demo.** -### [`example/person-detail-property-view`](./example/person-detail-property-view) +It is not part of the default workspace anymore and not built automatically anymore. -This basic development example uses the jsonforms-property-view in a minimal Eclipse Theia browser application. +This package provides a [Model Server](https://github.com/eclipse-emfcloud/emfcloud-modelserver) aware version of the jsonforms-property-view. ## Preview diff --git a/example/browser-app/package.json b/example/browser-app/package.json index 38f811e..77d31f9 100644 --- a/example/browser-app/package.json +++ b/example/browser-app/package.json @@ -17,7 +17,7 @@ "@theia/property-view": "1.52.0", "@theia/terminal": "1.52.0", "@theia/workspace": "1.52.0", - "@eclipse-emfcloud/person-detail-property-view": "0.7.0" + "@eclipse-emfcloud/person-detail-property-view": "*" }, "devDependencies": { "@theia/cli": "1.52.0" diff --git a/example/person-detail-property-view/package.json b/example/person-detail-property-view/package.json index 3cf8262..3f071be 100644 --- a/example/person-detail-property-view/package.json +++ b/example/person-detail-property-view/package.json @@ -14,7 +14,7 @@ "src" ], "dependencies": { - "@eclipse-emfcloud/jsonforms-property-view": "0.7.0", + "@eclipse-emfcloud/jsonforms-property-view": "*", "@jsonforms/core": "^3.4.0", "@jsonforms/react": "^3.4.0", "@jsonforms/vanilla-renderers": "^3.4.0" diff --git a/jsonforms-property-view/package.json b/jsonforms-property-view/package.json index b2227f7..a770a21 100644 --- a/jsonforms-property-view/package.json +++ b/jsonforms-property-view/package.json @@ -1,6 +1,6 @@ { "name": "@eclipse-emfcloud/jsonforms-property-view", - "version": "0.7.0", + "version": "0.8.0", "description": "Theia extension for a generic JSONForms property view", "license": "(EPL-2.0 OR MIT)", "publishConfig": { diff --git a/lerna.json b/lerna.json index 6512955..8b3c4f2 100644 --- a/lerna.json +++ b/lerna.json @@ -1,14 +1,22 @@ { - "version": "0.7.0", + "version": "independent", "npmClient": "yarn", "command": { "run": { "stream": true }, + "version": { + "message": "chore: publish jsonforms-property-view package", + "conventionalCommits": true, + "changelog": false, + "exact": true, + "includeMergedTags": true, + "private": false + }, "publish": { - "forcePublish": true, - "skipGit": true, + "npmClient": "npm", "registry": "https://registry.npmjs.org/" } - } + }, + "ignoreChanges": ["**/*.md", "**/*.spec.ts", "**/*.spec.tsx"] } diff --git a/modelserver-jsonforms-property-view/README.md b/modelserver-jsonforms-property-view/README.md index 2b92855..b806e52 100644 --- a/modelserver-jsonforms-property-view/README.md +++ b/modelserver-jsonforms-property-view/README.md @@ -1,5 +1,7 @@ # ModelServer aware JSONForms property-view for Eclipse Theia applications +## :warning: **This package is no longer actively maintained and is kept here as a demo.** + This package provides a [Model Server](https://github.com/eclipse-emfcloud/emfcloud-modelserver) aware version of the `@eclipse-emfcloud/jsonforms-property-view`. For more information, please visit the [EMF Cloud Website](https://www.eclipse.org/emfcloud/). diff --git a/modelserver-jsonforms-property-view/package.json b/modelserver-jsonforms-property-view/package.json index 8fe592a..2e423f7 100644 --- a/modelserver-jsonforms-property-view/package.json +++ b/modelserver-jsonforms-property-view/package.json @@ -1,11 +1,8 @@ { "name": "@eclipse-emfcloud/modelserver-jsonforms-property-view", "version": "0.7.0", - "description": "Theia extension for a modelserver aware JSONForms property view", + "description": "DEPRECATED: Theia extension for a modelserver aware JSONForms property view", "license": "(EPL-2.0 OR MIT)", - "publishConfig": { - "access": "public" - }, "keywords": [ "theia-extension", "property-view", diff --git a/package.json b/package.json index 991c60d..c36e3ba 100644 --- a/package.json +++ b/package.json @@ -10,13 +10,9 @@ "prepare": "lerna run prepare", "watch": "lerna run --parallel watch", "build": "lerna run build", - "lint": "lerna run lint --", + "lint": "lerna run lint -- --max-warnings 0", "lint:fix": "yarn lint -fix", - "lint:ci": "yarn lint -o eslint.xml -f checkstyle", - "start": "yarn --cwd example/browser-app start", - "publish:prepare": "lerna version --no-private --ignore-scripts --yes --no-push", - "publish:latest": "lerna publish from-git --no-git-reset --no-git-tag-version --no-verify-access --ignore-scripts --no-push", - "publish:next": "SHA=$(git rev-parse --short HEAD) && lerna publish preminor --exact --canary --preid next.${SHA} --dist-tag next --no-git-reset --no-git-tag-version --no-push --ignore-scripts --yes --no-verify-access" + "start": "yarn --cwd example/browser-app start" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.4.0", @@ -36,7 +32,6 @@ }, "workspaces": [ "jsonforms-property-view", - "modelserver-jsonforms-property-view", "example/browser-app", "example/person-detail-property-view" ] diff --git a/yarn.lock b/yarn.lock index 38be716..e38ceed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -956,27 +956,6 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@eclipse-emfcloud/modelserver-client@0.8.0-theia-cr03", "@eclipse-emfcloud/modelserver-client@^0.8.0-theia-cr03": - version "0.8.0-theia-cr03" - resolved "https://registry.yarnpkg.com/@eclipse-emfcloud/modelserver-client/-/modelserver-client-0.8.0-theia-cr03.tgz#879b856419ea784000e74692e7a1dbd5d90cdcec" - integrity sha512-LQLYNlhLe21yNAhuQnbNcABnbhqt+5BwI9whLwn+nyyMQ3Bc0kz8wBJBYAltjfa3WlN2ruzAeihCtXgsLivNbQ== - dependencies: - axios "^0.24.0" - events "^3.3.0" - fast-json-patch "^3.1.0" - isomorphic-ws "^4.0.1" - urijs "^1.19.11" - ws "^7.1.2" - -"@eclipse-emfcloud/modelserver-theia@0.8.0-theia-cr03": - version "0.8.0-theia-cr03" - resolved "https://registry.yarnpkg.com/@eclipse-emfcloud/modelserver-theia/-/modelserver-theia-0.8.0-theia-cr03.tgz#c6bf74893103bfad578961c11c0106c4bfc967e7" - integrity sha512-Q8xWf4Tp5eUVXVR1ze8RpAXjvPOCTFKEMs4MoTTwUll7TYL8heCxusJNtO513ZI+RxYDBBTmjKr/rlGt+Yda/Q== - dependencies: - "@eclipse-emfcloud/modelserver-client" "^0.8.0-theia-cr03" - urijs "^1.19.11" - ws "^7.1.2" - "@electron/get@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960" @@ -3667,13 +3646,6 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axios@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" - integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== - dependencies: - follow-redirects "^1.14.4" - axios@^1.7.4: version "1.7.7" resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" @@ -5487,7 +5459,7 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.2.0, events@^3.3.0: +events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -5625,11 +5597,6 @@ fast-glob@^3.2.5, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-patch@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947" - integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== - fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -5807,7 +5774,7 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== -follow-redirects@^1.0.0, follow-redirects@^1.14.4, follow-redirects@^1.15.6: +follow-redirects@^1.0.0, follow-redirects@^1.15.6: version "1.15.9" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== @@ -7012,11 +6979,6 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - iterator.prototype@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" @@ -11029,11 +10991,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urijs@^1.19.11: - version "1.19.11" - resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.11.tgz#204b0d6b605ae80bea54bea39280cdb7c9f923cc" - integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== - url-join@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" @@ -11461,11 +11418,6 @@ ws@8.11.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -ws@^7.1.2: - version "7.5.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== - ws@^8.17.1: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc"