mirror of
https://github.com/ipfs/awesome-ipfs.git
synced 2024-11-20 11:28:35 -05:00
feat: more automated awesome-ipfs PRs (#429)
* chore: ignore files created by awesome_bot * feat: auto-update README.md when PRs are created * feat: use danger to post awesome_bot results on PRs * chore: wut * Update pull_requests.yml * chore: fake-test * adjust branch used by github-push-action * chore: ensure checkout uses the branch * chore: update README.md * chore: modify dangerfile and workflow ordering * remove fake addition to videos.yaml * chore: update README.md * chore: rename pull_requests.yml * temp: always display awesomeBot results * Revert "temp: always display awesomeBot results" This reverts commitacaef1f4f2
. * chore(deps): install danger as devDep * feat: cache node_modules and readme * Update pull_requests.yml * chore: remove ad-m/github-push-action see https://github.com/ad-m/github-push-action/issues/104 * tmp: PR-demo * Rebuild * Revert "tmp: PR-demo" This reverts commit8bed1326f0
. * Rebuild * fix: no need to push readme update * fix: no need to push readme update readme is updated during 'Rebuild' commit from data.yml * chore: run danger via npm script instead of npx * feat: remove replace circleci cron with github action this github action should open a PR removing broken links automatically Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
parent
dca42f2ad9
commit
6d5eef146a
8 changed files with 12001 additions and 76 deletions
|
@ -1,36 +0,0 @@
|
||||||
version: 2
|
|
||||||
jobs:
|
|
||||||
awesome:
|
|
||||||
docker:
|
|
||||||
- image: circleci/ruby:2.4.2-jessie-node
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- run: gem install awesome_bot
|
|
||||||
- run: awesome_bot --allow 429 --allow-redirect --allow-dupe --allow-ssl -w ipfs.io README.md
|
|
||||||
|
|
||||||
build:
|
|
||||||
docker:
|
|
||||||
- image: circleci/node:10.15.1-browsers
|
|
||||||
environment:
|
|
||||||
NO_SANDBOX: true
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- run: npm ci
|
|
||||||
- run: npm run build
|
|
||||||
|
|
||||||
workflows:
|
|
||||||
version: 2
|
|
||||||
check-links:
|
|
||||||
triggers:
|
|
||||||
- schedule:
|
|
||||||
cron: "0 0 * * *"
|
|
||||||
filters:
|
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
jobs:
|
|
||||||
- awesome
|
|
||||||
checks:
|
|
||||||
jobs:
|
|
||||||
- awesome
|
|
||||||
- build
|
|
82
.github/workflows/broken_link_cron.yml
vendored
Normal file
82
.github/workflows/broken_link_cron.yml
vendored
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
name: Open a PR to remove broken links on a schedule
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-for-broken-links:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 13
|
||||||
|
|
||||||
|
- uses: ipfs/aegir/actions/cache-node-modules@master
|
||||||
|
with:
|
||||||
|
directories: |
|
||||||
|
README.md
|
||||||
|
build: |
|
||||||
|
npm run build:readme
|
||||||
|
cache_name: readme
|
||||||
|
|
||||||
|
- name: Set up Ruby 3.1.2
|
||||||
|
uses: ruby/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: 3.1.2
|
||||||
|
|
||||||
|
- name: Install and run awesome_bot
|
||||||
|
run: |
|
||||||
|
gem install awesome_bot
|
||||||
|
awesome_bot --allow 429 --allow-redirect --allow-dupe --allow-ssl -w ipfs.io README.md || echo
|
||||||
|
|
||||||
|
- name: Remove broken links
|
||||||
|
run: |
|
||||||
|
node scripts/remove-broken-links.js
|
||||||
|
|
||||||
|
- uses: stefanzweifel/git-auto-commit-action@49620cd3ed21ee620a48530e81dba0d139c9cb80
|
||||||
|
with:
|
||||||
|
# Optional. Commit message for the created commit.
|
||||||
|
# Defaults to "Apply automatic changes"
|
||||||
|
commit_message: "chore: Remove broken links"
|
||||||
|
|
||||||
|
# Optional. Local and remote branch name where commit is going to be pushed
|
||||||
|
# to. Defaults to the current branch.
|
||||||
|
# You might need to set `create_branch: true` if the branch does not exist.
|
||||||
|
branch: remove-broken-links-${{ github.run_id }}
|
||||||
|
|
||||||
|
commit_options: '--no-verify --signoff'
|
||||||
|
|
||||||
|
# Optional glob pattern of files which should be added to the commit
|
||||||
|
# Defaults to all (.)
|
||||||
|
# See the `pathspec`-documentation for git
|
||||||
|
# - https://git-scm.com/docs/git-add#Documentation/git-add.txt-ltpathspecgt82308203
|
||||||
|
# - https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec
|
||||||
|
file_pattern: data/*
|
||||||
|
repository: .
|
||||||
|
add_options: '-A'
|
||||||
|
push_options: '--force'
|
||||||
|
skip_dirty_check: true
|
||||||
|
skip_fetch: true
|
||||||
|
skip_checkout: true
|
||||||
|
disable_globbing: true
|
||||||
|
create_branch: true
|
||||||
|
|
||||||
|
- name: pull-request
|
||||||
|
uses: repo-sync/pull-request@65785d95a5a466e46a9d0708933a3bd51bbf9dde
|
||||||
|
with:
|
||||||
|
source_branch: "remove-broken-links-${{ github.run_id }}"
|
||||||
|
destination_branch: "master"
|
||||||
|
pr_title: "chore: Remove broken links"
|
||||||
|
pr_body: "Automated PR created by .github/workflows/broken_link_cron.yml"
|
||||||
|
pr_label: "kind/maintenance"
|
||||||
|
pr_draft: false
|
||||||
|
pr_allow_empty: false
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
60
.github/workflows/pull_requests.yml
vendored
Normal file
60
.github/workflows/pull_requests.yml
vendored
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
|
||||||
|
name: Pull request workflow
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [ opened, synchronize, reopened ]
|
||||||
|
branches: [ master, main ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# Run linting and tests
|
||||||
|
build-and-lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 13
|
||||||
|
- uses: ipfs/aegir/actions/cache-node-modules@master
|
||||||
|
with:
|
||||||
|
directories: |
|
||||||
|
README.md
|
||||||
|
build: |
|
||||||
|
npm run build:readme
|
||||||
|
cache_name: readme
|
||||||
|
# aegir/actions/cache-node-modules runs build. We don't need to run it again.
|
||||||
|
- run: npm run lint
|
||||||
|
|
||||||
|
run-danger:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build-and-lint
|
||||||
|
if: "!contains(github.event.head_commit.message, '[skip ci]')"
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.pull_request.head.ref }}
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 13
|
||||||
|
- name: Set up Ruby 3.1.2
|
||||||
|
uses: ruby/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: 3.1.2
|
||||||
|
- uses: ipfs/aegir/actions/cache-node-modules@master
|
||||||
|
with:
|
||||||
|
directories: |
|
||||||
|
README.md
|
||||||
|
build: |
|
||||||
|
npm run build:readme
|
||||||
|
cache_name: readme
|
||||||
|
- name: Install and run awesome_bot
|
||||||
|
# It's okay for awesome_bot to fail. Danger will post a comment on the PR if it fails.
|
||||||
|
run: |
|
||||||
|
gem install awesome_bot
|
||||||
|
awesome_bot --allow 429 --allow-redirect --allow-dupe --allow-ssl -w ipfs.io README.md || echo
|
||||||
|
- name: Run danger
|
||||||
|
run: npm run ci:danger
|
||||||
|
env:
|
||||||
|
DANGER_GITHUB_API_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }}
|
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -30,3 +30,9 @@ dist
|
||||||
/src/static/fonts
|
/src/static/fonts
|
||||||
/src/static/app.css
|
/src/static/app.css
|
||||||
/src/static/app.js
|
/src/static/app.js
|
||||||
|
|
||||||
|
# awesome_bot output
|
||||||
|
ab-results-README.md-filtered.json
|
||||||
|
ab-results-README.md.json
|
||||||
|
ab-results-README.md-markdown-table.json
|
||||||
|
links.txt
|
||||||
|
|
30
dangerfile.js
Normal file
30
dangerfile.js
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
const { danger, markdown, fail, warn, message } = require('danger')
|
||||||
|
const awesomeBotResults = require('./ab-results-README.md-markdown-table.json')
|
||||||
|
|
||||||
|
const githubMetadata = danger.git.fileMatch('.github/**')
|
||||||
|
const yamlData = danger.git.fileMatch('data/**')
|
||||||
|
const scripts = danger.git.fileMatch('scripts/**')
|
||||||
|
const src = danger.git.fileMatch('src/**')
|
||||||
|
|
||||||
|
if (githubMetadata.edited) {
|
||||||
|
message('Changes were made within the .github folder.')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (yamlData.edited) {
|
||||||
|
message('YAML data files were edited.')
|
||||||
|
/**
|
||||||
|
* Only display awesomeBot results if the data yaml used to generate the readme have been modified.
|
||||||
|
*/
|
||||||
|
if (awesomeBotResults.error) {
|
||||||
|
fail(awesomeBotResults.title)
|
||||||
|
markdown(awesomeBotResults.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scripts.edited) {
|
||||||
|
warn('Changes were made to the scripts folder.')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (src.edited) {
|
||||||
|
warn('Changes were made to the src folder.')
|
||||||
|
}
|
11831
package-lock.json
generated
11831
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -18,13 +18,15 @@
|
||||||
"build:css": "postcss --no-map --use postcss-import cssnano -o src/static/app.css src/css/*.css",
|
"build:css": "postcss --no-map --use postcss-import cssnano -o src/static/app.css src/css/*.css",
|
||||||
"build:js": "browserify -g uglifyify src/js/app.js -o src/static/app.js",
|
"build:js": "browserify -g uglifyify src/js/app.js -o src/static/app.js",
|
||||||
"build:data": "node ./scripts/make-data.js",
|
"build:data": "node ./scripts/make-data.js",
|
||||||
"build:hugo": "hugo -s src -d ../public --cleanDestinationDir --minify --gc"
|
"build:hugo": "hugo -s src -d ../public --cleanDestinationDir --minify --gc",
|
||||||
|
"ci:danger": "danger ci"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-eslint": "^10.0.2",
|
"babel-eslint": "^10.0.2",
|
||||||
"browserify": "^16.3.0",
|
"browserify": "^16.3.0",
|
||||||
"chokidar": "^3.0.2",
|
"chokidar": "^3.0.2",
|
||||||
"cssnano": "^4.1.10",
|
"cssnano": "^4.1.10",
|
||||||
|
"danger": "^11.1.2",
|
||||||
"ecstatic": "^4.1.2",
|
"ecstatic": "^4.1.2",
|
||||||
"fs-extra": "^8.1.0",
|
"fs-extra": "^8.1.0",
|
||||||
"hugo-bin": "^0.43.6",
|
"hugo-bin": "^0.43.6",
|
||||||
|
|
28
scripts/remove-broken-links.js
Normal file
28
scripts/remove-broken-links.js
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/**
|
||||||
|
* This file assumes that awesome_bot has already been ran.
|
||||||
|
*/
|
||||||
|
const markdownTable = require('../ab-results-README.md-markdown-table.json')
|
||||||
|
const fs = require('fs').promises
|
||||||
|
const { join } = require('path')
|
||||||
|
|
||||||
|
const dir = join(__dirname, '../data')
|
||||||
|
|
||||||
|
if (markdownTable.error) {
|
||||||
|
const brokenLinks = require('../ab-results-README.md-filtered.json').map((resultsData) => resultsData.link);
|
||||||
|
(async () => {
|
||||||
|
const files = (await fs.readdir(dir)).map(file => join(dir, file))
|
||||||
|
|
||||||
|
for await (const filePath of files) {
|
||||||
|
let fileContents = await fs.readFile(filePath, 'utf8')
|
||||||
|
brokenLinks.forEach((brokenLink) => {
|
||||||
|
console.log('Searching for "' + brokenLink + '" in ' + filePath)
|
||||||
|
const regex = new RegExp(brokenLink, 'g')
|
||||||
|
if (fileContents.match(regex)) {
|
||||||
|
fileContents = fileContents.replace(regex, '')
|
||||||
|
console.log('Removed "' + brokenLink + '" from ' + filePath)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
await fs.writeFile(filePath, fileContents, 'utf8')
|
||||||
|
}
|
||||||
|
})()
|
||||||
|
}
|
Loading…
Reference in a new issue