mirror of
https://github.com/ckelsoe/obsidian-rss-importer.git
synced 2026-07-22 07:48:56 +00:00
Bootstrap obsidian-rss-importer from plugin-templates/standard: placeholders substituted, isDesktopOnly set true, Turndown + jsdom test deps added, esbuild bumped to 0.28.1 to clear advisory GHSA-gv7w-rqvm-qjhr (matches shell-path-copy). Build and lint green; main.ts is a wiring-only stub pending feature phases.
3 KiB
3 KiB
Contributing to RSS Importer
Thanks for your interest in improving RSS Importer. This guide explains how to get a local build running, propose changes, and submit pull requests.
Reporting issues
- Search existing issues before opening a new one.
- For bugs, include Obsidian version, platform (Windows/macOS/Linux/iOS/Android), plugin version, and reproduction steps.
- For feature requests, describe the use case and how it fits the plugin's scope.
Development setup
- Fork and clone the repo.
- Install dependencies:
npm install - Start the dev build with file watching:
npm run dev - Copy
main.js,manifest.json, andstyles.cssinto a test vault under.obsidian/plugins/rss-importer/, then enable the plugin in Obsidian.
Quality gates
Before opening a pull request, run:
npm run lint # ESLint with eslint-plugin-obsidianmd recommended, zero warnings allowed
npm run build # TypeScript strict type-check + esbuild production bundle
npm test # Jest unit tests
All three must pass. Pull requests that break CI will not be reviewed until green.
Coding conventions
- TypeScript strict mode is on. Never use
as anycasting. If types are missing, add declarations totypes.d.ts. - Follow Obsidian's plugin guidelines.
- Prefer
containerEl.createDiv()/createSpan()over genericcreateEl('div'|'span'). - Do not import Node built-ins (
path,fs, etc.) at the top ofmain.ts. Use aPlatform.isDesktop-guardedrequire()instead. - No inline
styleattributes. Move styles tostyles.css. - Settings tab headings must avoid the words "settings", "options", "general", and the plugin name.
- All UI strings (commands, menu titles, setting names, notifications) use sentence case. Brands recognized by
eslint-plugin-obsidianmd(Markdown, macOS, iOS, Windows, Linux, etc.) keep their official casing. - Keep the settings UI compatible with mobile (
isDesktopOnly: falsemeans features must degrade gracefully on iOS/Android).
Submitting a pull request
- Create a feature branch off
main. - Make focused, atomic commits.
- Update
CHANGELOG.mdunder an## [Unreleased]heading describing user-visible changes. - Push your branch and open a PR against
main. - Fill out the PR description: what changed, why, and how to test it.
Releases
Releases are cut by the maintainer. The release workflow runs automatically on tag push and:
- Builds and tests the plugin.
- Generates SLSA build provenance attestation for
main.js,manifest.json, andstyles.css. - Submits artifacts to VirusTotal for malware analysis (requires
VT_API_KEYrepo secret). - Extracts the matching
CHANGELOG.mdsection as release notes. - Publishes the GitHub release.
Contributors do not need to bump versions or create release artifacts.
License
By contributing you agree that your contributions are licensed under the MIT License (see LICENSE).