Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1692 commits
Select commit Hold shift + click to select a range
5f1f201
Update community-css-themes.json
cheycron Jul 5, 2025
2c66dcb
chore: Format JSON
Jul 7, 2025
d8d91d6
Update community-css-themes.json
Vlad3Design Jul 7, 2025
bdfb266
chore: Format JSON
Jul 7, 2025
90c194a
Update community-plugins.json
Enthalpiex Apr 16, 2025
c320266
Update community-plugins.json
Enthalpiex Apr 25, 2025
bdcd3cc
Update community-plugins.json
Enthalpiex Apr 25, 2025
08a16ab
Update community-plugins.json
Enthalpiex Apr 25, 2025
b220c88
Update community-plugins.json
Enthalpiex Apr 25, 2025
346f75c
Add RTL Math Text plugin
orelby Apr 26, 2025
e65fa78
Update community-plugins.json
Akaswan May 9, 2025
f007900
Update community-plugins.json
bfloydd May 12, 2025
7a83ed2
Update community-plugins.json
LucEast May 18, 2025
b358f1c
Update community-plugins.json
LucEast May 18, 2025
b155cbe
Update community-plugins.json
LucEast May 18, 2025
1194431
Update community-plugins.json
penyt May 21, 2025
0647daa
add alpha bullet
Mara-Li May 22, 2025
c33c42e
Update community-plugins.json
gfxholo May 25, 2025
2b906e6
Update community-plugins.json
CubieProg Jun 2, 2025
102c459
Update community-plugins.json
CubieProg Jun 3, 2025
279796f
Update community-plugins.json
CubieProg Jun 3, 2025
22c34f5
Update community-plugins.json
CubieProg Jun 11, 2025
475fb43
Update community-plugins.json
CubieProg Jun 11, 2025
202e48a
chore: Format JSON
Jul 7, 2025
6c02c56
chore: Update plugin stats
Jul 8, 2025
cfce2cd
chore: Update plugin stats
Jul 9, 2025
ffcb94c
Update community-plugins.json
kvh03 Jun 1, 2025
267e0aa
chore: Format JSON
Jul 9, 2025
15eddb1
Update community-plugins.json
mousebomb May 15, 2025
28fc9c5
Update community-plugins.json
mousebomb May 15, 2025
6e4e068
Update community-plugins.json
May 31, 2025
e68c197
chore: Format JSON
Jul 9, 2025
61e09d0
Update community-plugins.json
callumalpass Jun 3, 2025
7b1039f
Update community-plugins.json
michaelmassoni Jun 4, 2025
8763f56
Update community-plugins.json
michaelmassoni Jun 4, 2025
9f7cff7
Update community-plugins.json
michaelmassoni Jun 4, 2025
4f07a7b
Update community-plugins.json
michaelmassoni Jun 4, 2025
2faf770
Update community-plugins.json
michaelmassoni Jun 6, 2025
8cfcd44
Update community-plugins.json
michaelmassoni Jun 6, 2025
799ca92
Update community-plugins.json
WebInspectInc Jun 4, 2025
b7c1cb8
Update community-plugins.json
trevware Jun 5, 2025
7e8a5ca
Update community-plugins.json
dldisud Jun 4, 2025
9d58152
Update community-plugins.json
dldisud Jun 4, 2025
6663dbd
Update community-plugins.json
dldisud Jun 4, 2025
f2839f0
Update community-plugins.json
dldisud Jun 4, 2025
c116afa
Update community-plugins.json
dldisud Jun 4, 2025
d4353a1
Update community-plugins.json
dldisud Jun 4, 2025
8738134
Update community-plugins.json
dldisud Jun 4, 2025
a32185e
Update community-plugins.json
dldisud Jun 16, 2025
c7ca946
Update community-plugins.json
dldisud Jun 17, 2025
c76827e
Update community-plugins.json
dldisud Jun 17, 2025
b8143ac
Update community-plugins.json
dldisud Jul 8, 2025
6a8e453
Update community-plugins.json
dldisud Jul 8, 2025
a9c7dea
Update community-plugins.json
dldisud Jul 8, 2025
a35c392
Update community-plugins.json
dldisud Jul 8, 2025
b1ee8ae
Update community-plugins.json
dldisud Jul 8, 2025
45863f8
Update community-plugins.json
dldisud Jul 8, 2025
62e1e93
Update community-plugins.json
dldisud Jul 8, 2025
dd1b828
Update community-plugins.json
dldisud Jul 8, 2025
e17b3cc
Update community-plugins.json
dldisud Jul 8, 2025
fa35dfb
Update community-plugins.json
dldisud Jul 8, 2025
d32c7ee
Update community-plugins.json
dldisud Jul 8, 2025
3e5539f
Update community-plugins.json
dldisud Jul 8, 2025
b3a0a9b
Update community-plugins.json
dldisud Jul 8, 2025
1d06d05
Update community-plugins.json
dldisud Jul 8, 2025
465f330
chore: Format JSON
Jul 9, 2025
e1e4c04
Update community-plugins.json
dldisud Jul 9, 2025
f4147af
chore: Format JSON
Jul 9, 2025
f114bef
chore: Format JSON
Jul 9, 2025
4253498
Update community-plugins.json
zachatrocity Jun 6, 2025
05b7ea3
Update community-plugins.json
zachatrocity Jun 6, 2025
79997bf
chore: Update plugin stats
Jul 10, 2025
ca99588
Update community-plugins.json
shumadrid Jun 10, 2025
bd14aff
chore: Format JSON
Jul 10, 2025
54887cc
chore: Update plugin stats
Jul 11, 2025
c9bce6e
Update community-css-themes.json
cxj05h Jul 1, 2025
ad7335f
chore: Format JSON
Jul 11, 2025
af11ea1
Update community-css-themes.json
Riffaells Jul 8, 2025
cc77718
fix
Riffaells Jul 8, 2025
cb928f6
Update community-css-themes.json
regawaras Jul 10, 2025
e1fb1cd
Update community-css-themes.json
regawaras Jul 10, 2025
7829db4
chore: Format JSON
Jul 11, 2025
830c13c
Update community-plugins.json
Mara-Li Jan 27, 2025
1cc44d0
remove obsidian
Mara-Li Jan 27, 2025
0705414
fix typo
Mara-Li Jan 27, 2025
ea77c55
chore: change desc
Mara-Li Jan 27, 2025
aa5fa31
im not a clown im the entire circus
Mara-Li Jan 28, 2025
fa26b61
Update community-plugins.json
chris-codes1 Jun 6, 2025
7c365aa
Update community-plugins.json
kotaindah55 Jun 7, 2025
3a4f4af
Update community-plugins.json
lukmay Jun 9, 2025
4d692a1
Add plugin: Frontmatter Metadata Link Classes
zmeeeeeva Jun 10, 2025
781d1d7
Update community-plugins.json
zmeeeeeva Jul 10, 2025
1794800
Update community-plugins.json
zmeeeeeva Jul 10, 2025
155e327
Update name, resolve conflicts
zmeeeeeva Jul 10, 2025
a83c350
Update community-plugins.json
Rerurate514 Jun 11, 2025
aa5c6db
chore: Format JSON
Jul 11, 2025
18b201e
Add Plugin: better-mind-map
linem-davton May 7, 2025
ac74057
chore: Update plugin stats
Jul 12, 2025
c95f89a
chore: Update plugin stats
Jul 13, 2025
abefc36
chore: Update plugin stats
Jul 14, 2025
0de0841
chore: Update plugin stats
Jul 15, 2025
a2137eb
Update community-plugins.json
goderyu Jun 7, 2025
06fc69c
chore: Format JSON
Jul 15, 2025
5fbd7e9
chore: Update plugin stats
Jul 16, 2025
ead5f87
Update community-css-themes.json
norderan Jul 12, 2025
0631e2f
Update community-css-themes.json
norderan Jul 12, 2025
f403403
chore: Format JSON
Jul 16, 2025
c422f6c
chore: Update plugin stats
Jul 17, 2025
5580511
Update community-plugins.json
mali-i May 7, 2025
efe67be
Update community-plugins.json
mali-i May 7, 2025
6cb235d
Update community-plugins.json
mali-i May 8, 2025
9fa64a3
Update community-plugins.json
mali-i Jun 21, 2025
4105529
chore: Format JSON
Jul 17, 2025
638b907
Update beta to v1.9.5.
lishid Jul 17, 2025
0d55552
chore: Update plugin stats
Jul 18, 2025
b581b42
Update community-plugins.json
Signynt Jul 18, 2025
29a4e7f
Update community-plugins.json
Signynt Jul 18, 2025
896ff7a
chore: Format JSON
Jul 18, 2025
a44d3db
Update community-plugins.json
Signynt Jul 18, 2025
9c4ac02
Update community-plugins-removed.json
Signynt Jul 18, 2025
333a11f
Update beta to v1.9.6.
lishid Jul 18, 2025
000b357
chore: Update plugin stats
Jul 19, 2025
8831b84
Update community-plugins.json
forketyfork Jun 12, 2025
55cdaaa
chore: Format JSON
Jul 19, 2025
b129097
Update community-plugins.json
TiagoJacinto May 27, 2025
f8847c7
chore: Update plugin stats
Jul 20, 2025
0a4bb6c
chore: Update plugin stats
Jul 21, 2025
3d79de3
New plugin: Send to Canvas (#5628)
wenlzhang Jul 21, 2025
62b2aca
chore: Format JSON
Jul 21, 2025
c0959b2
Add plugin: PDF Emojis (#5367)
mmarusiak Jul 21, 2025
30d7669
Add plugin: Zhihu (#6249)
dongguaguaguagua Jul 21, 2025
18baf74
chore: add Dataview properties (#6463)
Mara-Li Jul 21, 2025
3d9fde2
chore: Update plugin stats
Jul 22, 2025
a54b492
Add plugin: Template Folder (#6607)
LucasOe Jul 22, 2025
299b444
Update community-plugins.json (#6079)
estory1 Jul 22, 2025
b87055f
Add plugin: Storyteller Suite (#6031)
SamW7140 Jul 22, 2025
1f004ff
chore: Format JSON
Jul 22, 2025
278ab71
Add plugin: UnLime (#6609)
shandyba Jul 22, 2025
486c970
ValidationBot: update template message
joethei Jul 22, 2025
e7ec752
Update community-plugins.json (#7176)
memodack Jul 22, 2025
62c7723
Add theme: Nostromo (#7093)
gvorbeck Jul 22, 2025
3a78c58
Relist Elegance theme
joethei Jul 22, 2025
1866476
chore: Format JSON
Jul 22, 2025
27f38cc
Add theme: Ravenloft (#6803)
circkumflexx Jul 22, 2025
d8a980b
chore: Format JSON
Jul 22, 2025
246702d
add "Tokyo Night Simple" theme to community-css-themes.json (#7157)
danarnold Jul 22, 2025
39f7926
Update community-css-themes.json (#7132)
OmegaCentauri68 Jul 22, 2025
b499a57
chore: Format JSON
Jul 22, 2025
d850e85
Add plugin: Simple Columns (#6650)
Josie1902 Jul 22, 2025
ca9cfd1
Add plugin: .url WebView Opener (#6686)
Kieirra Jul 22, 2025
1a4db5a
chore: Format JSON
Jul 22, 2025
748827f
Add plugin: DevOps Companion (#6693)
jkom4 Jul 22, 2025
d8e3fdb
Add plugin: Random Wikipedia Article (#6762)
SpencerF718 Jul 22, 2025
cc581d7
Add plugin: Github Issues (#6772)
LonoxX Jul 22, 2025
10e5d9b
Add plugin: PhraseSync (#6787)
digvijay-s-todiwal Jul 22, 2025
fddbdf4
Update community-plugins.json (#6791)
joybro Jul 22, 2025
f6fcee9
Update community-plugins.json (#6797)
isitwho Jul 22, 2025
bf6f31d
chore: Update plugin stats
Jul 23, 2025
5374c00
Add plugin: New 3D Graph (#6741)
Apoo711 Jul 23, 2025
bebadc2
chore: Format JSON
Jul 23, 2025
0c5edb0
Remove "Privacy Glasses" plugin - account URL is giving "page not fou…
claremacrae Jul 23, 2025
8a8bc52
chore: Update plugin stats
Jul 24, 2025
2e34ab2
chore: Update plugin stats
Jul 25, 2025
9266a84
chore: Update plugin stats
Jul 26, 2025
36eb517
chore: Update plugin stats
Jul 27, 2025
cb446c2
chore: Update plugin stats
Jul 28, 2025
63242e0
Delist plugin
joethei Jul 28, 2025
b12a2a8
chore: Format JSON
Jul 28, 2025
c959e48
Add plugin: Sonkil (#6143)
ohyoungpark Jul 28, 2025
b30d770
chore: Update plugin stats
Jul 29, 2025
58b474e
Add plugin: Vault Stats (#6818)
blueheron786 Jul 29, 2025
e9c9fc9
chore: Format JSON
Jul 29, 2025
3634767
chore: Update plugin stats
Jul 30, 2025
59d6167
chore: Update plugin stats
Jul 31, 2025
767dc0b
add issue number
joethei Jul 31, 2025
d71eb52
chore: Format JSON
Jul 31, 2025
ec5d440
Update community-plugins.json (#7264)
Ssentiago Jul 31, 2025
e48e163
Add plugin: Discrete (#5263)
shkarlsson Jul 31, 2025
6bda4ca
Add plugin: .md Merge (#6479)
tosatur Jul 31, 2025
a9ffc64
chore: Format JSON
Jul 31, 2025
7e4d4c4
Add plugin: Citation Callouts (#6695)
Marvive Jul 31, 2025
ebc5a75
Add plugin: WebDAV Image Uploader (#6696)
Koishiiko Jul 31, 2025
3d91d2c
chore: Format JSON
Jul 31, 2025
773b9ca
Add File Custom Viewer Plugin (custom-file-viewer) Entry (#6550)
peabody28 Jul 31, 2025
2a8bfc3
Update community-plugins.json (#6776)
chrishoward-projects Jul 31, 2025
0c81d99
chore: Update plugin stats
Aug 1, 2025
d343564
Add plugin: Publish Note to Mowen Note (#6824)
zhuSilence Aug 1, 2025
acd2413
chore: Format JSON
Aug 1, 2025
1e0d0c1
Add plugin: Cloud sync (#6313)
ai-bytedance Aug 1, 2025
83c99e0
Update community-plugins.json (#6812)
blueheron786 Aug 1, 2025
2e6a5ad
Add plugin: Variant Editor (#6718)
kunalJa Aug 1, 2025
659446a
chore: Format JSON
Aug 1, 2025
2069426
Update community-plugins.json (#6799)
k0src Aug 1, 2025
1bd742f
Update community-plugins.json (#6597)
klaasklee Aug 1, 2025
75fe1be
Add plugin: Pixel Pets (#6796)
LucasHJin Aug 1, 2025
0f09e8a
chore: Format JSON
Aug 1, 2025
ca16467
chore: Update plugin stats
Aug 2, 2025
2980927
chore: Update plugin stats
Aug 3, 2025
9315600
Add plugin: Quick Emoji (#6950)
asibilia Aug 3, 2025
682a12c
chore: Format JSON
Aug 3, 2025
bf4eb15
chore: Update plugin stats
Aug 4, 2025
193fd47
Update community-css-themes.json (#7304)
zfmohammed Aug 4, 2025
92a737e
chore: Format JSON
Aug 4, 2025
158ccaa
Update Similar Notes plugin description (#7234)
joybro Aug 4, 2025
01e8d2a
Update community-plugins.json (#7292)
AlphaHasher Aug 4, 2025
b97ee2a
chore: Update plugin stats
Aug 5, 2025
a892cf0
Update stale bot messaging
joethei Aug 5, 2025
5f49198
chore: Format JSON
Aug 5, 2025
23251dc
Update community-css-themes.json (#7300)
aaaaalexis Aug 5, 2025
93fcd5c
Update beta to v1.9.7.
lishid Aug 5, 2025
ef48c63
chore: Update plugin stats
Aug 6, 2025
eb53080
chore: Update plugin stats
Aug 7, 2025
2ec1b70
Typo in languagetool plugin description (#7367)
wrenger Aug 7, 2025
49dccd1
chore: Format JSON
Aug 7, 2025
ac64f3d
chore: Update plugin stats
Aug 8, 2025
20155a0
Added Private AI Plugin (#6939)
gabosgab Aug 8, 2025
a27105a
chore: Format JSON
Aug 8, 2025
792063b
Update community-plugins.json (#6940)
davidvkimball Aug 8, 2025
f895244
Update community-css-themes.json (#7334)
annagracedev Aug 8, 2025
2de8de3
Add Noctis theme (#7341)
konnta0 Aug 8, 2025
846b203
Update community-css-themes.json (#7372)
dubefab Aug 8, 2025
9a1e7ed
Update community-plugins.json (#6483)
mariomui Aug 8, 2025
f7f2092
Add plugin: Mini-RAG (#6709)
jjwheatley Aug 8, 2025
4935d7b
chore: Format JSON
Aug 8, 2025
10a8bbe
Add LLM Shortcut plugin (#6844)
chernodub Aug 8, 2025
fb0db4b
chore: Format JSON
Aug 8, 2025
1b45209
Add plugin: Clipboard Manager (#6849)
ayu5h-raj Aug 8, 2025
0d9ba83
Add plugin: Bibtex Entry View (#6865)
awfrok Aug 8, 2025
d5215fb
Update community-plugins.json (#6869)
filippov112 Aug 8, 2025
9dfa46c
Add plugin: umbPublisher (#6863)
OwainWilliams Aug 8, 2025
83cff94
Add plugin: Linked Note Exporter (#6914)
the-c0d3r Aug 8, 2025
d55ee44
Update community-plugins.json (#6924)
ikmolbo Aug 8, 2025
feaa7eb
chore: Update plugin stats
Aug 9, 2025
6eabe7e
chore: Update plugin stats
Aug 10, 2025
7584656
chore: Update plugin stats
Aug 11, 2025
496671c
Add theme name validation
joethei Aug 11, 2025
c4a8f34
chore: Format JSON
Aug 11, 2025
e2ff33f
Update validate-theme-entry.yml
joethei Aug 11, 2025
bb9a0a0
Update validate-theme-entry.yml
joethei Aug 11, 2025
4914e23
Update community-css-themes.json (#7344)
Cloopy Aug 11, 2025
cf4bd80
Add developer pledge to plugin template
liamcain Aug 11, 2025
0733d91
chore: Update plugin stats
Aug 12, 2025
3f3b017
Update task-list-kanban ownership (#7415)
ErikaRS Aug 12, 2025
1326c67
chore: Format JSON
Aug 12, 2025
49ff2a8
chore: Update plugin stats
Aug 13, 2025
65fcd96
trigger retest
sspaeti Nov 20, 2024
235e088
trigger retest
sspaeti Nov 20, 2024
5723a00
chore: Format JSON
Aug 13, 2025
07dda6b
adding osaka jade theme
sspaeti Aug 13, 2025
f4ae608
chore: Format JSON
Aug 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .eslintrc.json

This file was deleted.

2 changes: 2 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/plugin.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# I am submitting a new Community Plugin

- [ ] I attest that I have done my best to deliver a high-quality plugin, am proud of the code I have written, and would recommend it to others. I commit to maintaining the plugin and being responsive to bug reports. If I am no longer able to maintain it, I will make reasonable efforts to find a successor maintainer or withdraw the plugin from the directory.

## Repo URL

<!--- Paste a link to your repo here for easy access -->
Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/format.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Format
on:
push:
branches:
- master
jobs:
format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
- uses: actions/setup-node@v3
with:
node-version: "16.x"
- run: npm ci --no-save
- run: npm run format
- name: Commit changes
run: |
git config --local user.name 'Obsidian Bot'
git config --local user.email '[email protected]'
git add .
git commit -m "chore: Format JSON" || exit 0
git push
4 changes: 2 additions & 2 deletions .github/workflows/skip.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ jobs:
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.issue.number }}
LABELS: Skipped code scan
- run: gh issue edit "$NUMBER" --add-assignee "$ASSIGNEE"
- run: gh issue edit "$NUMBER" --remove-assignee "$ASSIGNEE"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.issue.number }}
ASSIGNEE: joethei
ASSIGNEE: ObsidianReviewBot
22 changes: 22 additions & 0 deletions .github/workflows/stale-validation-failed.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: 'Close stale PRs with failed validation'
on:
schedule:
- cron: "27 3 * * *"

jobs:
stale:
runs-on: ubuntu-latest
permissions:
pull-requests: write
actions: write
steps:
- uses: actions/stale@v9
with:
stale-pr-message: "Hi there, as this PR has not seen any activity in the last 7 days, it will be closed in 7 days unless there are any updates."
close-pr-message: "Hi there, to keep things tidy, we're closing PRs that haven't passed the validation after 14 days of inactivity."
days-before-stale: 7
days-before-close: 7
stale-pr-label: stale
only-pr-labels: Validation failed
operations-per-run: 200

2 changes: 1 addition & 1 deletion .github/workflows/stale.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
steps:
- uses: actions/stale@v9
with:
stale-pr-message: "Hi there, as this PR has not seen any activity in the last 30 days, it will be closed in 15 days unless there are any updates."
stale-pr-message: "Hi there, as this PR has not seen any activity in the last 30 days, it will be closed in 15 days unless there are any updates.\nPlease double check that you have made all of the requested changes if you believe that this is a mistake."
close-pr-message: "Hi there, to keep things tidy, we're closing PRs after one and a half months of inactivity.\nFeel free to create a new pull request when you're ready to continue. Thanks for your understanding!"
days-before-stale: 30
days-before-close: 15
Expand Down
79 changes: 55 additions & 24 deletions .github/workflows/validate-plugin-entry.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,19 @@ jobs:
addWarning('Maintainers of this repo should be allowed to edit this pull request. This speeds up the approval process.');
}

if (!context.payload.pull_request.body.includes('I have added a license in the LICENSE file.')) {
addError('You did not follow the pull request template');
const templateStrings = [
'I have tested the plugin on',
'My GitHub release contains all required files (as individual files, not just in the source.zip / source.tar.gz)', 'GitHub release name matches the exact version number specified in my manifest.json',
'The `id` in my `manifest.json` matches the `id` in the `community-plugins.json` file.',
'My README.md describes the plugin\'s purpose and provides clear usage instructions.',
'I have read the developer policies at https://docs.obsidian.md/Developer+policies, and have assessed my plugins\'s adherence to these policies.',
'I have read the tips in https://docs.obsidian.md/Plugins/Releasing/Plugin+guidelines and have self-reviewed my plugin to avoid these common pitfalls',
'I have added a license in the LICENSE file.',
'My project respects and is compatible with the original license of any code from other plugins that I\'m using.',
'I have given proper attribution to these other projects in my `README.md`.'
];
if (!templateStrings.every(element => context.payload.pull_request.body?.includes(element))) {
addError('You did not follow the pull request template. The PR template can be found [here](https://raw.githubusercontent.com/obsidianmd/obsidian-releases/refs/heads/master/.github/PULL_REQUEST_TEMPLATE/plugin.md)');
}

let plugins = [];
Expand Down Expand Up @@ -105,55 +116,55 @@ jobs:
addError(`It seems like you made a typo in the repository field \`${plugin.repo}\`.`);
}

if (plugin.id.toLowerCase().includes('obsidian')) {
if (plugin.id?.toLowerCase().includes('obsidian')) {
addError(`Please don't use the word \`obsidian\` in the plugin ID. The ID is used for your plugin's folder so keeping it short and simple avoids clutter and helps with sorting.`);
}
if (plugin.id.toLowerCase().endsWith('plugin')) {
if (plugin.id?.toLowerCase().endsWith('plugin')) {
addError(`Please don't use the word \`plugin\` in the plugin ID. The ID is used for your plugin's folder so keeping it short and simple avoids clutter and helps with sorting.`);
}
if (!/^[a-z0-9-_]+$/.test(plugin.id)) {
if (plugin.id && !/^[a-z0-9-_]+$/.test(plugin.id)) {
addError('The plugin ID is not valid. Only alphanumeric lowercase characters and dashes are allowed.');
}

else if (plugin.name.toLowerCase().includes('obsidian')) {
else if (plugin.name?.toLowerCase().includes('obsidian')) {
addError(`Please don't use the word \`Obsidian\` in your plugin name since it's redundant and adds clutter to the plugin list.`);
}
if (plugin.name.toLowerCase().endsWith('plugin')) {
if (plugin.name?.toLowerCase().endsWith('plugin')) {
addError(`Please don't use the word \`Plugin\` in the plugin name since it's redundant and adds clutter to the plugin list.`);
}

if (/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/.test(plugin.author)) {
if (plugin.author && /^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/.test(plugin.author)) {
addWarning(`We generally discourage including your email addresses in the \`author\` field.`);
}

if (plugin.description.toLowerCase().includes('obsidian')) {
if (plugin.description?.toLowerCase().includes('obsidian')) {
addError('Please don\'t include `Obsidian` in the plugin description');
}
if (plugin.description.toLowerCase().includes('this plugin') || plugin.description.toLowerCase().includes('this is a plugin') || plugin.description.toLowerCase().includes('this plugin allows')) {
if (plugin.description?.toLowerCase().includes('this plugin') || plugin.description?.toLowerCase().includes('this is a plugin') || plugin.description?.toLowerCase().includes('this plugin allows')) {
addWarning('Avoid including sentences like `This is a plugin that does` in your description');
}

if (plugin.description.length > 250) {
if (plugin.description?.length > 250) {
addError(`Your plugin has a long description. Users typically find it difficult to read a very long description, so you should keep it short and concise.`);
}

if (plugins.filter(p => p.id === plugin.id).length > 1) {
if (plugin.id && plugins.filter(p => p.id === plugin.id).length > 1) {
addError(`There is already a plugin with the id \`${plugin.id}\`.`);
}
if (plugins.filter(p => p.name === plugin.name).length > 1) {
if (plugin.name && plugins.filter(p => p.name === plugin.name).length > 1) {
addError(`There is already a plugin with the name \`${plugin.name}\`.`);
}
if (plugins.filter(p => p.repo === plugin.repo).length > 1) {
if (plugin.repo && plugins.filter(p => p.repo === plugin.repo).length > 1) {
addError(`There is already a entry pointing to the \`${plugin.repo}\` repository.`);
}

const removedPlugins = JSON.parse(fs.readFileSync('community-plugins-removed.json', 'utf8'));

if (removedPlugins.filter(p => p.id === plugin.id).length > 1) {
if (plugin.id && removedPlugins.filter(p => p.id === plugin.id).length > 1) {
addError(`Another plugin used to exist with the id \`${plugin.id}\`. To avoid issues for users that still have the old plugin installed using this plugin ID is not allowed`);
}

if (removedPlugins.filter(p => p.name === plugin.name).length > 1) {
if (plugin.name && removedPlugins.filter(p => p.name === plugin.name).length > 1) {
addWarning(`Another plugin used to exist with the name \`${plugin.name}\`. To avoid confussion we recommend against using this name.`);
}

Expand All @@ -178,10 +189,17 @@ jobs:
}
}

if (manifest.id !== plugin.id) {
let allowedManifestKeys = [...validManifestKeys, 'authorUrl', 'fundingUrl', 'helpUrl'];
for (let key of Object.keys(manifest)) {
if (!allowedManifestKeys.includes(key)) {
addError(`Your manifest has the invalid \`${key}\` property.`);
}
}

if (plugin.name && manifest.id !== plugin.id) {
addError(`Plugin ID mismatch, the ID in this PR (\`${plugin.id}\`) is not the same as the one in your repo (\`${manifest.id}\`). If you just changed your plugin ID, remember to change it in the manifest.json in your repo and your latest GitHub release.`);
}
if (manifest.name !== plugin.name) {
if (plugin.name && manifest.name !== plugin.name) {
addError(`Plugin name mismatch, the name in this PR (\`${plugin.name}\`) is not the same as the one in your repo (\`${manifest.name}\`). If you just changed your plugin name, remember to change it in the manifest.json in your repo and your latest GitHub release.`);
}

Expand Down Expand Up @@ -215,10 +233,10 @@ jobs:

const assets = release.data.assets || [];
if (!assets.find(p => p.name === 'main.js')) {
addError('Your latest Release is missing the `main.js` file.');
addError('Your latest release is missing the `main.js` file.');
}
if (!assets.find(p => p.name === 'manifest.json')) {
addError('Your latest Release is missing the `manifest.json` file.');
addError('Your latest release is missing the `manifest.json` file.');
}
} catch (e) {
addError(`Unable to find a release with the tag \`${manifest.version}\`. Make sure that the version in your manifest.json file in your repo points to the correct Github Release.`);
Expand All @@ -229,7 +247,7 @@ jobs:
try {
await github.rest.licenses.getForRepo({owner, repo});
} catch (e) {
addWarning(`Your repository does not include a license. It is generally recommended for open-source projects to have a license. Go to <https://choosealicense.com/> to compare different open source licenses.`);
addError(`Your repository does not include a license. Go to <https://choosealicense.com/> to compare different open source licenses.`);
}
})();

Expand Down Expand Up @@ -271,12 +289,25 @@ jobs:
pull_number: context.issue.number,
title: `Add plugin: ${plugin.name}`
});
await github.rest.issues.addAssignees({

const comments = github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
assignees: 'ObsidianReviewBot'
issue_number: context.issue.number
});
const commentAuthors = [];
for (const comment in comments) {
commentAuthors.push(comment.user.login);
}

if (!commentAuthors.includes("ObsidianReviewBot")) {
await github.rest.issues.addAssignees({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
assignees: 'ObsidianReviewBot'
});
}

if(!context.payload.pull_request.labels.filter(label => label.name === 'Changes requested').length > 0) {
labels.push("Ready for review");
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/validate-theme-entry.yml
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ jobs:
if (theme.name.toLowerCase().includes('theme')) {
addError(`We discourage themes from including the word \`theme\` in their name since it's redundant and makes the theme selection screen harder to visually parse.`);
}
if (theme.name.match(/([^A-Za-z0-9_\- ]+)/g)) {
addError('Your theme name contains invalid symbols, allowed are letters, digits, spaces, hyphens and underscores.');
}

if (/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/.test(theme.author)) {
addWarning('We generally discourage from including email addresses in the `author` field.');
Expand Down
91 changes: 91 additions & 0 deletions community-css-themes-removed.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
[
{
"name": "Molecule",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/manassadasivuni/obsidian-molecule/issues/1"
},
{
"name": "Vileplume",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/hungsu/vileplume-obsidian/issues/11"
},
{
"name": "Agora",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/Seraaron/agora-obsidian-theme/issues/4"
},
{
"name": "Slytherin",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/MatheusZarkov/Obsidian-Slytherin/issues/3"
},
{
"name": "gummy",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/7368697661/gummy/issues/3"
},
{
"name": "Creature",
"reason": "Repository archived"
},
{
"name": "Big & Bold",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/Bluemoondragon07/obsidian-big-and-bold/issues/20"
},
{
"name": "🔔 Chime",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/Bluemoondragon07/chime-theme/issues/25"
},
{
"name": "Light & Bright",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/Bluemoondragon07/obsidian-light-and-bright-theme/issues/8"
},
{
"name": "WilcoxOne",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/MattWilcox/obsidian-wilcox-one/issues/3"
},
{
"name": "Christmas",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/deathau/obsidian-christmas-theme/issues/2"
},
{
"name": "Nebula",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/dlccyes/obsidian-nebula/issues/3"
},
{
"name": "Shiba Inu",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/faroukx/Obsidian-shiba-inu-theme/issues/11"
},
{
"name": "Sparkling Wisdom",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/learnerfvs/Sparkling-Wisdom-obsidian-theme-/issues/7"
},
{
"name": "Spectrum",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/wiktoriavh/Spectrum/issues/60"
},
{
"name": "Venom",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/fatiger92/obsidian_venom_theme/issues/4"
},
{
"name": "WiseLight",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/learnerfvs/WiseLight/issues/4"
},
{
"name": "Shiba Inu",
"reason": "Developer policies violation: Remote resources",
"issue": "https://github.com/faroukx/Obsidian-shiba-inu-theme/issues/11"
}
]
Loading
Loading