awesome_bot 1.17.1 → 1.20.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b3cf1c092e8b2268a453ae9322104d7cdb04eb45
4
- data.tar.gz: 2c9e2b935aa0a6dcc4fe004a46f543e07facf6f5
3
+ metadata.gz: a3d4e16495337ecdb24033c9d20ebcf92d6079c6
4
+ data.tar.gz: dd8ccc69f014fc37dcffb1df137c218aa94f3698
5
5
  SHA512:
6
- metadata.gz: 9f49bbe435557f0a0bf4cf5a02a90feca2590efc4ca94f3de3d1ff45a8696672e35e8288ee6ed21152abdef5b7e1407a60a6e9b9a30ddd5785297859fa3097c5
7
- data.tar.gz: 841890e757726514ca372de064fd993a60eb5d7cc5180b52f5a7ef3b837edaaa63ff1fb3b15e5d74a7c6799af5c6357cbc9064c3e29ee1c9045e882cb1e73b55
6
+ metadata.gz: 1c2e95b89a2a3ab9df7dba8a8796e4f908ecbc308be6fceda5876cf10ca1d50e10c096b168f89d41cbbc2934c8c64a652bf1bf351b03307605e2351213bf436f
7
+ data.tar.gz: ae5d7bf39bb7967bbc759bd99a074f28e142bf09a18effd423540b125adca60f0fce64c6f3ac65375c7ab487a3e4cfdb088b0e30ceaa9929b01ccd324ace9985
@@ -0,0 +1,38 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ working_directory: ~/dkhamsing/awesome_bot
5
+ parallelism: 1
6
+ shell: /bin/bash --login
7
+ environment:
8
+ CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
9
+ CIRCLE_TEST_REPORTS: /tmp/circleci-test-results
10
+ docker:
11
+ - image: circleci/build-image:ubuntu-14.04-XXL-upstart-1189-5614f37
12
+ steps:
13
+ - checkout
14
+ - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS
15
+ - run:
16
+ working_directory: ~/dkhamsing/awesome_bot
17
+ command: rm -f dkhamsing/awesome_bot/.rvmrc; echo 2.4.1 > dkhamsing/awesome_bot/.ruby-version; rvm use 2.4.1 --default
18
+ - restore_cache:
19
+ keys:
20
+ - v1-dep-{{ .Branch }}-
21
+ - v1-dep-master-
22
+ - v1-dep-
23
+ - run: echo -e "export RAILS_ENV=test\nexport RACK_ENV=test" >> $BASH_ENV
24
+ - run: 'bundle check --path=vendor/bundle || bundle install --path=vendor/bundle
25
+ --jobs=4 --retry=3 '
26
+ - save_cache:
27
+ key: v1-dep-{{ .Branch }}-{{ epoch }}
28
+ paths:
29
+ - vendor/bundle
30
+ - ~/virtualenvs
31
+ - ~/.bundle
32
+ - run: bundle exec rspec -fd --color -r rspec_junit_formatter --format RspecJunitFormatter -o $CIRCLE_TEST_REPORTS/rspec/junit.xml
33
+ - store_test_results:
34
+ path: /tmp/circleci-test-results
35
+ - store_artifacts:
36
+ path: /tmp/circleci-artifacts
37
+ - store_artifacts:
38
+ path: /tmp/circleci-test-results
data/.travis.yml CHANGED
@@ -20,7 +20,5 @@ script:
20
20
  - awesome_bot -f bin/assets/test-no-issues,bin/assets/test-redirect --allow-redirect
21
21
  - awesome_bot bin/assets/test-no-* --allow-redirect
22
22
  - awesome_bot bin/assets/test-ssl --allow-ssl
23
- - awesome_bot bin/assets/test-invalid.md --allow-redirect --allow-dupe
24
- - awesome_bot bin/assets/test-request-delay -d 1
25
23
  - awesome_bot README.md --allow-dupe --white-list gph.is,giphy,travis-ci.org,codeload,badge,rubydoc,rubygems,circleci,codeship,blob/master
26
24
  - gem install awesome_bot
data/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
  Changes by [Daniel Khamsing][] unless otherwise noted.
4
4
 
5
+ # 1.20.0
6
+
7
+ - [cli] delay: change to use float by [Jonathan Lai](https://github.com/agsdot)
8
+ - [gem] update `parallel`, `rspec` to latest
9
+
10
+ # 1.19.1
11
+
12
+ - [gem] update `parallel`, `rspec`, `rspec_junit_formatter` to latest
13
+
14
+ # 1.19.0
15
+
16
+ - [parse] handle javadoc links by [Davide Angelocola](https://github.com/dfa1)
17
+
18
+ # 1.18.0
19
+
20
+ - [parse] stricter parsing of relative urls by [Mat Moore](https://github.com/MatMoore)
21
+
22
+ # 1.17.2
23
+
24
+ - [cli] output version by [Budh Ram Gurung](https://github.com/budhrg)
25
+ - [gem] update `parallel` to version 1.12.0
5
26
 
6
27
  # 1.17.1
7
28
 
@@ -196,14 +217,14 @@ Changes by [Daniel Khamsing][] unless otherwise noted.
196
217
  - use `result`
197
218
  - use `logger`
198
219
 
199
- ## 1.1.0
220
+ # 1.1.0
200
221
 
201
222
  - handle bad links
202
223
  - statuses yields `status`, `url`
203
224
  - add head option when getting statuses
204
225
  - [cli] improve output for `--allow-dupe`
205
226
 
206
- ## 1.0.0
227
+ # 1.0.0
207
228
 
208
229
  - correct failure logic
209
230
  - rename `run` to `check`
@@ -212,7 +233,7 @@ Changes by [Daniel Khamsing][] unless otherwise noted.
212
233
  - [gemspec] update
213
234
  - [travis] simplify
214
235
 
215
- ## 0.1.0
236
+ # 0.1.0
216
237
 
217
238
  - initial version
218
239
 
data/Dockerfile ADDED
@@ -0,0 +1,10 @@
1
+ FROM ruby:alpine
2
+
3
+ RUN gem install awesome_bot --no-format-exec
4
+
5
+ VOLUME /mnt
6
+
7
+ WORKDIR /mnt
8
+
9
+ ENTRYPOINT ["awesome_bot"]
10
+ CMD ["--help"]
data/Gemfile CHANGED
@@ -1,5 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
- gem 'rspec_junit_formatter', '0.2.3' # test meta data / ci
5
- gem 'rspec', '3.6.0' # tests'
4
+ gem 'rspec_junit_formatter', '0.4.1' # test meta data / ci
5
+ gem 'rspec', '3.10.0' # tests'
data/README.md CHANGED
@@ -18,7 +18,7 @@ Verify links in [awesome](status/status.md) projects
18
18
 
19
19
  ### Command Line
20
20
 
21
- ```
21
+ ``` shell
22
22
  Usage: awesome_bot [file or files]
23
23
  awesome_bot [options]
24
24
  -f, --files [files] Comma separated files to check
@@ -29,7 +29,7 @@ Usage: awesome_bot [file or files]
29
29
  --allow-timeout URLs that time out are allowed
30
30
  --base-url [base url] Base URL to use for relative links
31
31
  -d, --request-delay [seconds] Set request delay
32
- -t, --set-timeout [seconds] Set connection timeout
32
+ -t, --set-timeout [seconds] Set connection timeout (default: 30)
33
33
  --skip-save-results Skip saving results
34
34
  -w, --white-list [urls] Comma separated URLs to white list
35
35
  ```
@@ -75,7 +75,7 @@ $ awesome_bot README.md,README-zh.md
75
75
  # check links in 2 files
76
76
 
77
77
  $ awesome_bot docs/*.md
78
- # check all markdown files in docs/ directory
78
+ # check all Markdown files in the docs/ directory
79
79
 
80
80
  $ awesome_bot README.md --allow-timeout -t 5
81
81
  # speed up validation by setting a timeout of 5 seconds per link request and allowing timeouts
@@ -85,7 +85,7 @@ $ awesome_bot README.md --allow 403,429
85
85
  # --allow 301 would be similar to --allow-redirect
86
86
 
87
87
  $ awesome_bot README.md --base-url https://github.com/IDR/idr-notebooks/blob/master/
88
- # will check relative links using the base url provided
88
+ # check relative links using the base URL provided
89
89
  ```
90
90
 
91
91
  ```shell
@@ -109,6 +109,25 @@ No issues :-)
109
109
  Wrote results to ab-results-new-readme.md.json
110
110
  ```
111
111
 
112
+ ### Docker Examples
113
+ If you do not want to install Ruby or its dependencies you can simply use Docker and Docker image.
114
+
115
+ Here is an example for checking the links in the Markdown files in your current directory/subdirectories:
116
+ ```shell
117
+ docker run -ti --rm -v $PWD:/mnt:ro dkhamsing/awesome_bot --white-list "test.com" --allow-dupe --allow-redirect --skip-save-results `find . -name "*.md"`
118
+ ```
119
+
120
+ or just check the links in a single file located at `./templates/ubuntu.md`:
121
+
122
+ ```shell
123
+ docker run -ti --rm -v $PWD:/mnt:ro dkhamsing/awesome_bot --allow-dupe --allow-redirect --skip-save-results ./templates/ubuntu.md
124
+ ```
125
+
126
+ You always need to specify the path to the file so you cannot simply use `*.md`; instead use `ls *.md"`:
127
+ ```shell
128
+ docker run -ti --rm -v $PWD:/mnt:ro dkhamsing/awesome_bot --white-list "test.com" --allow-dupe --allow-redirect --skip-save-results `ls *.md`
129
+ ```
130
+
112
131
  ### Library
113
132
 
114
133
  ```ruby
@@ -140,16 +159,48 @@ and [more](status/status.md).
140
159
 
141
160
  Tips
142
161
 
143
- - Use the keyword `[ci skip]` in your commit title/message to skip verification.
162
+ - Use the keyword [`[ci skip]`](https://docs.travis-ci.com/user/customizing-the-build/) in your commit title/message to skip verification.
144
163
  - Use [Danger](#danger).
145
164
 
165
+ ### GitHub Actions
166
+
167
+ To use `awesome_bot` with GitHub Actions (workflows), here is an [example](https://github.com/dkhamsing/open-source-ios-apps/blob/master/.github/workflows/ruby.yml):
168
+
169
+ ```yml
170
+ name: Ruby
171
+
172
+ on:
173
+ push:
174
+ branches: [ '*' ]
175
+ pull_request:
176
+ branches: [ '*' ]
177
+
178
+ jobs:
179
+ build:
180
+
181
+ runs-on: ubuntu-latest
182
+
183
+ steps:
184
+ - uses: actions/checkout@v2
185
+ - name: Set up Ruby 2.6
186
+ uses: actions/setup-ruby@v1
187
+ with:
188
+ ruby-version: 2.6.x
189
+ - name: Checks
190
+ run: |
191
+ ruby .github/osia_convert.rb
192
+ gem install awesome_bot
193
+ ruby .github/osia_get_links.rb
194
+ awesome_bot check-unique.txt --allow-ssl -a 302,429 -w xbmc/xbmc
195
+ ```
196
+
146
197
  ### Travis CI
147
198
 
148
199
  To use `awesome_bot` with Travis CI, [connect your repo](https://travis-ci.org/) and create a [`.travis.yml` file](https://github.com/ziadoz/awesome-php/blob/master/.travis.yml).
149
200
 
150
201
  ```yml
151
202
  language: ruby
152
- rvm: 2.2
203
+ rvm: 2.4.1
153
204
  before_script: gem install awesome_bot
154
205
  script: awesome_bot README.md
155
206
  ```
@@ -161,29 +212,27 @@ notifications:
161
212
  email: false
162
213
  ```
163
214
 
164
- ### Circle CI
165
-
166
- If you prefer Circle CI, it'll work too. [Connect your repo](https://circleci.com/) and create a [`circle.yml` file](https://github.com/tmcw/awesome-geojson).
215
+ In case you want to use the docker image inside Travis CI follow this example which will check broken links in all `*.md` files in your repository:
167
216
 
168
217
  ```yml
169
- machine:
170
- ruby:
171
- version: 2.2.0
172
- test:
173
- pre:
174
- - gem install awesome_bot
175
- override:
176
- - awesome_bot README.md
218
+ sudo: required
219
+
220
+ services:
221
+ - docker
222
+
223
+ script:
224
+ # Link Checks
225
+ - docker run -ti --rm -v $PWD:/mnt:ro dkhamsing/awesome_bot --allow-dupe --allow-redirect --skip-save-results `find . -name "*.md"`
177
226
  ```
178
227
 
179
228
  ### More
180
229
 
181
- Circle CI, [Codeship](https://codeship.com/), and [Semaphore CI](https://semaphoreci.com/) support running tests without adding a file to the repo (a public configuration file can however help others contribute).
230
+ [CircleCI](https://circleci.com), [Codeship](https://codeship.com/), and [Semaphore CI](https://semaphoreci.com/) support running tests without adding a file to the repo (a public configuration file can however help others contribute).
182
231
 
183
232
  ```
184
233
  # Codeship
185
234
  Setup
186
- rvm use 2.2.0 --install
235
+ rvm use 2.4.1 --install
187
236
  gem install awesome_bot
188
237
 
189
238
  Test
@@ -193,7 +242,7 @@ awesome_bot README.md
193
242
  ```
194
243
  # Semaphore CI
195
244
  Language: Ruby
196
- Ruby version: 2.2
245
+ Ruby version: 2.4.1
197
246
  Databases for: don't generate
198
247
  Setup:
199
248
  gem install awesome_bot
@@ -202,7 +251,7 @@ awesome_bot README.md
202
251
 
203
252
  ### Status Badge
204
253
 
205
- [![Build Status](https://travis-ci.org/unixorn/awesome-zsh-plugins.png)](https://travis-ci.org/unixorn/awesome-zsh-plugins)
254
+ [![Build Status](https://travis-ci.org/unixorn/awesome-zsh-plugins.svg)](https://travis-ci.org/unixorn/awesome-zsh-plugins)
206
255
 
207
256
  To add the Travis CI build status badge above to your project, use the following code
208
257
 
@@ -213,17 +262,17 @@ i.e.
213
262
  [![Build Status](https://travis-ci.org/dkhamsing/awesome_bot.svg?branch=master)](https://travis-ci.org/dkhamsing/awesome_bot)
214
263
  ```
215
264
 
216
- As it happens, the default code snippet provided contain a redirect so adding a badge could fail your status :sob:.. one way to fix this is to white list `travis-ci`, i.e.
265
+ As it happens, the default code snippet provided contains a redirect so adding a badge could fail your status :sob:.. one way to fix this is to white list `travis-ci`, i.e.
217
266
 
218
267
  ```
219
268
  - awesome_bot README.md --white-list travis-ci
220
269
  ```
221
270
 
222
- You can also add a badge for other CI tools, check out [shields.io](http://shields.io/).
271
+ You can also add a badge for other CI tools, check out [shields.io](https://shields.io/).
223
272
 
224
273
  ### Danger
225
274
 
226
- Integrate `awesome_bot` with [Danger](https://github.com/danger/danger) and have results reported back to the [pull request](https://github.com/vsouza/awesome-ios/pull/1001)).
275
+ Integrate `awesome_bot` with [Danger](https://github.com/danger/danger) and have results reported back to the [pull request](https://github.com/vsouza/awesome-ios/pull/1001).
227
276
 
228
277
  ![danger](https://cloud.githubusercontent.com/assets/4723115/17375716/0cdd37cc-5967-11e6-8ae3-829060a786dc.png)
229
278
 
data/awesome_bot.gemspec CHANGED
@@ -21,5 +21,5 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.required_ruby_version = '>= 2.0.0'
23
23
 
24
- spec.add_runtime_dependency 'parallel', '1.11.2' # threading
24
+ spec.add_runtime_dependency 'parallel', '1.20.1' # threading
25
25
  end
@@ -1,6 +1,4 @@
1
-
2
- 3. [L056] 405 https://www.google.com/events/io
3
- 5. [L130] 500 http://decentralizecamp.com/
1
+ 500 http://decentralizecamp.com/
4
2
  02. [L0138] 401 https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/
5
3
  03. [L0145] 401 https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html
6
4
  04. [L0146] 401 https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/OOP_ObjC/Introduction/Introduction.html
@@ -1,2 +1,2 @@
1
- http://www.cmr.osu.edu/browse/datasets
1
+ https://httpbin.org/delay/10
2
2
  https://github.com
@@ -1,3 +1,3 @@
1
- http://www.cmr.osu.edu/browse/datasets
1
+ http://1.2.3.4
2
2
  https://github.com
3
3
  https://github.com/supermarin/Alcatraz
@@ -24,10 +24,11 @@ module AwesomeBot
24
24
  opts.on('--allow-redirect', TrueClass, 'Redirected URLs are allowed') { |val| options['allow_redirect'] = val }
25
25
  opts.on('--allow-timeout', TrueClass, 'URLs that time out are allowed') { |val| options['allow_timeout'] = val }
26
26
  opts.on('--base-url [base url]', String, 'Base URL to use for relative links') { |val| options['base_url'] = val }
27
- opts.on('-d', '--request-delay [seconds]', Integer, 'Set request delay') { |val| options['delay'] = val }
28
- opts.on('-t', '--set-timeout [seconds]', Integer, 'Set connection timeout') { |val| options['timeout'] = val }
29
- opts.on('--skip-save-results', TrueClass, 'Skip saving results') { |val| options['no_results'] = val }
27
+ opts.on('-d', '--request-delay [seconds]', Float, 'Set request delay') { |val| options['delay'] = val }
28
+ opts.on('-t', '--set-timeout [seconds]', Integer, 'Set connection timeout (default: 30)') { |val| options['timeout'] = val }
29
+ opts.on('--skip-save-results', TrueClass, 'Skip saving results') { |val| options['no_results'] = val }
30
30
  opts.on('-w', '--white-list [urls]', Array, 'Comma separated URLs to white list') { |val| options['white_list'] = val }
31
+ opts.on('-v', '--version', String, 'Display version') { |val| puts "#{PROJECT} version #{VERSION}" }
31
32
 
32
33
  opts.on_tail("--help") do
33
34
  puts opts
@@ -1,5 +1,14 @@
1
1
  # Get and filter links
2
2
  module AwesomeBot
3
+ # This matches, from left to right:
4
+ # a literal [
5
+ # the link title - i.e. anything up to the next closing bracket
6
+ # a literal ]
7
+ # a literal (
8
+ # the link destination (optionally enclosed in a single pair of angle brackets)
9
+ # a literal )
10
+ MARKDOWN_LINK_REGEX = /\[ [^\]]+ \] \( <? ([^)<>]+) >? \)/x
11
+
3
12
  class << self
4
13
  def links_filter(list)
5
14
  list.reject { |x| x.length < 9 }
@@ -9,6 +18,8 @@ module AwesomeBot
9
18
  .map do |x|
10
19
  if x.include? ')]'
11
20
  x.gsub /\)\].*/, ''
21
+ elsif (x.scan(')').count == 1) && (x.scan('(').count == 1)
22
+ x
12
23
  elsif (x.scan(')').count == 2) && (x.scan('(').count == 1)
13
24
  x.gsub(/\)\).*/, ')')
14
25
  elsif (x.scan(')').count > 0)
@@ -45,9 +56,10 @@ module AwesomeBot
45
56
  end
46
57
 
47
58
  def get_relative_links(content, base)
48
- links = content.scan /\].*?\)/
59
+ links = []
60
+ content.scan(MARKDOWN_LINK_REGEX) { |groups| links << groups.first }
61
+
49
62
  links.reject { |x| x.include?('http') || x.include?('#') }
50
- .map { |x| x.sub '](', ''}
51
63
  .map { |x| x =~ /\S/ ? x.match(/^\S*/) : x }
52
64
  .map { |x| "#{base}#{x}"}
53
65
  end
@@ -5,5 +5,5 @@ module AwesomeBot
5
5
  'Great for "awesome" projects.'
6
6
  PROJECT_URL = 'https://github.com/dkhamsing/awesome_bot'
7
7
 
8
- VERSION = '1.17.1'
8
+ VERSION = '1.20.0'
9
9
  end
@@ -3,13 +3,15 @@ vsouza/awesome-ios
3
3
  enaqx/awesome-react
4
4
  bayandin/awesome-awesomeness
5
5
  toddmotto/public-apis
6
- herrbischoff/awesome-osx-command-line
6
+ herrbischoff/awesome-macos-command-line
7
7
  ziadoz/awesome-php
8
8
  matteocrippa/awesome-swift
9
9
  wsargent/docker-cheat-sheet
10
+ jaywcjlove/awesome-mac
11
+ Kickball/awesome-selfhosted
10
12
  alebcay/awesome-shell
11
13
  cjwirth/awesome-ios-ui
12
- abhishekbanthia/Public-APIs
14
+ n0shake/Public-APIs
13
15
  gztchan/awesome-design
14
16
  veggiemonk/awesome-docker
15
17
  hangtwenty/dive-into-machine-learning
@@ -22,7 +24,7 @@ n1trux/awesome-sysadmin
22
24
  hsavit1/Awesome-Swift-Education
23
25
  k4m4/terminals-are-sexy
24
26
  chiraggude/awesome-laravel
25
- AngularClass/awesome-angular
27
+ gdi2290/awesome-angular
26
28
  JStumpp/awesome-android
27
29
  ellisonleao/magictools
28
30
  j-delaney/easy-application
@@ -53,7 +55,7 @@ willianjusten/awesome-audio-visualization
53
55
  sitepoint-editors/awesome-symfony
54
56
  fasouto/awesome-dataviz
55
57
  matiassingers/awesome-readme
56
- sotayamashita/awesome-css
58
+ awesome-css-group/awesome-css
57
59
  ramitsurana/awesome-kubernetes
58
60
  wbinnssmith/awesome-promises
59
61
  nikgraf/awesome-draft-js
@@ -76,7 +78,7 @@ benoitjadinon/awesome-xamarin
76
78
  matteofigus/awesome-speaking
77
79
  burningtree/awesome-json
78
80
  ahkscript/awesome-AutoHotkey
79
- vredniy/awesome-newsletters
81
+ zudochkin/awesome-newsletters
80
82
  brunopulis/awesome-a11y
81
83
  jbucaran/awesome-fish
82
84
  hackerkid/bots
@@ -91,14 +93,14 @@ aviaryan/awesome-no-login-web-apps
91
93
  arbox/ruby-style-guide
92
94
  iJackUA/awesome-vagrant
93
95
  deanhume/typography
94
- vinkla/awesome-fuse
96
+ fuse-compound/awesome-fuse
95
97
  notthetup/awesome-webaudio
96
98
  brabadu/awesome-fonts
97
99
  tedyoung/awesome-java8
98
100
  MakinGiants/awesome-android-learner
99
101
  christian-bromann/awesome-selenium
100
102
  busterc/awesome-cordova
101
- jjaderg/awesome-postcss
103
+ jdrgomes/awesome-postcss
102
104
  jakoch/awesome-composer
103
105
  filipelinhares/awesome-slack
104
106
  shime/creative-commons-media
@@ -107,11 +109,11 @@ joubertredrat/awesome-devops
107
109
  J2TeaM/awesome-AutoIt
108
110
  arbox/rails-style-guide
109
111
  neueda/awesome-neo4j
110
- RichardLitt/endangered-languages
112
+ RichardLitt/low-resource-languages
111
113
  cugu/awesome-forensics
112
114
  rabbiabram/awesome-fortran
113
115
  vkarampinis/awesome-icons
114
- wfhio/awesome-job-boards
116
+ tramcar/awesome-job-boards
115
117
  yangshun/awesome-spinners
116
118
  sjfricke/awesome-webgl
117
119
  Jolg42/awesome-typography
@@ -122,6 +124,14 @@ ramitsurana/awesome-openstack
122
124
  Nipher/awesome-hacktivism
123
125
  ipfs/newsletter
124
126
  ellerbrock/awesome-typescript
125
- cdleon/awesome-front-end
127
+ cdleon/awesome-browser-dev
126
128
  adriagalin/tools
127
129
  arthurwayne/awesome-pentester
130
+ alister/php-in-london
131
+ IQDevs/Awesome-IQDevs
132
+ BubuAnabelas/awesome-markdown
133
+ serhii-londar/open-source-mac-os-apps
134
+ frenck/awesome-home-assistant
135
+ duyetdev/awesome-web-scraper
136
+ tapaswenipathak/Women-GitHubers
137
+ emacs-tw/awesome-emacs