diff --git a/.circleci/config.yml b/.circleci/config.yml index ed5267d10b..fcb289117e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -28,12 +28,6 @@ commands: git reset --hard origin/master git checkout - - - run: - name: apt dependencies - command: | - sudo apt-get update - sudo apt-get install pcregrep - # Download cached dependencies. - restore_cache: keys: @@ -58,8 +52,6 @@ jobs: - run: yarn lint-css - run: yarn lint-ts - run: yarn format-check - - run: yarn link-check-diff - - run: yarn link-check-exclude test_full: <<: *defaults @@ -69,8 +61,6 @@ jobs: - run: yarn lint-css - run: yarn lint-ts - run: yarn format-check - - run: yarn link-check - - run: yarn link-check-exclude workflows: version: 2 diff --git a/.github/workflows/link-check-all.yml b/.github/workflows/link-check-all.yml new file mode 100644 index 0000000000..a92183e372 --- /dev/null +++ b/.github/workflows/link-check-all.yml @@ -0,0 +1,19 @@ +name: Check all links in the repository +on: + workflow_dispatch: + schedule: + - cron: '0 0 * * *' + +jobs: + run: + name: Link Check All + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Run Link Check + uses: 'iterative/link-check.action@v0.6' + with: + configFile: 'config/link-check/config.yml' + output: consoleLog diff --git a/.github/workflows/link-check-deploy.yml b/.github/workflows/link-check-deploy.yml new file mode 100644 index 0000000000..b8c5095cbe --- /dev/null +++ b/.github/workflows/link-check-deploy.yml @@ -0,0 +1,50 @@ +name: Check new links against deployment +# This workflow "triggers" and skips on deployment because GitHub Actions / +# Checks refuses to show the check on deployment_status +on: + - deployment + - deployment_status + +jobs: + run: + name: Initialize + runs-on: ubuntu-latest + if: github.event.deployment_status.state == 'success' + + steps: + - uses: actions/checkout@v2 + + - id: build_check + uses: LouisBrunner/checks-action@v1.0.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: Report + status: queued + + - name: Run Link Check + id: check + uses: 'iterative/link-check.action@v0.6' + with: + diff: true + configFile: 'config/link-check/config.yml' + rootURL: '${{ github.event.deployment.payload.web_url }}' + output: checksAction + + - uses: LouisBrunner/checks-action@v1.0.0 + if: ${{ success() }} + with: + token: ${{ secrets.GITHUB_TOKEN }} + check_id: ${{ steps.build_check.outputs.check_id }} + status: completed + conclusion: ${{ steps.check.outputs.conclusion }} + output: ${{ steps.check.outputs.output }} + + - uses: LouisBrunner/checks-action@v1.0.0 + if: ${{ failure() }} + with: + token: ${{ secrets.GITHUB_TOKEN }} + check_id: ${{ steps.build_check.outputs.check_id }} + status: completed + conclusion: failure + output: >- + {"summary": "The Link Check script had an error!"} diff --git a/config/link-check/config.yml b/config/link-check/config.yml new file mode 100644 index 0000000000..8fa1f6072d --- /dev/null +++ b/config/link-check/config.yml @@ -0,0 +1,12 @@ +rootURL: https://dvc.org +fileIncludePatterns: '{.github,content,src}/**/*!(.test).{css,js,jsx,md,tsx,ts,json}' +fileExcludePatternFile: config/link-check/excluded-files.yml +linkExcludePatternFile: config/link-check/excluded-links.yml +linkOptions: + '*.wikipedia.org': + minTime: 2000 + maxConcurrent: 1 + + '*.github.com': + minTime: 1000 + maxConcurrent: 1 diff --git a/config/link-check/excluded-files.yml b/config/link-check/excluded-files.yml new file mode 100644 index 0000000000..eb065074ae --- /dev/null +++ b/config/link-check/excluded-files.yml @@ -0,0 +1,4 @@ +- 'src/consts.js' +- '**/*.test.js' +- 'src/server/**/*' +- '.github/workflows/**/*' diff --git a/config/link-check/excluded-links.yml b/config/link-check/excluded-links.yml new file mode 100644 index 0000000000..584c8672cd --- /dev/null +++ b/config/link-check/excluded-links.yml @@ -0,0 +1,17 @@ +- 'http://localhost:8000**' +- 'http://millionsongdataset.com/pages/getting-dataset/#subset' +- 'https://marketplace.visualstudio.com/items?itemName=stkb.rewrap' +- 'https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml' +- 'https://remote.dvc.org/get-started' +- 'https://sweedom.us10.list-manage.com/subscribe/post?u=a08bf93caae4063c4e6a351f6&id=24c0ecc49a' +- 'https://www.meetup.com/San-Francisco-Machine-Learning-Meetup/events/264846847/' +- 'https://www.reddit.com/r/MachineLearning/comments/bx0apm/d_how_do_you_manage_your_machine_learning/' +- 'https://www.amazon.com/DevOps-Handbook-World-Class-Reliability-Organizations-ebook/dp/B01M9ASFQ3' +- '**linkedin.com/in/**' +- 'link' +- '/img/.gif' +- '/uploads/images/2020-02-10/image.png' +- 'https://portal.aws.amazon.com/gp/aws/developer/registration/index.html' +- 'https://github.com/iterative/dvc/releases/download/' +- 'https://www.kaggle.com/kurianbenoy/introduction-to-data-version-control-dvc' +- 'https://timheuer.com/blog/skipping-ci-github-actions-workflows/' diff --git a/content/authors/marcel_rd.md b/content/authors/marcel_rd.md index 95ae8898f5..66ddada930 100644 --- a/content/authors/marcel_rd.md +++ b/content/authors/marcel_rd.md @@ -5,7 +5,7 @@ links: - https://twitter.com/mribeirodantas --- -Early Stage Researcher at [Institut Curie](https://intstitut-curie.org) with +Early Stage Researcher at [Institut Curie](https://institut-curie.org/) with over 10 years of experience in the field of biomedical engineering and health informatics. Areas of interest include Causal Inference, Artificial Intelligence, and Data Science. Degrees in Computer and Automation Engineering @@ -13,4 +13,4 @@ Intelligence, and Data Science. Degrees in Computer and Automation Engineering Ph.D. at EDITE (Sorbonne Université). Twitter: [@mribeirodantas](https://twitter.com/mribeirodantas) Website: -[mribeirodantas.me](https://mribeirodantas.me) +[mribeirodantas.me](http://mribeirodantas.me) diff --git a/content/blog/2020-01-17-january-20-dvc-heartbeat.md b/content/blog/2020-01-17-january-20-dvc-heartbeat.md index 1cee3dab2d..b6c99c1c36 100644 --- a/content/blog/2020-01-17-january-20-dvc-heartbeat.md +++ b/content/blog/2020-01-17-january-20-dvc-heartbeat.md @@ -37,8 +37,8 @@ biggest contributors, [Vít Novotný](https://github.com/witiko), and ![](/uploads/images/2020-01-17/odd_with_deevee.png)_Vera (center, flashing a peace sign) thanked us with this lovely picture of DeeVee and her team, -[Odd Industries](https://odd.co/en/). They are making some extremely neat tools -for construction teams using computer vision._ +[Odd Industries](https://odd.co). They are making some extremely neat tools for +construction teams using computer vision._ **We were at PyData LA!** Our fearless leader [Dmitry gave a talk](https://www.youtube.com/watch?v=7Wsd6V0k4Oc) and we set up diff --git a/content/blog/2020-04-30-gsod-ideas-2020.md b/content/blog/2020-04-30-gsod-ideas-2020.md index f948c9286f..651be89089 100644 --- a/content/blog/2020-04-30-gsod-ideas-2020.md +++ b/content/blog/2020-04-30-gsod-ideas-2020.md @@ -190,7 +190,7 @@ technical writer, [Jorge](https://github.com/jorgeorpinel). ![](/uploads/images/2020-04-30/Discord_user_video_tutorials.png) _Video tutorials are a common request by users in our [chat](https://dvc.org/chat)._ - **Mentor**: [Elle](https://github.com/andronovhopf) + **Mentor**: [Elle](https://github.com/elleobrien) _Difficulty rating:_ Beginner-Medium

diff --git a/content/blog/2020-05-08-dvc-ambassador-program-announcement.md b/content/blog/2020-05-08-dvc-ambassador-program-announcement.md index 1358cde119..0ddd5fa1e7 100644 --- a/content/blog/2020-05-08-dvc-ambassador-program-announcement.md +++ b/content/blog/2020-05-08-dvc-ambassador-program-announcement.md @@ -179,7 +179,7 @@ a goldmine for ways to pitch in. For example: ![](/uploads/images/2020-01-17/odd_with_deevee.png 'Vera and team =500')_Vera (center, flashing a peace sign) thanked us with this lovely picture of DeeVee -and her team, [Odd Industries](https://odd.co/en/)._ +and her team, [Odd Industries](https://odd.co)._ If any of this sounds fun to you, please be in touch over [email](mailto:info@dvc.org) (and you can also reach us on diff --git a/content/blog/2020-06-08-june-20-dvc-heartbeat.md b/content/blog/2020-06-08-june-20-dvc-heartbeat.md index d81fc6a61f..4e3ebf043c 100644 --- a/content/blog/2020-06-08-june-20-dvc-heartbeat.md +++ b/content/blog/2020-06-08-june-20-dvc-heartbeat.md @@ -79,8 +79,8 @@ platform. It's awesome to know our approach is resonating with teams at the intersection of ML and software development. Thanks, ThoughtWorks! Last up in company news: you might recall that in early May, we hosted an online -meetup. [Marcel Ribeiro-Dantas](mribeirodantas.me) hosted guest talks from -[Elizabeth Hutton](https://github.com/ehutt) and +meetup. [Marcel Ribeiro-Dantas](http://mribeirodantas.me) hosted guest talks +from [Elizabeth Hutton](https://github.com/ehutt) and [Dean Pleban](https://twitter.com/DeanPlbn)- we heard about constructing a new COVID-19 dataset, using DVC with transformer language models, and building custom cloud infrastructure for MLOps. There's also Q&A with the DVC team, where diff --git a/content/blog/2020-07-16-devops-for-data-scientists.md b/content/blog/2020-07-16-devops-for-data-scientists.md index 078bf8be92..3dfe74c1db 100644 --- a/content/blog/2020-07-16-devops-for-data-scientists.md +++ b/content/blog/2020-07-16-devops-for-data-scientists.md @@ -127,7 +127,7 @@ Git refresher? When a feature branch passes the automated tests, it becomes a candidate to be merged into the master branch. -![](/static/uploads/2020-07-16/basic_ci_system.png) _Here's what continuous +![](/uploads/images/2020-07-16/basic_ci_system.png) _Here's what continuous integration looks like in software development._ With this setup, we have automation — code changes trigger an automatic build @@ -145,7 +145,7 @@ matrix or loss plot. So pass/fail tests won’t cut it for feedback. Understandi if a model is improved requires some domain knowledge about the problem at hand, so test results need to be reported in an efficient and human-interpretable way. -![](/static/uploads/2020-07-16/ci_for_data_system.png) _Here's what continuous +![](/uploads/images/2020-07-16/ci_for_data_system.png) _Here's what continuous integration might look like in a machine learning project. Inspected by Data Science Doggy._ @@ -183,7 +183,7 @@ $ git push origin experiment 4. GitHub returns a notification if the functions ran successfully or not. -![](/static/uploads/2020-07-16/run_notification.png) _Find this in the Actions +![](/uploads/images/2020-07-16/run_notification.png) _Find this in the Actions tab of your GitHub repository._ That’s it! What’s really neat here is that you’re using GitHub’s computers to @@ -225,7 +225,7 @@ As we alluded to earlier, automatic training is pretty cool and all, but it’s important to have the results in a format that’s easy to understand. Currently, GitHub Actions gives you access to the runner’s logs, which are plain text. -![](/static/uploads/2020-07-16/github_actions_log.png) _An example printout from +![](/uploads/images/2020-07-16/github_actions_log.png) _An example printout from a GitHub Actions log._ But understanding your model’s performance is tricky. Models and data are high @@ -243,7 +243,7 @@ we’ve built some functions to give more detailed reports than a pass/fail notification. CML helps you put images and tables in the reports, like this confusion matrix generated by SciKit-learn: -![](/static/uploads/2020-07-16/cml_basic_report.png) _This report appears when +![](/uploads/images/2020-07-16/cml_basic_report.png) _This report appears when you make a Pull Request in GitHub!_ To make this report, our GitHub Action executed a Python model training script, @@ -315,7 +315,7 @@ For example, I made a project using GitHub Actions to deploy an [EC2 GPU and then train a neural style transfer model](https://github.com/iterative/cml_cloud_case). Here’s my CML report: -![](/static/uploads/2020-07-16/cloud_report.png) _Training in the cloud! +![](/uploads/images/2020-07-16/cloud_report.png) _Training in the cloud! Weeeeeee!_ You can also use your own Docker containers, so you can closely emulate the diff --git a/content/blog/2020-07-24-first-mlops-tutorial.md b/content/blog/2020-07-24-first-mlops-tutorial.md index 11c1f8bd00..2555e717c3 100644 --- a/content/blog/2020-07-24-first-mlops-tutorial.md +++ b/content/blog/2020-07-24-first-mlops-tutorial.md @@ -19,7 +19,7 @@ tags: - CML --- -Earlier this month, we launched [CML](https;//cml.dev), our latest open-source +Earlier this month, we launched [CML](https://cml.dev), our latest open-source project in the MLOps space. We think it's a step towards establishing powerful DevOps practices (like continuous integration) as a regular fixture of machine learning and data science projects. But there are plenty of challenges ahead, diff --git a/content/blog/2020-08-07-cml-self-hosted-runners-on-demand-with-gpus.md b/content/blog/2020-08-07-cml-self-hosted-runners-on-demand-with-gpus.md index c00adb406d..3b15a31ae9 100644 --- a/content/blog/2020-08-07-cml-self-hosted-runners-on-demand-with-gpus.md +++ b/content/blog/2020-08-07-cml-self-hosted-runners-on-demand-with-gpus.md @@ -45,7 +45,7 @@ Here are some benefits of using CML with a self-hosted runner: 3. **Security.** If your repo is public your runners could be accesed by anyone that could add - [scripts that exploits your machine](https://docs.GitHub.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories). + [scripts that exploits your machine](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories). With the containerised runner you are restricting the access to your real machine. @@ -163,7 +163,7 @@ running with CML. There are still some limitations to be solved at this stage: - GitHub Actions - [can’t run a workflow longer than 72 hours](https://docs.GitHub.com/en/actions/getting-started-with-GitHub-actions/about-GitHub-actions#usage-limits). + [can’t run a workflow longer than 72 hours](https://docs.github.com/en/actions/getting-started-with-github-actions/about-github-actions#usage-limits). - Self-hosted runners [don’t behave well when they disconnect from the repo](https://GitLab.com/GitLab-org/GitLab/-/issues/229851#note_390371734), diff --git a/package.json b/package.json index 884f641c51..fbed38b0f0 100644 --- a/package.json +++ b/package.json @@ -16,9 +16,10 @@ "format": "prettier --write", "lint-ts": "tsc --noEmit --skipLibCheck && eslint --ext .json,.js,.ts,.tsx .", "lint-css": "stylelint \"src/**/*.css\"", - "link-check": "./scripts/link-check-git-all.sh", - "link-check-diff": "./scripts/link-check-git-diff.sh", - "link-check-exclude": "./scripts/exclude-links-check.sh" + "link-check": "repo-link-check -c config/link-check/config.yml", + "link-check-diff": "repo-link-check -c config/link-check/config.yml -d", + "link-check-dev-server": "repo-link-check -c config/link-check/config.yml -r http://localhost:3000", + "link-check-exclude": "repo-link-check -c config/link-check/config.yml --unused-patterns-only" }, "repository": { "type": "git", @@ -75,6 +76,7 @@ "react-slick": "^0.25.2", "react-use": "^14.0.0", "rehype-react": "^5.0.1", + "repo-link-check": "^0.6.0", "reset-css": "^5.0.1", "s3-client": "^4.4.2", "scroll": "^3.0.1", diff --git a/scripts/exclude-links-check.sh b/scripts/exclude-links-check.sh deleted file mode 100755 index bf18ba9d74..0000000000 --- a/scripts/exclude-links-check.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -# Checks that `exclude-links.txt` contains only used links. -set -euo pipefail - -source "$(dirname "$0")"/utils.sh - -missing="$( - urlfinder "$base_url" $(git ls-files '*.css' '*.js' '*.jsx' '*.md' '*.tsx' '*.ts' '*.json' ':!redirects-list.json' ':!*.test.js') \ - | sed 's/#.*//g' | sort -u \ - | comm -13 - <(echo "$exclude" | sort -u) -)" - -if [[ -n "$missing" ]]; then - echo "ERROR:Exclusions not found in codebase:" >&2 - echo "$missing" | sed 's/^/ /' >&2 - exit 1 -fi diff --git a/scripts/exclude-links.txt b/scripts/exclude-links.txt deleted file mode 100644 index 8af1631550..0000000000 --- a/scripts/exclude-links.txt +++ /dev/null @@ -1,43 +0,0 @@ -http://127.0.0.1:10000/devstoreaccount1; -http://localhost:8000/ -http://millionsongdataset.com/pages/getting-dataset/ -https://$ -http://s3-external-1.amazonaws.com/bucket/path -https://accounts.google.com/o/oauth2/auth -https://api.cloudflare.com/client/v4/zones/$ -https://circleci.com/gh/iterative/dvc.org -https://discuss.$ -https://drive.google.com/drive/folders/0AIac4JZqHhKmUk9PDA -https://dvc.org/img/.gif -https://dvc.org/uploads/images/2020-02-10/image.png -https://example.com/data.txt -https://example.com/file.csv -https://example.com/path/to/data.csv -https://example.com/path/to/dir -https://example.com/path/to/file -https://github.com/example/project.git -https://github.com/example/registry -https://github.com/iterative/dvc.org/blob/master/content$ -https://github.com/iterative/dvc/releases/download/$ -https://github.com/user/proj -https://marketplace.visualstudio.com/items?itemName=stkb.rewrap -https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml -https://myendpoint.com -https://object-storage.example.com -https://remote.dvc.org/dataset-registry -https://remote.dvc.org/dataset-registry/a3/04afb96060aad90176268345e10355 -https://remote.dvc.org/get-started -https://s3.eu.cloud-object-storage.appdomain.cloud -https://sweedom.us10.list-manage.com/subscribe/post?u=a08bf93caae4063c4e6a351f6&id=24c0ecc49a -https://www.meetup.com/San-Francisco-Machine-Learning-Meetup/events/264846847/ -https://www.reddit.com/r/MachineLearning/comments/bx0apm/d_how_do_you_manage_your_machine_learning/ -https://www.youtube.com/embed/$ -http://user@example.com/path -http://www.reddit.com/r/MachineLearning -https://github.com/elle/myproject -https://towardsdatascience.com/why-git-and-how-to-use-git-as-a-data-scientist-4fa2d3bdc197 -https://towardsdatascience.com/understanding-auc-roc-curve-68b2303cc9c5 -https://www.amazon.com/DevOps-Handbook-World-Class-Reliability-Organizations-ebook/dp/B01M9ASFQ3 -https://asset.cml.dev -https://timheuer.com/blog/skipping-ci-github-actions-workflows/ - diff --git a/scripts/link-check-git-all.sh b/scripts/link-check-git-all.sh deleted file mode 100755 index d4231395d4..0000000000 --- a/scripts/link-check-git-all.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -source "$(dirname "$0")"/utils.sh -pushd "$repo" - -# can't do git ls-files since some may be untracked -( - find .github/ content/docs/ src/ \ - -name '*.css' -o -name '*.js' -o -name '*.jsx' -o -name '*.md' -o -name '*.tsx' -o \ - -name '*.ts' -o -name '*.json' - ls *.css *.js *.jsx *.md *.tsx *.ts *.json 2>/dev/null || : -) | grep -Ev '(package-lock\.json|redirects-list\.json|\.test\.js)$' \ - | xargs -n1 -P8 "$(dirname "$0")"/link-check.sh - -popd diff --git a/scripts/link-check-git-diff.sh b/scripts/link-check-git-diff.sh deleted file mode 100755 index 5376aeae7d..0000000000 --- a/scripts/link-check-git-diff.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -source "$(dirname "$0")"/utils.sh -pushd "$repo" - -differ="git diff $(git merge-base HEAD origin/master)" -changed="$($differ --name-only -- '*.css' '*.js' '*.jsx' '*.md' '*.tsx' '*.ts' '*.json' ':!redirects-list.json' ':!*.test.js')" - -[ -z "$changed" ] && exit 0 - -echo "$changed" | while read -r file ; do - # check whole file - # "$(dirname "$0")"/link-check.sh "$file" - # check just changed lines - echo -n "$file:" - "$(dirname "$0")"/link-check.sh <($differ -U0 -- "$file" | grep '^\+') -done - -popd diff --git a/scripts/link-check.sh b/scripts/link-check.sh deleted file mode 100755 index 4db2374667..0000000000 --- a/scripts/link-check.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash -# Check HTTP status codes of links in the given files. -# Success: 2xx, Errors: 4xx/5xx, Warnings: anything else. -# Redirects (3xx) are followed. -# Usage: -# link-check.sh [] -set -euo pipefail - -source "$(dirname "$0")"/utils.sh - -checker(){ # expects list of urls - errors=0 - for url in "$@"; do - status="$(curl -IL -A "$user_agent" -w '%{http_code}' -so /dev/null "$url")" - case "$status" in - 2??) - # success - ;; - 429) - # too many requests: treat as success - ;; - 999) - # linkedin denied code: treat as success - ;; - [45]??) - echo - echo " ERROR:$status:$url" >&2 - errors=$(($errors + 1)) - ;; - *) - echo - echo " WARNING:$status:$url" >&2 - ;; - esac - done - return $errors -} - -fails=0 -for file in "$@"; do - echo -n "$file:" - prev=$fails - checker $(urlfinder "$base_url" "$file" | sed 's/#.*//g' | sort -u \ - | comm -23 - <(echo "$exclude" | sort -u)) \ - || fails=$(($fails + 1)) - [ $prev -eq $fails ] && echo OK -done - -[ $fails -eq 0 ] || echo -e "ERROR:$fails failures\n---" >&2 -exit $fails diff --git a/scripts/utils.sh b/scripts/utils.sh deleted file mode 100644 index 85bd8efeb4..0000000000 --- a/scripts/utils.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -# Common utility functions and helpers for link-check. -# Defines: -# repo, base_url, exclude, user_agent, urlfinder() - -repo="$(dirname "$(realpath "$(dirname "$0")")")" -base_url="${CHECK_LINKS_RELATIVE_URL:-https://dvc.org}" -exclude="${CHECK_LINKS_EXCLUDE_LIST:-$(dirname "$0")/exclude-links.txt}" -[ -f "$exclude" ] && exclude="$(cat "$exclude")" -user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:74.0) Gecko/20100101 Firefox/74.0" - -urlfinder(){ # expects ... - base_url="$1" - content="$(cat "${@:2}")" # read once (could be file descriptors) - # explicit links not in markdown - echo "$content" | pcregrep -o '(?{}"'"'"'`]+' - # explicit links in markdown - echo "$content" | pcregrep -o '(?<=\])\(https?://[^[\]\s]+\)' | pcregrep -o '\((?:[^)(]*(?R)?)*+\)' | pcregrep -o '(?<=\().*(?=\))' - # relative links in markdown - echo "$content" | sed -nE 's/.*]\((\/[^)[:space:]]+).*/\1/p' | xargs -n1 -II echo ${base_url}I - # relative links in html - echo "$content" | sed -nE 's/.*href=["'"'"'](\/[^"'"'"']+)["'"'"'].*/\1/p' | xargs -n1 -II echo ${base_url}I -} diff --git a/yarn.lock b/yarn.lock index d1c2da03d6..26a4ff2de8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3480,6 +3480,11 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= +bottleneck@^2.19.5: + version "2.19.5" + resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== + bowser@^1.7.3: version "1.9.4" resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a" @@ -4324,6 +4329,11 @@ commander@^5.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== +commander@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc" + integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA== + commander@~2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -6531,6 +6541,18 @@ fast-glob@^3.0.3, fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" +fast-glob@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -10240,7 +10262,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.13.1: +js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.13.1, js-yaml@^3.14.0: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -10777,6 +10799,11 @@ lodash@^4.11.1, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.1 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== +lodash@^4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -14376,6 +14403,19 @@ replace-ext@^1.0.0: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== +repo-link-check@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/repo-link-check/-/repo-link-check-0.6.0.tgz#2ae67c44d725658beeaa3acf7d7de5e71175bbd1" + integrity sha512-7y05N70Nju6AQBWiYv/pXubn56dklS/Jfc5MDX4rED74DPMeqilKfBtjkV4kAg9cCfTwsnePPuuWgQGbN6cfRw== + dependencies: + bottleneck "^2.19.5" + commander "^6.1.0" + fast-glob "^3.2.4" + js-yaml "^3.14.0" + lodash "^4.17.20" + micromatch "^4.0.2" + node-fetch "^2.6.0" + request-promise-core@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9"