diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 50e21abcf..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - env: { - browser: true, - commonjs: true, - es6: true, - jest: true - }, - extends: ['standard', 'prettier'], - globals: { - Atomics: 'readonly', - SharedArrayBuffer: 'readonly' - }, - parserOptions: { - ecmaVersion: 2020 - }, - ignorePatterns: ['assets/', 'dist/', 'node_modules/'], - rules: { - camelcase: [1, { properties: 'never' }], - 'prettier/prettier': 'error' - }, - plugins: ['prettier'] -}; diff --git a/.github/workflows/trigger-external.yml b/.github/workflows/trigger-external.yml index 104168c12..df5bdaa63 100644 --- a/.github/workflows/trigger-external.yml +++ b/.github/workflows/trigger-external.yml @@ -9,12 +9,12 @@ on: release: types: [published] pull_request_target: - branches: [master] + branches: [main] push: - branches: [master] + branches: [main] jobs: push: - if: ${{ github.event_name == 'push' && github.ref_name == 'master' }} + if: ${{ github.event_name == 'push' && github.ref_name == 'main' }} runs-on: ubuntu-latest strategy: matrix: @@ -26,7 +26,7 @@ jobs: --header "Authorization: token ${{ secrets.TEST_GITHUB_TOKEN }}" \ --header "Accept: application/vnd.github.v3+json" \ --url "https://api.github.com/repos/iterative/${{ matrix.repos }}/dispatches" \ - --data '{"event_type":"push", "client_payload": {"branch":"master"}}' + --data '{"event_type":"push", "client_payload": {"branch":"main"}}' pr: if: ${{ github.event_name == 'pull_request_target' }} runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 9727194aa..c6bba5913 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,130 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories node_modules/ -.terraform/ -.cml/ -.DS_Store - -main.tf -terraform.* -!terraform.js -!terraform.test.js -crash.log -/build -/coverage - -.idea/ \ No newline at end of file +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 70459d35e..000000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,54 +0,0 @@ -deploy-runner: - only: - refs: [master] - image: iterativeai/cml:0-dvc2-base1 - script: - - pip install awscli - - > - CREDENTIALS=($(aws sts assume-role-with-web-identity --region=us-west-1 - --role-arn=arn:aws:iam::342840881361:role/SandboxUser - --role-session-name=GitLab --duration-seconds=3600 - --web-identity-token="$CI_JOB_JWT_V2" - --query="Credentials.[AccessKeyId,SecretAccessKey,SessionToken]" - --output=text)) - - export AWS_ACCESS_KEY_ID="${CREDENTIALS[0]}" - - export AWS_SECRET_ACCESS_KEY="${CREDENTIALS[1]}" - - export AWS_SESSION_TOKEN="${CREDENTIALS[2]}" - - | - cml runner \ - --cloud=aws \ - --cloud-region=us-west \ - --cloud-type=g4dn.xlarge \ - --cloud-spot \ - --labels=cml-runner-gpu -test-runner: - needs: [deploy-runner] - only: - refs: [master] - tags: - - cml-runner-gpu - script: - - pip install tensorboard - - - npm ci - - npm run lint - - npm run test - - - nvidia-smi -test-container: - needs: [deploy-runner] - only: - refs: [master] - tags: - - cml-runner-gpu - image: iterativeai/cml:0-dvc2-base1-gpu - script: - - dvc --version - - cml --version - - pip install tensorboard - - - npm ci - - npm run lint - - npm run test - - - nvidia-smi diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index b6a7d89c6..000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -16 diff --git a/README.md b/README.md index 0dd84e15e..c555ab5e7 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ jobs: ## Usage We helpfully provide CML and other useful libraries pre-installed on our -[custom Docker images](https://github.com/iterative/cml/blob/master/Dockerfile). +[custom Docker images](https://github.com/iterative/cml/blob/mains/Dockerfile). In the above example, uncommenting the field `container: ghcr.io/iterative/cml:0-dvc2-base1`) will make the runner pull the CML Docker image. The image already has NodeJS, Python 3, DVC and CML set up on @@ -215,7 +215,7 @@ git push origin experiment ``` 5. In GitHub, open up a pull request to compare the `experiment` branch to - `master`. + `main`. ![](https://static.iterative.ai/img/cml/make_pr.png) @@ -272,18 +272,18 @@ jobs: # Report metrics echo "## Metrics" >> report.md git fetch --prune - dvc metrics diff master --show-md >> report.md + dvc metrics diff main --show-md >> report.md # Publish confusion matrix diff echo "## Plots" >> report.md echo "### Class confusions" >> report.md - dvc plots diff --target classes.csv --template confusion -x actual -y predicted --show-vega master > vega.json + dvc plots diff --target classes.csv --template confusion -x actual -y predicted --show-vega main > vega.json vl2png vega.json -s 1.5 > confusion_plot.png echo "![](./confusion_plot.png)" >> report.md # Publish regularization function diff echo "### Effects of regularization" >> report.md - dvc plots diff --target estimators.csv -x Regularization --show-vega master > vega.json + dvc plots diff --target estimators.csv -x Regularization --show-vega main > vega.json vl2png vega.json -s 1.5 > plot.png echo "![](./plot.png)" >> report.md @@ -642,6 +642,9 @@ These are some example projects using CML. :key: needs a [PAT](#environment-variables). - # :warning: Maintenance :warning: -- ~2023-07 Nvidia has dropped container CUDA images with [10.x](https://hub.docker.com/r/nvidia/cuda/tags?page=1&name=10)/[cudnn7](https://hub.docker.com/r/nvidia/cuda/tags?page=1&name=cudnn7) and [11.2.1](https://hub.docker.com/r/nvidia/cuda/tags?page=1&name=11.2.1), CML images will be updated accrodingly + +- ~2023-07 Nvidia has dropped container CUDA images with + [10.x](https://hub.docker.com/r/nvidia/cuda/tags?page=1&name=10)/[cudnn7](https://hub.docker.com/r/nvidia/cuda/tags?page=1&name=cudnn7) + and [11.2.1](https://hub.docker.com/r/nvidia/cuda/tags?page=1&name=11.2.1), + CML images will be updated accrodingly diff --git a/assets/test.md b/assets/test.md index 116f12e7c..95a08f815 100644 --- a/assets/test.md +++ b/assets/test.md @@ -1,3 +1,3 @@ ### test -![embed](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAcCAYAAAAjmez3AAABe2lDQ1BpY2MAACiRfZE9SMNAHMVfUyUqLQ5mEHHIUJ0siIo4ahWKUCHUCq06mI9+QZOGJMXFUXAtOPixWHVwcdbVwVUQBD9AnBydFF2kxP8lhRYxHhz34929x907gGtUVN3uGgd0w7HSyYSYza2K/Ct49EJAFLys2uacJKUQOL7uEWLrXZxlBZ/7c0S1vK0CIZF4VjUth3iDeHrTMRnvEwtqSdaIz4nHLLog8SPTFZ/fGBc95limYGXS88QCsVjsYKWD1ZKlE08RxzTdoHwu67PGeIuxXqmprXuyF0byxsoy02kOI4lFLEGCCAU1lFGBgzitBik20rSfCPAPeX6JXAq5ylDJsYAqdMieH+wPfndrFyYn/KRIAuh+cd2PEYDfBZp11/0+dt3mCRB+Bq6Mtr/aAGY+Sa+3tdgR0L8NXFy3NWUPuNwBBp9M2ZI9KUyTKxSA9zP6phwwcAv0rfm9tfZx+gBkqKvUDXBwCIwWKXs94N09nb39e6bV3w/2QHJ1PtCYugAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAACE3AAAhNwEzWJ96AAAAB3RJTUUH5AceDCAbVRwbogAAAcF6VFh0UmF3IHByb2ZpbGUgdHlwZSBpY2MAADiNpVNbjhwhDPznFDmC8bM5Tg80Uu5/gRgM89rZSJtYatGUsV02Rfpda/o1TA0TDMMTtCppMwKmCWnTy9hQkI0RQQ4pciKAXexu868A5PHfxj5pVjIy4CwgwBX+wbpXHYzyBhphuzP7oaUfnm/KKkYahTIumCF5Y2BoHA5dDlIznxBsvByBZ3a+h49j4ecaBdbk45xjDEd7BLzgV73j9oRvQo6PROw3E1Qx86oAHvAZ/+Z8GlQNtcWetoN9Fi6A1YKze8F547Zb4+RwNdH3W9o3WVX0EhHaAcvtCXyEwK4ldhIybm00qkNp4qs71A+NIWNb+yvODEkIrgT4TiD9nUE+HwwEVjGMYrMIRRFmT6R9PAj/8oMBPJ7Ekw0Fw5uAXVNKRPgsyAyVI1La1YcRytxbmQx7KzDx25nn2lYlanUmqs7iEwPt0RkdPRJS+cgUufRg1I95Gzet/DEhFpt+O+aaj+aAZpfNvc2RaE8e1W3mxdNiCFJmIIXM4JTbi+7CaCeCk9oMFA6Bca3zYCnlXBUicZf6ne72sN+uHfab+yK8/0j0KsT0B9wNICkQHDN8AAAKZElEQVRYw72YfbBdZXXGf2u979777HPOvTf3JpDQGBxkiC3FKo6QphqCIciX2AGmOLU4DvGzJJ0Siv6hQabFEj7GyihMa/0AzIBQKDCplpRqTDtTLWpJEUFjplVEEXEYIcm9556z97tW/9jnnOQGHOAP+s6s2XP2+VrP+6znWevdwmFrbv0KAglHUIxAmhTx1cCZwGrgGGDaNcZUdnvWnvxFKicfTu3JXVZ2v+aie+pFR5q1OoglrOiwbNNHeaWXHPri2fXHUhEpmSej6gh2ruIbBD9ZxKcO/axrJJUTWHuS1ERt5cQTqez+i7U62zwrHkydRameXILOz7J8w6b/HyBPnXY8AUNJ5FK9LpCuDKRzFcsVQ8QXfHEEJLUnsc5UA6acwMoJrOw+k1rdf7Ci/WkrOz/0rAWAFSWvPv+drxyQx087kUhNkET0+qwo9aci6bWBRCChGCr2fCBDNg4H0ly7WKuz14r2tZa3bvO8nMcMK7scc/Y5vzGhzbt/QEDwYXICqAiCoAI+THvr649bCGTPutW0pQc4ip8TqD8bqZdnUhNpQjEOZ2UMpDNFak8NS2wCKydJZRdrdbFWh1R2+l60v2R5+VeWFT+zVhdx49h1py5I5E93P0qGYEBAMJwC7QiUKuKCzAaReREIKI4TRfn4614DgFZk9MkZkL+xIt5QE5fXRGqPQz4CjuAHq9CAAwjPIdIHARFcBESH11EASOES3u8abifEN4kblhXs/Y8HxyDe+9AjDNyYxwDawOkZ+ingq8AuYKfAdodrcE5xvMg10I0ZWx/9ScPIY+veAjAVSLcF0jlBEpGajIpMKnIqIhWR9KRiO0R8F/ATD7Gf2otmUnfRG1J76m2pPbEqtSfbNiqvVgcbR8OO5a29nhWbXcNXPWthIXC1Niy3JCriayOyOaLrAnQCMi4tFUERgsi+ILo9iFwTRR9VAUWIwx2/wNAzDMV8uKsADiIkwf8xYNfgPDxk/6BPuO/wEG5Cw1o0bEL0NBeJiIIqaMBVcVHQcJxr+ILH/CMW4zYN0Qdpnkx0ekDaHF03ujDjY4U8X9AqMqnCRUHkjSpsFGRXwtCet5ZUZBdXZLFqeKDyjEFTbjbw7DM18X2JsBvBkisAYceTVIt/i8c/fBuI7nfVr3iIF3oIl6H6BKq4BFwDaKB5LSC6FA2fRsPG4xYfo+asNPebzX2L4TNGA2MUh4EYsqIEkeMV+dso8nuFROSbbz3nAsVvVayjYoycalhe92RSXdyivy+XAQV9Ol/76fN26tcf20DqTEGq8aJNak+ssqJzrbW6a1PZwYoOXpRYXuJZC8sLyIoD33G75b5qblVUPSmKEEXJUDIRMpSIoDBKnEyVXJSo2txDUJG7gsjFsSaeJXhHcNQNJRAwagm/qonXDTzfp2KIGzNf3/uCljn9118E4Om/2QJmeMgf9Ji9y0O8Gg0XoRpctDEFbUpuj9Xdf6/6mxzH3DHAcEx8aC7j8qoEJIjEbAgiDoGFhqGzROQMTYSTR0Zb0ZRUn5x5b+2a99ZDs95h3lss/foPXrQpHXnZJ0gTM6TuNB7zJz1mm1zjdYjON5ppSuyRuubu3iy/TDXuDZA0vI7CYZ/jNwMXIrwrim7PVC2XQK5KJg0gFekqcqEaurzp54FDAfUpvjlHu8qkYuXO/3xREKN11Acvx1WxVheP+QEP4UoP4QpU97so/1XV3Nfr8VydEDPcHDcbg0nuJPx7hr/bhQ8A90XRu8oQN5QaHyjGjCjK0M2Ek6OhkwtTcQRq4GcAc16+ZBCjteJP3gvAj7+ynRBjtaIbPrm3jrPfHqTr768GnVkVJOjw33xog46pIaL/2kv1xhiyvWn43hExYyJmzwSRe0HOPNzPBI6IPvbaEQw9xFvhGWZeNpDR+tjPM6qo7BGX3+72A5lKHRXJtFGEKIg1mhA4oZzh1OllurToaM+saarAT+cP8Fw1ILmLD9WzMGeIjuwDpgEMHc0yAVjhQN9bLxvAe7ZuxwrF+0YG+fG5brbKrjCkLRhIs2GC4S5oDJw8OcO66aNoxfy0nqW7EbkS+KfKvZqMOQ5L5lM6v3IbaugQQM7TaugTI43Y6ATS6OXNA4osSs2ta//8JYPYsOUecEfnE1LZpFR+lVT+l1J5R2pDah+GQW3EBGsmFnP69DJaIY428gSQW4AvCFwQRP+41HhrK4T1LQ1kI50gI518Ww19MI27RxiKPdL3fG3f8zfNeUnfcz5zypYXBfH+y+4izibigRqt/FVa+U1S2eVSWyG1o0MAI0C5CWunj+DUxcvIQ2zUOZ7RmADe7XCHwLZM9exCg+aq5BrIxv1E9qtwpybCjkSYrQnNVOUZA88ZkC/pU3yk5+VURU5NxtY117wggEs23M6HNt5J6CWoDUn+B1Lbl6X2i6R2lcrR2pDqICMk278ky29Yc8TSb0UNB0GM5Muou3sUIeiwYUZpGuaon0TRf1bkAbn31A2LzeVeQ9eMSmzMjEcbkN/U92JLj3LfHG0iNT1KBke28AAT/zPHvpUdPFNSGRZZLhdboX9huS63XElFwHLFC8UyxXLBc33WMv3o3Y889HePffCS19Si16F6nosKw8bZaBYqt6EtG7U7lRm1N5HcH0vu7wS+H8579aqeo54Ib6+JOhrhm7krlwH5SRX5ayuy/3X0l3Ox46kTQQUxGEznoDLpKmehcj1BPoDKlCt4M5o2IaOr/AKRzQ43r1y6zN969NG/dtUHXHQO1RMQ6YwYsaH9jueuBf4qjwCXCPLdVgzE1NjtPUY4PxHOrb2ZtKphY6w805p4QSK8pSY+AHwD+DHQB2YQTgROx/0kzEuSQ3LEBEk0pRQcT47UvkfUL/XkO1QgF8U0ADxrMfuEmv0byKXAeoeJw4fG4eD4rCL3BbjWXX6IOP2UkNvXXsLAcxx5QyLcWRNW1qORccxMM7pUZNRZdC9DzzNJCIWr5B4Fj4Jl0pzwF8T43i7P9DLLdbdniivc8b4zAXj4qWqYrYJICaw2ODO5n2j4kuTuhj9l7g+Z+/0G3xlYGvy8N8uyVpuzV3Sb88i8F4j6f7vrpTXh72viq2pvdDLSjKGY6OgA3V7QjhxwAQMxEPODkWRekt8itV+F+pMISD/x5T87eG5//bKMh59Oo9rpATsDsrPGS4dy+Otz3lQB7k6ugaPbXdYvbx+0h8+dcjkVGY5SEd9We7yhJv7OwVN7w0ytEcsVCsVjY5MjLTSs6CGsCJbpHs91q0W5wwrt42AtZduH3/EbLXz300bT66WZv/BxAzRvEn7zUfnzvjeWz42nbBk+DFIGnv9uIlxRE/+wJrZGpZZC40DksgAIKtiovKLimfzKcr3DMrnRivAjG302E275+Hkvubm+nLXABz655ipa9NjPBBVZOxHOrokbauLvJ4nTKTQ2SiZ4WAjEg9QW5XGPcr9F2YbId1MnWDURCfOJz1//R68IgBcEAnD1mmupiQhOIjAg7ybCqiThDIthtedyLJlMeZCI0HPlKUS+50G+4VF2kvxHdTe4ZwrueFQ+e+Mr81Du0PV/F8n/JQcwwagAABYCZVhJZklJKgAIAAAACQAAAQQAAQAAAPoAAAABAQQAAQAAAI8AAAACAQMAAwAAAHoAAAAaAQUAAQAAAIAAAAAbAQUAAQAAAIgAAAAoAQMAAQAAAAMAAAAxAQIADQAAAJAAAAAyAQIAFAAAAJ4AAABphwQAAQAAALIAAADEAAAACAAIAAgAVQAAAAEAAABVAAAAAQAAAEdJTVAgMi4xMC4yMAAAMjAyMDowNzowOSAxNjoxNDoxOQABAAGgAwABAAAAAQAAAAAAAAAIAAABBAABAAAAAAEAAAEBBAABAAAAkgAAAAIBAwADAAAAKgEAAAMBAwABAAAABgAAAAYBAwABAAAABgAAABUBAwABAAAAAwAAAAECBAABAAAAMAEAAAICBAABAAAA0RQAAAAAAAAIAAgACAD/2P/gABBKRklGAAEBAAABAAEAAP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAJIBAAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APn+iiigAoorf0Pwpe6uVlcGC1OD5jDlh/sionUjTXNJ2NqNCpXnyU1dmJBbzXUoit4ZJZDztjUsfyFdVpPgO8utsuoP9li67By5H8h+v0ruNN0ew0mPbaW6oSMM/Vm+p61oV49fMpvSmrfmfV4Ph6lC0sQ+Z9lt/mYVl4O0Sz2N9l8+RM/POxbOfVfu9/Sti3tbe0jMdtBFChOSsaBRn6CphRXmzqzn8TbPepYajRVqcUvRBT46ZT4+tQtzWWxY8qOaNopUV43BVlYZDA9QRWbceC/D18++TTIkbbtHkkxj8lIGffFasdWo67KU5R+F2PMxNKnU+OKfqecap8KZFV5NJvvMx92G4GCeOfnHGc9OB161wuo6NqWkyFL+ynt/m2hnT5WPs3Q/ga+i46lktoLuBoLiFJYnGGR1DAj3Br06WKmvi1Pn8TllJ609D5hor17xL8KIrpjc6C6W7Y+a2kJ2sfUHnH06fSvKb2wu9NuWtr23kgmXqki4Ppkeo4613QmprQ8SrQnSdpFeiiirMQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK3/AArof9rX/mSgfZoCC4I+8ew/xqZyUIuTNaNGVaoqcN2XfC3hY37Le3yEWoOUQ/8ALT/63869GQBVCqAAOAB2pigIoVQAo4AFPFeFiKkqsrs+7wOEp4Snyw36vuPpaYDTq4pI9KLFpaSlrMsKkjqOpI6I7ilsWo6tx1Vjq3HXXTPOqlmOrUYqtHVpK64Hm1SwlZ2v+F9N8S2D299Apk24jmA+eM+oNaKVZSuqGh51VJqzPnLxX4D1bwq7Syr9osMqBdIMDJ7EZyOfw6euK5avrie0gvbWS2uYklhlUq6OMhga8S+IPwyfQ1/tPRI5JdPwBLDks0J9fUqf0+nTtjK+549ajy6x2PNKKKKs5wooooAKKK6nw94B1vxAyukBtrUnmeYYGOOg6nrmmk3oiJzjBXk7HLUV7ZpHwe0m2UNqdzNeSFSGVD5aZzwRjnp7101r4C8MWlusK6PbSBc/NMu9jznknk1qqEnuccswpLa7Pm2ivpWbwN4YnheI6LaIGGNyRhWH0PasO9+EPhy4iVbY3NowOSySFsj0+bNDoSCOYU3umjwaiu78R/CzWdGV7iy/0+2GSfLGHUcnkd+B2/KuGdGjdkdSrqSGVhgg+hrJxcdzshUjUV4u42iiikWPiiknmSKJC8jnCqByTXr+l6fFpenxWkOSqDlj1JPU1w/gfTWn1F79gRHbjap9XIx+g/mK9CzXFiXzPlPpcloKEHWe729B4NKDTKUGuGUD34yJAacDUYNc54l8VJo4+zWuyS9OCQeVjHv7n0/H0ziqEpy5Yjq4qnQg6lR2Rsanren6Qmbu4VXxlYxyx/D8Otcdf/EK5clbC1SJcnDyncSPoOh/E1yFzdT3ly9xcSNJK5yzN3qKvRo5dShrPVny+Lz7EVXal7sfx/r0NO58Ravdspl1CfKjA2Ns/wDQcUyHXdVglWWPUbncpyN0hYfkeDWfRXYqUErKKPIeJrN8zm7+rOw034i6rZ4W7jivEGck/Ix/EcfpXfaB410jWSkQm+z3LYHkzcEnjoeh57dfavEaKxnhKUtlY7KOa4inpJ8y8/8AM+nI+QKtJXgvhvx9qnh9fIcfbbTjEUrncgAwArc4HTjBHHGM17RoOv6d4gslubC4V/lBeIkb4yezDt0P1xxmuaVCVPfY9OnjKddaaPsbSCrKCoEFWUFaQRjUZMgqbYrqVZQykYIIyCKjQVMorpijhqM8h+JfwxEnna7oMOH5e5tUHX1dR/MfjXixBBIIwR1Br7NWvJviJ8J31Gd9W8OxIJ2yZ7UYUMf7y+/tWyOKcdbo8Lq7pekX2s3YtrC3eaXqQo6D1NaHh3wrqHiDWDYxxtEsR/0iR1wIhnBz79eK938PeG9O8N2ht7CMgucvI5yzH3Na06Tnr0PNxeNjQ91ayOe8J/DSx0Vo7vUCt1eqcr/cTj0713ygKoVQABwAO1MBp4rsUVFWR4U606suabuPFLTRTqY0KKdSCnCkUhQK5Xxb8P8AS/FEDy7BbagqERzoMDOc/MO46/ma6wCpAKTSaszanKUHeLPkzVtJvdE1KbT7+ExXERwQehHYg9wfWqVfS3jzwdD4r0VxHEn9pwrm2kJ2/VSfQ/z/ABr5vurWeyupbW5iaKeJiro4wVI7GuOpDlZ7eHrqrHzPSfCdp9k8PW+U2PNmVuc5z0P/AHztrbzUNvCltbRQR52RIEXPoBgVLXnyV3c+7ox9nTjBdEOzS5pmaXNZuBuplXVdTi0nT5LuUZ28KoOCxPQV5Jc3M15cyXFxIZJZDlmPeuq8d3xkureyVjtjXzGGeCTwPxGD+dchXRQpqKv1Z81m2KdWr7NbR/MKKKK6DyQooooAKKKKACrulavfaJfLe6fcNDOoK5HIIPYg8EfX0qlRQ1cabTuj6D8GePLDxLHHbSkQalt+eI9HI6lT/Su4QV8kQTy2txHPBI0csbBkdTgg17t4F+JVprUcGn6o4h1I/KGPCy+/sawdO2qO+niedWnuekJU61CoqdRVxFNkqiia4jtojJIcDsPWori5jtIi8h+g7mudubuS6lLueOw7CuqlTcteh42Px0aC5VrIWV1knkkVAm9ixA9TQDUQNPBrstY+WlJybk+pKDUgqEGpFNBUWSinVE0qRIXkdUQdWY4ArhPEPxW0nSw0Omj7fcDuDiMH3PfvUyko7nVSpTqO0Vc9CFSKK8p0b4y208yRatYG3DPjzYW3Kox1IPPWvUrC7ttRs4ru0mSaCQbldTkEUozUtjadCdN++iwBUgFKFpwFMEhAK8O+Mvhf7HqUWvWsWIbn5J9q8LIOhOB39Sck17piub8d6K+v+D76yhtzPclQ8CBtuXB45yB69aipHmidFCfJNM4OikorybH6cLRSUUWC55Z4jmS48QXkkZJXft5HcAA/qKy60Ndtzba5eRlgx8wtkf7Xzf1rProWx8fXu6sr73YUUUUzIKKKKACiiigAooooAKVWZGDKxVgcgg4INJRQB7Z8O/if9se00PWA7XLt5cVzxhhjgN7+9esXN3HZw73PPZe5r5u8FeD5NWnTULwNHZxsGQDgyEentXshldwodi20YGTnArelh3LV7HLicx9mnCOrLc91JdSmSQ/QelMBqEGng12JW0R83Ubk3KW5MDTwahBp4NBi0TKao6zr2n+H7H7XqM4jjLBVAGWY+gHet7S9Le8YSSArCP8Ax6qPj74bWXjSxgEUv2O+tuIpsbl2k8qy9/8AGs5ystD0MLg3UtKeiPn7xZ451HxNcyxiR4NOJGy2B6gZwW9Tz9Pyrlq1Ne8O6p4b1GWx1S0eGRHKh8HY+MHKt0IwQfxrLrhk23qfQ04RhHlgtAr1v4Ja7Kt/daE+5onQ3EZ/uEYDfnkfrXklem/BPSprnxVPqHl5t7aAqWOR87EYx69P1FVTvzKxGISdN3Pe8UuKfijFdh5FhmKXFLijFAWPGUkSSNZI2DIwBVgcgg96dWX4duPtPh+yfbtxH5eM5+78uf0zWnXl8p+mwqc8FLuFFJmkzVKIOR5/40s/I1dbhR8twmSc9WHB/TFc3XpviLSzqumMkYHnxnfGTx9RXmVXax85j6XJWb6MKKKKDiCiiigAooooAKKKACTgDJoAK7fwr4Ha/WK+1LKW5O5YccuPf2q14W8FIEivtUU78hkgPb03f4V6EhAAA4Arso4f7Uzkr1mlyxJ4USGNY41CIowqjoBU6mqymplNdVjyJxLCmng1ApqQGkc8okwNbekaQ10RNMCIh0H96o9F0c3e24n4hB4X+9/9autRQqhVAAHAArKc+iOzC4Pm9+ewqKqKFUAKOABThQKUVmj0mZPiHw1pfinTDYatbCaHcGUg4ZD6g9q8Q8S/AfVLSVpdBuUvIME+XKdrrgfr7V9DUhqZQUtxqbjsfMehfBbxNqUkEmoRJYWzN+88xh5igH+779q9y8L+E7Dwjo66fYBmBO6SVvvSN6mulNRsKcYKOxnVnKejKpWmEVYK1GVrQ5nEixWV4k1f+wPD17qohExto94jLbd3tnBxWwRXj3xv8RxR2Vt4ehKNLIwnn6EoB90deCevI6VM5cquOnDmmkcD4H1BV8/T3wCx81D68AEfoP1rs815HY3kmn3sV1FjfGcgHv2I/KvVra4juraOeI5SRQwNcaVz7PL6/NT5HuvyJaTNGaaTWkYna5Ck1xnibw7K1w9/ZIZA5zJEo5B9QB1z375/TsSaaTW6pKSscmIjGrHlkeRUV3ur+Gba/LTQYguGJZiB8rfUdvrXKXmhajZE77dnX+/H8w/xrGdCcemh41SjKDM2iiisTIKKu2mkahesogtJWDDIYrhSPqeK6jTPA4DCTUptwB/1UR4P1P8Ah+dawoznsh2OUsdNvNSl8qzt3lYdcdB9SeB0PWvSfDnhS20fZcynzr3bgsfuoe+0fpn+WcVqWdrBZW6QW0SxxqMBV/z1q4prupYaMNXqzKo3sTqamU1XU1KprdnFNFhTUqmq6mpVNSzlnEsKawPE3jG08ORrHs8+7cZWINjaPU/4VU8VeLoNAtjDAVkv3HyJ1Ce5/wAK8gurqe9uXuLiRpJXOWZjya5a1bl0juaYfCe0fNPY9N8A/Fu+0rWpIdenefTbqTJJ5+zN0yo/u+o/HrnP0Jpuo2erWMV7YXCXFtKMpIh4NfFFdh4I+Ieq+C5ykB8+xkYGW3c8e5X0Ncsaltz05U1b3T6zpwrnfC/jPRvFtn5+m3ILg7Whf5XU49O9dFXQtTnYU006mmmSxhphFPNNNBDIiKYRUpFZGv8AiLSvDdibvVbtIIznYD95yBnCjueKdyLX2IfEmvWvhnQrnVbsbkhX5YwwBkY9FGf84zXylrutXXiDWrnU7xyZZ3zgkkKOyjPYVseN/G9/4z1UzSlobGIkW9sDwg9T6se5rlq5ak+Z6HbRpciu9wrqvCeuLbN/Z9y+I2P7knopPUfjXK0AkEEHBHeoTszrpVZUp80T2DNITXNeHfEYvFW0u2AuAMKx6OP8a6QmuumlJXR7ca0akeaIhNNNKaSuqESJMQ0nWg0orpijmmxslla3ShZ7eKQDkB1BxRBpljbSeZDZwRvjG5UANWEp9JxV72OWW4qgDgDAqQVGKeKCJEqmpVNQLUqmkzmmidTUimoVNLLPFbQvNM6pGgyzMcACpZzTRaU1yXi3xkumxNY6dIrXjD5pByIh/jWH4i8cvdLJaaWSkLDDT8hj649PrXE1w1sR9mA6eHu7yJJ55bq4knnkaSWRizM3Umo6KK4jrCiiigCzp+o3mlXkd5Y3ElvcR/dkQ4Ir2Lwj8dpYFjtPEtuZUzj7XCPmHI5Ze+BnpzXilFUpNbEyinufX+j/ABA8La75C2WsWxmm3bIJG2ScZzlTyOAT9K3o7q3mbbFPFI2M4RwTXxFVi0v7zT5Gksrue2dhgtDIUJHpkGtFW7oydHsz7Xd1jUu7BVHUscAVlal4l0TSIBNf6pawRscKWlHJxnAr5Gm1/WbiF4Z9Wv5YnGGR7l2Vh6EE81nU3W7ISod2e9+J/jrYQwmHw7bPczMvE86lEQnP8J5JBx7e9eM694j1XxNffa9Vu3nkGQinhYwTnCjsP/rVlUVlKbluaxpxjsFFFFSWFFFFACqxVgykgg5BHaus0jxaflg1H2CyqP8A0KuSoq4TcHdGlOpKm7xPWlYOoZSCD0IorzTT9YvdNb9xLlP+eb8r+VdRY+LrOZMXatbuB1ALKfy5rvpYiEt9DsjiYy30Oipy1DFNFcIJIZEkQ9GRgRU613LYJMkWn01adSMGLThTaGkSNGeRlVFGWZjgAetIhkwqRa52+8W6VZBgk32iUdFi5B4/vdMVymoeMtTvVaOIraxk/wDLP72PTd/hiuepiKcOtzGSudvqninTdJ3I8vmzj/llHyR9fT8a891jxDf61J+/k2QjgQoSF69/U1lMxZizElicknvSVwVa8qmnQlRSCiiisCgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAfFLJDIJIpGjcdGQ4I/Gu68I3E1zpszzzSSsJiAXYsQNo9aKK78EbUjpBTqKK9AtmT4nmlt9AuJIZHjkBXDIxBHzDuK83nuZ7pw9xNJK4GA0jFjj05oorgxhlMiooorzzMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//ZAHWWGjwAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjAtMDctMzBUMTI6MzI6MDIrMDA6MDDi40UVAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIwLTA3LTMwVDEyOjMyOjAyKzAwOjAwk779qQAAABp0RVh0ZXhpZjpCaXRzUGVyU2FtcGxlADgsIDgsIDgS7T4nAAAAEXRFWHRleGlmOkNvbG9yU3BhY2UAMQ+bAkkAAAAhdEVYdGV4aWY6RGF0ZVRpbWUAMjAyMDowNzowOSAxNjoxNDoxOWHSjSwAAAATdEVYdGV4aWY6RXhpZk9mZnNldAAxNzjc1lZ+AAAAFHRFWHRleGlmOkltYWdlTGVuZ3RoADE0M4D8vbsAAAATdEVYdGV4aWY6SW1hZ2VXaWR0aAAyNTDR1HOUAAAAGnRFWHRleGlmOlNvZnR3YXJlAEdJTVAgMi4xMC4yMAYQhsIAAAAkdEVYdGV4aWY6dGh1bWJuYWlsOkJpdHNQZXJTYW1wbGUAOCwgOCwgOCAb9FMAAAAcdEVYdGV4aWY6dGh1bWJuYWlsOkNvbXByZXNzaW9uADb5ZXBXAAAAHnRFWHRleGlmOnRodW1ibmFpbDpJbWFnZUxlbmd0aAAxNDZLLb8bAAAAHXRFWHRleGlmOnRodW1ibmFpbDpJbWFnZVdpZHRoADI1NogG+hQAAAAodEVYdGV4aWY6dGh1bWJuYWlsOkpQRUdJbnRlcmNoYW5nZUZvcm1hdAAzMDSsR89oAAAAL3RFWHRleGlmOnRodW1ibmFpbDpKUEVHSW50ZXJjaGFuZ2VGb3JtYXRMZW5ndGgANTMyOY6ptrMAAAAqdEVYdGV4aWY6dGh1bWJuYWlsOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24ANhIVihoAAAAgdEVYdGV4aWY6dGh1bWJuYWlsOlNhbXBsZXNQZXJQaXhlbAAz4dfNWgAAABt0RVh0aWNjOmNvcHlyaWdodABQdWJsaWMgRG9tYWlutpExWwAAACJ0RVh0aWNjOmRlc2NyaXB0aW9uAEdJTVAgYnVpbHQtaW4gc1JHQkxnQRMAAAAVdEVYdGljYzptYW51ZmFjdHVyZXIAR0lNUEyekMoAAAAOdEVYdGljYzptb2RlbABzUkdCW2BJQwAAAABJRU5ErkJggg== -) + +![embed](data:image/png;base64,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WZjgAetIhkwqRa52+8W6VZBgk32iUdFi5B4/vdMVymoeMtTvVaOIraxk/wDLP72PTd/hiuepiKcOtzGSudvqninTdJ3I8vmzj/llHyR9fT8a891jxDf61J+/k2QjgQoSF69/U1lMxZizElicknvSVwVa8qmnQlRSCiiisCgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAfFLJDIJIpGjcdGQ4I/Gu68I3E1zpszzzSSsJiAXYsQNo9aKK78EbUjpBTqKK9AtmT4nmlt9AuJIZHjkBXDIxBHzDuK83nuZ7pw9xNJK4GA0jFjj05oorgxhlMiooorzzMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//ZAHWWGjwAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjAtMDctMzBUMTI6MzI6MDIrMDA6MDDi40UVAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIwLTA3LTMwVDEyOjMyOjAyKzAwOjAwk779qQAAABp0RVh0ZXhpZjpCaXRzUGVyU2FtcGxlADgsIDgsIDgS7T4nAAAAEXRFWHRleGlmOkNvbG9yU3BhY2UAMQ+bAkkAAAAhdEVYdGV4aWY6RGF0ZVRpbWUAMjAyMDowNzowOSAxNjoxNDoxOWHSjSwAAAATdEVYdGV4aWY6RXhpZk9mZnNldAAxNzjc1lZ+AAAAFHRFWHRleGlmOkltYWdlTGVuZ3RoADE0M4D8vbsAAAATdEVYdGV4aWY6SW1hZ2VXaWR0aAAyNTDR1HOUAAAAGnRFWHRleGlmOlNvZnR3YXJlAEdJTVAgMi4xMC4yMAYQhsIAAAAkdEVYdGV4aWY6dGh1bWJuYWlsOkJpdHNQZXJTYW1wbGUAOCwgOCwgOCAb9FMAAAAcdEVYdGV4aWY6dGh1bWJuYWlsOkNvbXByZXNzaW9uADb5ZXBXAAAAHnRFWHRleGlmOnRodW1ibmFpbDpJbWFnZUxlbmd0aAAxNDZLLb8bAAAAHXRFWHRleGlmOnRodW1ibmFpbDpJbWFnZVdpZHRoADI1NogG+hQAAAAodEVYdGV4aWY6dGh1bWJuYWlsOkpQRUdJbnRlcmNoYW5nZUZvcm1hdAAzMDSsR89oAAAAL3RFWHRleGlmOnRodW1ibmFpbDpKUEVHSW50ZXJjaGFuZ2VGb3JtYXRMZW5ndGgANTMyOY6ptrMAAAAqdEVYdGV4aWY6dGh1bWJuYWlsOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24ANhIVihoAAAAgdEVYdGV4aWY6dGh1bWJuYWlsOlNhbXBsZXNQZXJQaXhlbAAz4dfNWgAAABt0RVh0aWNjOmNvcHlyaWdodABQdWJsaWMgRG9tYWlutpExWwAAACJ0RVh0aWNjOmRlc2NyaXB0aW9uAEdJTVAgYnVpbHQtaW4gc1JHQkxnQRMAAAAVdEVYdGljYzptYW51ZmFjdHVyZXIAR0lNUEyekMoAAAAOdEVYdGljYzptb2RlbABzUkdCW2BJQwAAAABJRU5ErkJggg==) diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml deleted file mode 100644 index 4bf120b8c..000000000 --- a/bitbucket-pipelines.yml +++ /dev/null @@ -1,26 +0,0 @@ -# This is an example Starter pipeline configuration -# Use a skeleton to build, test and deploy using manual and parallel steps -# ----- -# You can specify a custom docker image from Docker Hub as your build environment. - -# This is a sample build configuration for JavaScript. -# Check our guides at https://confluence.atlassian.com/x/14UWN for more examples. -# Only use spaces to indent your .yml configuration. -# ----- -# You can specify a custom docker image from Docker Hub as your build environment. -image: node:10.15.3 - -pipelines: - pull-requests: - '**': #this runs as default for any branch not elsewhere defined - - step: - caches: - - node - script: # Modify the commands below to build your repository. - - npm install - - echo "# My first CML report" > report.md - - echo - "![](https://static.boredpanda.com/blog/wp-content/uploads/2020/07/funny-expressive-dog-corgi-genthecorgi-1-1-5f0ea719ea38a__700.jpg)" - >> report.md - - echo "So much data viz" >> report.md - - node bin/cml-send-comment report.md diff --git a/package.json b/package.json index fa4e60efd..5d19b1802 100644 --- a/package.json +++ b/package.json @@ -28,10 +28,55 @@ "dvc" ], "license": "Apache-2.0", - "main": "index.js", "engines": { "node": ">=16.0.0" }, + "eslintConfig": { + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "jest": true + }, + "extends": [ + "standard", + "prettier" + ], + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parserOptions": { + "ecmaVersion": 2020 + }, + "ignorePatterns": [ + "assets/", + "dist/", + "node_modules/" + ], + "rules": { + "camelcase": [ + 1, + { + "properties": "never" + } + ], + "prettier/prettier": "error" + }, + "plugins": [ + "prettier" + ] + }, + "prettier": { + "arrowParens": "always", + "singleQuote": true, + "trailingComma": "none", + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "proseWrap": "always" + }, + "main": "index.js", "bin": { "cml": "bin/cml.js", "cml-send-github-check": "bin/legacy/link.js", diff --git a/prettier.config.js b/prettier.config.js deleted file mode 100644 index ac512f69b..000000000 --- a/prettier.config.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - arrowParens: 'always', - singleQuote: true, - trailingComma: 'none', - printWidth: 80, - tabWidth: 2, - useTabs: false, - proseWrap: 'always' -};