Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: Question or general feedback
url: https://github.com/kellylford/rssquick/discussions
url: https://github.com/TheIdeaPlace/rssquick/discussions
about: Ask a question or share an idea that is not a bug report.
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
package:
runs-on: windows-latest
# Runs in the `azure-signing` environment so the OIDC token's subject is
# repo:kellylford/rssquick:environment:azure-signing, which is what the Azure federated
# repo:TheIdeaPlace@340125137/rssquick@1046409088:environment:azure-signing (numeric-id form; moved from kellylford on 2026-10-10), which is what the Azure federated
# credential trusts - the tenant does not accept wildcard tag subjects. The same arrangement
# as QuickMail. It is only there to match that claim: add no protection rules to it, or every
# run will wait for approval. Signing itself still happens only on v* tags, below.
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ Both artefacts are **self-contained single-file** builds, so neither needs .NET

The installer is Velopack's, and it is what makes an installed copy update itself. `build/publish.ps1` runs `vpk pack` over the same single-file build the portable ZIP holds, installing per-user into `%LocalAppData%\RSSQuick` (no UAC prompt, and no prompt to update either), and renames Setup.exe to the `RSSQuick-<version>-setup-win-<arch>.exe` pattern the Inno Setup installer used. The update feed — `.nupkg` packages plus `releases.*.json`, `assets.*.json` and `RELEASES*` for both channels — goes on the GitHub release alongside the downloads; `release.yml` lists each file with `fail_on_unmatched_files`, so a change in what vpk writes fails the release rather than publishing one installed copies cannot read. It also runs `vpk download github` first, so each release carries a delta against the last.

**Code signing** is Azure Artifact Signing, the same account (`kellylford`) and certificate profile (`kellyford-public`) as QuickMail, on `v*` tags only. There is no certificate in the repository or in a secret: the release job runs in the `azure-signing` environment, `azure/login` trades its OIDC token for Azure credentials (the federated credential trusts the subject `repo:kellylford/rssquick:environment:azure-signing`), and the signing tools use that session. The job runs `publish.ps1 -Step Publish`, signs `RSSQuick.exe` in `artifacts/staging` with `azure/artifact-signing-action`, then `-Step Package -AzureSignFile`, where vpk signs Setup, the updater and its launcher stub, and skips the program because it is already signed. Signing between the steps is what gets a signed program into the portable ZIP. A last step fails the release if any downloadable `.exe`, the program inside either ZIP, or any program inside a full update package is not validly signed. Never add protection rules to the `azure-signing` environment; it exists only to match the OIDC subject.
**Code signing** is Azure Artifact Signing, the same account (`kellylford`) and certificate profile (`kellyford-public`) as QuickMail, on `v*` tags only. There is no certificate in the repository or in a secret: the release job runs in the `azure-signing` environment, `azure/login` trades its OIDC token for Azure credentials (the federated credential `gh-rssquick-immutable` trusts the subject `repo:TheIdeaPlace@340125137/rssquick@1046409088:environment:azure-signing`; the repo moved from kellylford to the TheIdeaPlace org on 2026-10-10), and the signing tools use that session. The job runs `publish.ps1 -Step Publish`, signs `RSSQuick.exe` in `artifacts/staging` with `azure/artifact-signing-action`, then `-Step Package -AzureSignFile`, where vpk signs Setup, the updater and its launcher stub, and skips the program because it is already signed. Signing between the steps is what gets a signed program into the portable ZIP. A last step fails the release if any downloadable `.exe`, the program inside either ZIP, or any program inside a full update package is not validly signed. Never add protection rules to the `azure-signing` environment; it exists only to match the OIDC subject.

Installed copies read the feed from the latest *published* release. `release.yml` makes a draft, so nothing updates until a person has checked the build and published it.

Expand Down
2 changes: 1 addition & 1 deletion CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ This project follows the [Contributor Covenant](https://www.contributor-covenant

By taking part you agree to keep this a welcoming, respectful place for everyone, whatever their background or level of experience.

To report a concern, contact Kelly Ford through a private GitHub message or through the [issue tracker](https://github.com/kellylford/rssquick/issues).
To report a concern, contact Kelly Ford through a private GitHub message or through the [issue tracker](https://github.com/TheIdeaPlace/rssquick/issues).
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,6 @@ Two details that have caused real bugs and are easy to reintroduce:

## Reporting bugs

Use the [issue templates](https://github.com/kellylford/rssquick/issues/new/choose). There is a dedicated accessibility template; please use it for anything involving a screen reader, braille display, magnifier, or keyboard-only use. Those are treated as bugs rather than enhancements, and you do not need to work out the cause — describing what you heard or could not reach is the useful part.
Use the [issue templates](https://github.com/TheIdeaPlace/rssquick/issues/new/choose). There is a dedicated accessibility template; please use it for anything involving a screen reader, braille display, magnifier, or keyboard-only use. Those are treated as bugs rather than enhancements, and you do not need to work out the cause — describing what you heard or could not reach is the useful part.

Security issues go through [SECURITY.md](SECURITY.md) instead, not the public tracker.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
script reads it, and it lands in the executable's file version from here. -->
<_VersionFromFile>$([System.IO.File]::ReadAllText('$(MSBuildThisFileDirectory)VERSION'))</_VersionFromFile>
<VersionPrefix>$(_VersionFromFile.Trim())</VersionPrefix>
<RepositoryUrl>https://github.com/kellylford/rssquick</RepositoryUrl>
<RepositoryUrl>https://github.com/TheIdeaPlace/rssquick</RepositoryUrl>
<RepositoryType>git</RepositoryType>
</PropertyGroup>

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ focus lands and what the status bar says, so it does not quietly break.

## Download

Everything is on the [Releases page](https://github.com/kellylford/rssquick/releases). Each
Everything is on the [Releases page](https://github.com/TheIdeaPlace/rssquick/releases). Each
release also carries files ending in `.nupkg` and `.json` and a file called `RELEASES`; those
are for installed copies to update themselves, and you do not need them.

Expand Down Expand Up @@ -217,10 +217,10 @@ for all users, in Program Files, is left for you to remove from Installed Apps.

## Found a problem?

Please open an [accessibility issue](https://github.com/kellylford/rssquick/issues/new/choose)
Please open an [accessibility issue](https://github.com/TheIdeaPlace/rssquick/issues/new/choose)
for anything to do with a screen reader, braille display, magnifier or keyboard use. You do not
need to work out the cause; describing what you heard, or what you could not reach, is the
useful part. Bugs and ideas are welcome on the [issue tracker](https://github.com/kellylford/rssquick/issues)
useful part. Bugs and ideas are welcome on the [issue tracker](https://github.com/TheIdeaPlace/rssquick/issues)
too. Security issues go through the [security policy](SECURITY.md).

## Building from source
Expand Down
2 changes: 1 addition & 1 deletion RELEASE-NOTES-v1.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@
- If .NET 8.0 Runtime is missing, you’ll be prompted to install it

## Feedback & Contributions
- Found a bug? Have an idea? Visit the [GitHub Issues page](https://github.com/kellylford/rssquick/issues) to get involved!
- Found a bug? Have an idea? Visit the [GitHub Issues page](https://github.com/TheIdeaPlace/rssquick/issues) to get involved!
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**Please do not open a public GitHub issue for a security vulnerability.**

Use GitHub's private vulnerability reporting: on the [Security tab](https://github.com/kellylford/rssquick/security) of this repository, choose **Report a vulnerability**. If you cannot use that, send a private message to [@kellylford](https://github.com/kellylford) on GitHub.
Use GitHub's private vulnerability reporting: on the [Security tab](https://github.com/TheIdeaPlace/rssquick/security) of this repository, choose **Report a vulnerability**. If you cannot use that, send a private message to [@kellylford](https://github.com/kellylford) on GitHub.

Please include:

Expand Down
2 changes: 1 addition & 1 deletion build/publish.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ in its status bar and offers the download page.
RSS.opml in this folder is the feed list loaded at startup. Replace it with your own,
or use the "Import OPML File" button to load a different one.

Source and issues: https://github.com/kellylford/rssquick
Source and issues: https://github.com/TheIdeaPlace/rssquick
"@ | Set-Content -Path (Join-Path $outDir 'README-PORTABLE.txt') -Encoding UTF8
}

Expand Down
2 changes: 1 addition & 1 deletion docs/privacy.html
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ <h2 id="changes">Changes</h2>

<section aria-labelledby="contact">
<h2 id="contact">Questions</h2>
<p>RSS Quick is free, open source software by Kelly Ford. Email <a href="mailto:support@theideaplace.net">support@theideaplace.net</a>, or ask a question or report a problem on <a href="https://github.com/kellylford/rssquick/issues">RSS Quick's GitHub issues page</a>, where you can also read every line of its source code.</p>
<p>RSS Quick is free, open source software by Kelly Ford. Email <a href="mailto:support@theideaplace.net">support@theideaplace.net</a>, or ask a question or report a problem on <a href="https://github.com/TheIdeaPlace/rssquick/issues">RSS Quick's GitHub issues page</a>, where you can also read every line of its source code.</p>
</section>
</main>

Expand Down
4 changes: 2 additions & 2 deletions docs/store/LISTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,11 @@ https://theideaplace.net/projects/RSSQuick/privacy.html

## Website

https://github.com/kellylford/rssquick
https://github.com/TheIdeaPlace/rssquick

## Support contact

support@theideaplace.net (issues also at https://github.com/kellylford/rssquick/issues)
support@theideaplace.net (issues also at https://github.com/TheIdeaPlace/rssquick/issues)

## Copyright

Expand Down
4 changes: 2 additions & 2 deletions ios/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,8 @@ macOS, and Apple rejects App Store builds made on one. Both are driven by
```bash
# Keychain Access -> login -> My Certificates -> "Apple Distribution: Kelly Ford (P887QF74N8)"
# (it must have a private key under it) -> Export -> dist.p12, with a password.
base64 -i dist.p12 | gh secret set IOS_DIST_CERT_P12 -R kellylford/rssquick
gh secret set IOS_DIST_CERT_PASSWORD -R kellylford/rssquick # paste the export password
base64 -i dist.p12 | gh secret set IOS_DIST_CERT_P12 -R TheIdeaPlace/rssquick
gh secret set IOS_DIST_CERT_PASSWORD -R TheIdeaPlace/rssquick # paste the export password
rm dist.p12
```

Expand Down
2 changes: 1 addition & 1 deletion ios/WhatToTest.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ What to try
- Import an OPML file exported from another feed reader, and make it your default.
- Try it with a braille display, and with larger text sizes.

Tell us what you find with the Send Beta Feedback option in TestFlight, or at https://github.com/kellylford/rssquick/issues. Anything about VoiceOver, braille or reading is especially welcome. You do not need to know the cause; what you heard, or could not reach, is the useful part.
Tell us what you find with the Send Beta Feedback option in TestFlight, or at https://github.com/TheIdeaPlace/rssquick/issues. Anything about VoiceOver, braille or reading is especially welcome. You do not need to know the cause; what you heard, or could not reach, is the useful part.
2 changes: 1 addition & 1 deletion ios/scripts/asc.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ def fit_whats_new(text, limit=4000):
"""
if len(text) <= limit:
return text
more = "\n\nThe full list is in CHANGELOG.md at https://github.com/kellylford/rssquick"
more = "\n\nThe full list is in CHANGELOG.md at https://github.com/TheIdeaPlace/rssquick"
cut = text[: limit - len(more)]
last_bullet = cut.rfind("\n- ")
if last_bullet > 0:
Expand Down
2 changes: 1 addition & 1 deletion macos/Sources/RSSQuickCore/FeedLoader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public enum FeedLoader {
configuration.urlCache = nil
configuration.httpAdditionalHeaders = [
// Some publishers reject requests with no User-Agent, or serve them a challenge page.
"User-Agent": "RSSQuick/1.1 (\(platform); +https://github.com/kellylford/rssquick)",
"User-Agent": "RSSQuick/1.1 (\(platform); +https://github.com/TheIdeaPlace/rssquick)",
"Accept": "application/rss+xml, application/atom+xml, application/xml;q=0.9, text/xml;q=0.9, */*;q=0.5",
// Most feeds are served compressed and are several times smaller for it.
"Accept-Encoding": "gzip, deflate",
Expand Down
4 changes: 2 additions & 2 deletions macos/Sources/RSSQuickCore/ReleaseCheck.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public struct AvailableRelease: Sendable, Equatable {
/// The Windows version is `src/RSSQuick/Services/ReleaseCheck.cs`. The two answer the same
/// questions, and their tests should change together.
public enum ReleaseCheck {
public static let latestReleaseAPI = URL(string: "https://api.github.com/repos/kellylford/rssquick/releases/latest")!
public static let latestReleaseAPI = URL(string: "https://api.github.com/repos/TheIdeaPlace/rssquick/releases/latest")!

/// The end of the disk image's name, which `build/make-dmg.sh` gives every release.
public static let macAssetSuffix = "-macos.dmg"
Expand All @@ -40,7 +40,7 @@ public enum ReleaseCheck {
configuration.urlCache = nil
configuration.httpAdditionalHeaders = [
// GitHub's API refuses requests with no User-Agent.
"User-Agent": "RSSQuick (+https://github.com/kellylford/rssquick)",
"User-Agent": "RSSQuick (+https://github.com/TheIdeaPlace/rssquick)",
"Accept": "application/vnd.github+json",
]
return URLSession(configuration: configuration)
Expand Down
4 changes: 2 additions & 2 deletions macos/Tests/RSSQuickCoreTests/ReleaseCheckTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ struct ReleaseCheckTests {
asset: String = "RSSQuick-1.3.0-macos.dmg",
draft: Bool = false,
prerelease: Bool = false,
page: String = "https://github.com/kellylford/rssquick/releases/tag/v1.3.0"
page: String = "https://github.com/TheIdeaPlace/rssquick/releases/tag/v1.3.0"
) -> String {
"""
{
Expand Down Expand Up @@ -43,7 +43,7 @@ struct ReleaseCheckTests {

#expect(found == AvailableRelease(
version: "1.3.0",
page: URL(string: "https://github.com/kellylford/rssquick/releases/tag/v1.3.0")!))
page: URL(string: "https://github.com/TheIdeaPlace/rssquick/releases/tag/v1.3.0")!))
}

@Test("The release that is running is not offered")
Expand Down
2 changes: 1 addition & 1 deletion macos/Tests/RSSQuickUITests/UpdateNoticeTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import RSSQuickCore
struct UpdateNoticeTests {
private static let release = AvailableRelease(
version: "1.3.0",
page: URL(string: "https://github.com/kellylford/rssquick/releases/tag/v1.3.0")!)
page: URL(string: "https://github.com/TheIdeaPlace/rssquick/releases/tag/v1.3.0")!)

private static let notice =
"RSS Quick 1.3.0 is available. Download RSS Quick 1.3.0 in the RSS Quick menu opens its page"
Expand Down
2 changes: 1 addition & 1 deletion macos/build/make-dmg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ REQUIREMENTS

macOS 13 Ventura or newer, on either Apple silicon or Intel.

https://github.com/kellylford/rssquick
https://github.com/TheIdeaPlace/rssquick
READ

rm -f "$dmg"
Expand Down
2 changes: 1 addition & 1 deletion src/RSSQuick/Services/AppUpdater.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public sealed record UpdateOffer(string Version, Uri Page, bool ReadyToInstall);
/// </remarks>
public sealed class AppUpdater : IDisposable
{
public const string RepositoryUrl = "https://github.com/kellylford/rssquick";
public const string RepositoryUrl = "https://github.com/TheIdeaPlace/rssquick";

private readonly UpdateManager? _manager;

Expand Down
2 changes: 1 addition & 1 deletion src/RSSQuick/Services/FeedLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ private static HttpClient CreateClient()
};

// Some publishers reject requests with no User-Agent, or serve them a challenge page.
client.DefaultRequestHeaders.UserAgent.ParseAdd("RSSQuick/1.1 (+https://github.com/kellylford/rssquick)");
client.DefaultRequestHeaders.UserAgent.ParseAdd("RSSQuick/1.1 (+https://github.com/TheIdeaPlace/rssquick)");
client.DefaultRequestHeaders.Accept.ParseAdd("application/rss+xml, application/atom+xml, application/xml;q=0.9, text/xml;q=0.9, */*;q=0.5");

return client;
Expand Down
4 changes: 2 additions & 2 deletions src/RSSQuick/Services/ReleaseCheck.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,15 @@ public sealed record AvailableRelease(Version Version, Uri Page);
public static class ReleaseCheck
{
public static readonly Uri LatestReleaseApi =
new("https://api.github.com/repos/kellylford/rssquick/releases/latest");
new("https://api.github.com/repos/TheIdeaPlace/rssquick/releases/latest");

private static readonly HttpClient Http = CreateClient();

private static HttpClient CreateClient()
{
var client = new HttpClient { Timeout = TimeSpan.FromSeconds(15) };
// GitHub's API refuses requests with no User-Agent.
client.DefaultRequestHeaders.UserAgent.ParseAdd("RSSQuick (+https://github.com/kellylford/rssquick)");
client.DefaultRequestHeaders.UserAgent.ParseAdd("RSSQuick (+https://github.com/TheIdeaPlace/rssquick)");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github+json"));
return client;
}
Expand Down
4 changes: 2 additions & 2 deletions tests/RSSQuick.Tests/ReleaseCheckTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ private static string Release(
string asset = "RSSQuick-1.3.0-portable-win-x64.zip",
bool draft = false,
bool prerelease = false,
string page = "https://github.com/kellylford/rssquick/releases/tag/v1.3.0") => $$"""
string page = "https://github.com/TheIdeaPlace/rssquick/releases/tag/v1.3.0") => $$"""
{
"tag_name": "{{tag}}",
"html_url": "{{page}}",
Expand All @@ -43,7 +43,7 @@ public void A_newer_release_with_a_download_for_this_copy_is_offered()

Assert.NotNull(release);
Assert.Equal(new Version(1, 3, 0), release.Version);
Assert.Equal("https://github.com/kellylford/rssquick/releases/tag/v1.3.0", release.Page.AbsoluteUri);
Assert.Equal("https://github.com/TheIdeaPlace/rssquick/releases/tag/v1.3.0", release.Page.AbsoluteUri);
}

[Fact]
Expand Down
2 changes: 1 addition & 1 deletion tests/RSSQuick.Tests/UpdateOfferTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace RSSQuick.Tests;
public class UpdateOfferTests
{
private static readonly UpdateOffer Downloaded =
new("1.3.0", new Uri("https://github.com/kellylford/rssquick/releases/tag/v1.3.0"), ReadyToInstall: true);
new("1.3.0", new Uri("https://github.com/TheIdeaPlace/rssquick/releases/tag/v1.3.0"), ReadyToInstall: true);

private static readonly UpdateOffer Available = Downloaded with { ReadyToInstall = false };

Expand Down
Loading