Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
7ec2bdb
Upgrade to .NET 10
HowardvanRooijen Jan 26, 2026
f747a7c
Upgrade to ZF
HowardvanRooijen Jan 26, 2026
cc33bb0
Update ZF / PR Autoflow / GitHub Actions via:
HowardvanRooijen Jan 26, 2026
f616282
Remove unused directives
HowardvanRooijen Jan 26, 2026
2a53a4b
Fix typos
HowardvanRooijen Jan 26, 2026
4e98432
Add shared dictionary
HowardvanRooijen Jan 26, 2026
ef64498
Refactor to file-scoped namespaces
HowardvanRooijen Jan 26, 2026
6a7b5f9
Inline out variables
HowardvanRooijen Jan 26, 2026
7b930ca
Refactor string usage to use lowercase 'string' instead of 'String' a…
HowardvanRooijen Jan 26, 2026
483ffc1
Use in-built types
HowardvanRooijen Jan 26, 2026
26d688b
Refactor string manipulation to use range operator for improved reada…
HowardvanRooijen Jan 26, 2026
bab98d7
Merge Patterns
HowardvanRooijen Jan 26, 2026
d54fb42
Update Dictionary
HowardvanRooijen Jan 26, 2026
296f422
Use Object Initializers
HowardvanRooijen Jan 26, 2026
cfbc9a2
Use nameof()
HowardvanRooijen Jan 26, 2026
ca3c6ab
Make fields readonly
HowardvanRooijen Jan 26, 2026
773a9e8
Refactor using declaration
HowardvanRooijen Jan 26, 2026
2ccfacc
Fix typos
HowardvanRooijen Jan 26, 2026
20fa172
Use Collection Expressions
HowardvanRooijen Jan 26, 2026
c24ad3e
Run dotnet format to deal with spacing issues
HowardvanRooijen Jan 26, 2026
2f7f16b
Remove redundant TestContext property implementation from syndication…
HowardvanRooijen Jan 26, 2026
7e928ab
Untabify
HowardvanRooijen Jan 26, 2026
2046931
Refactor code for improved readability and consistency across various…
HowardvanRooijen Jan 26, 2026
44fdc3e
Replace custom Guard utility with .NET exception throw helpers
HowardvanRooijen Jan 26, 2026
3dabb59
Convert field back properties to auto-properties where appropriate.
HowardvanRooijen Jan 26, 2026
735862b
Remove unused security permission attributes from configuration classes
HowardvanRooijen Jan 26, 2026
a8e2380
Refactor to use negate pattern
HowardvanRooijen Jan 26, 2026
ab4aff8
Use Collection Expressions and negate patterns
HowardvanRooijen Jan 26, 2026
d3e1c49
Modernize codebase with C# 9 features and best practices
HowardvanRooijen Jan 26, 2026
9c2e942
Update types which implement IComparable to reflect the nullability
HowardvanRooijen Jan 26, 2026
01d6f4a
Fix Test Failures due to Collection Expression refactor.
HowardvanRooijen Jan 26, 2026
84db645
Update the test project to use MTP.
HowardvanRooijen Jan 26, 2026
52a2180
Refactor unit tests for syndication extensions to use Shouldly assert…
HowardvanRooijen Jan 26, 2026
38a2f03
Use Compound Assignment
HowardvanRooijen Jan 26, 2026
2a4e4a9
Fix IDE0059 warnings
HowardvanRooijen Jan 26, 2026
5e25cf0
Refactor parameter type checks to use pattern matching in syndication…
HowardvanRooijen Jan 26, 2026
d1d22f8
Refactor StreamReader usage for improved readability
HowardvanRooijen Jan 26, 2026
3db5463
Use Compound Assignment
HowardvanRooijen Jan 26, 2026
37a6489
Refactor: Remove unnecessary SuppressMessage attributes and optimize …
HowardvanRooijen Jan 26, 2026
870c322
Refactor: Change method visibility to static for extension creation m…
HowardvanRooijen Jan 26, 2026
35f9612
Refactor extension handling in APML, BlogML, and RSD classes
HowardvanRooijen Jan 26, 2026
aa1fd2b
Refactor: Optimize encoding handling and simplify null checks in Feed…
HowardvanRooijen Jan 26, 2026
335486f
Refactor YahooMedia and ITunes classes to use target-typed new expres…
HowardvanRooijen Jan 26, 2026
6a18c22
Refactor: Simplify encoding handling and improve null checks in Syndi…
HowardvanRooijen Jan 26, 2026
a1f76a0
Add comparison operators for various syndication extension classes
HowardvanRooijen Jan 26, 2026
6a9831e
Refactor comparison operators in YahooMedia classes to simplify null …
HowardvanRooijen Jan 27, 2026
bb5d75d
Fixed all CA5372 warnings about unsafe XPathDocument usage to prevent…
HowardvanRooijen Jan 27, 2026
8437864
Update .gitignore to include SBOM files, Claude directory, devcontain…
HowardvanRooijen Jan 27, 2026
ed8da81
Add .NET analyzers configuration to project files for improved code a…
HowardvanRooijen Jan 27, 2026
cb2bd6c
Fixed ~100 CA2251 warnings across 4 projects by replacing string.Comp…
HowardvanRooijen Jan 27, 2026
bfe7d81
Dictionary Optimization (CA1854, CA1864) - 6 warnings fixed
HowardvanRooijen Jan 27, 2026
4d285e0
Fix:
HowardvanRooijen Jan 27, 2026
7976cbd
Add suppressions.
HowardvanRooijen Jan 27, 2026
223b67f
Add warnings suppression for MD5 and SHA1 hash algorithms in YahooMed…
HowardvanRooijen Jan 27, 2026
13b8722
Fix typo
HowardvanRooijen Jan 27, 2026
8c4a769
Refactor YahooMedia and iTunes classes to use IList instead of Collec…
HowardvanRooijen Jan 27, 2026
75f8518
Refactor configuration management by removing obsolete classes and ad…
HowardvanRooijen Jan 27, 2026
302a448
Add comprehensive tests for YahooMediaSyndicationExtension and relate…
HowardvanRooijen Jan 27, 2026
db304c7
Add unit tests for Atom Publishing and Yahoo Media extensions
HowardvanRooijen Jan 27, 2026
6392bb9
Fix attribute name in FeedSynchronizationHistory serialization
HowardvanRooijen Jan 28, 2026
e738948
Convert the Examples Library into a CLI that can be called either int…
HowardvanRooijen Jan 28, 2026
64ce092
Update the feed labels to match the feeds
HowardvanRooijen Jan 28, 2026
03a83da
Add comprehensive unit tests and fix date parsing bugs
HowardvanRooijen Jan 28, 2026
10198d5
Add Sitemap 0.9 protocol implementation
HowardvanRooijen Jan 28, 2026
aad16b4
Improve Google Video Sitemap 1.1 specification implementation
HowardvanRooijen Jan 28, 2026
d481bf8
Implement IEquatable<T>
HowardvanRooijen Jan 28, 2026
d547685
Replace IComparable with IComparable<T> across 119 types
HowardvanRooijen Jan 28, 2026
302d9dc
Remove Old System.Configuration classes from Argotic.Core.Syndication…
HowardvanRooijen Jan 28, 2026
e2b160f
Add IComparisonOperators interface with extension-based comparison op…
HowardvanRooijen Jan 28, 2026
515f302
Apply C# 14 modernization patterns across codebase
HowardvanRooijen Jan 28, 2026
70f1a2a
Fix bitwise OR bug in CompareTo methods
HowardvanRooijen Jan 28, 2026
9b2d04c
Apply C# 14 modernization patterns across codebase
HowardvanRooijen Jan 29, 2026
661ccfc
Apply comprehensive C# 7-14 modernization patterns across codebase
HowardvanRooijen Jan 29, 2026
0965136
Apply comprehensive C# modernization: generics, extension methods, an…
HowardvanRooijen Jan 29, 2026
721007a
Refactor documentation comments to use 'string' instead of 'String' f…
HowardvanRooijen Jan 29, 2026
ef3d3a3
Revert "Refactor documentation comments to use 'string' instead of 'S…
HowardvanRooijen Jan 29, 2026
ff0e0f0
Refactor documentation comments to use 'string' instead of 'String' f…
HowardvanRooijen Jan 29, 2026
9a3b89c
Apply editorconfig formatting styles.
HowardvanRooijen Jan 29, 2026
4f778b7
Remove unnecessary whitespace from using directives in multiple files
HowardvanRooijen Jan 29, 2026
a3ec6fd
Update Readme and add a ChangeLog
HowardvanRooijen Jan 29, 2026
9fa5e6d
Update project files for .NET 10 compatibility and enhance package me…
HowardvanRooijen Jan 29, 2026
4d01f00
Update README to reflect changes in project sponsorship and newslette…
HowardvanRooijen Jan 29, 2026
136846e
Update README to correct build status badge URL and fix IP Maturity M…
HowardvanRooijen Jan 29, 2026
405e4e9
Update imm.yaml to enhance scoring and descriptions for various measures
HowardvanRooijen Jan 29, 2026
2afb447
Refactor imm.yaml to improve documentation clarity and update descrip…
HowardvanRooijen Jan 29, 2026
06fc437
Add quick start examples for reading and creating RSS feeds and sitem…
HowardvanRooijen Jan 30, 2026
d3382d1
Fix SA1514 warnings
HowardvanRooijen Jan 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
50 changes: 50 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Auto detect text files and perform LF normalization
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.cs text
*.csx text
*.csproj text
*.sln text
*.xaml text
*.config text
*.xml text
*.json text
*.md text
*.txt text
*.yml text
*.yaml text
*.sh text eol=lf
*.ps1 text eol=crlf
*.cmd text eol=crlf
*.bat text eol=crlf

# Declare files that will always have LF line endings on checkout.
.gitattributes text eol=lf
.gitignore text eol=lf
*.sh text eol=lf

# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
*.slnx text eol=crlf
*.cmd text eol=crlf
*.bat text eol=crlf
*.ps1 text eol=crlf

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.dll binary
*.exe binary
*.pdb binary
*.zip binary
*.gz binary
*.tar binary
*.7z binary
*.nupkg binary
*.snk binary
*.pfx binary
2 changes: 1 addition & 1 deletion .github/config/pr-autoflow.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"AUTO_MERGE_PACKAGE_WILDCARD_EXPRESSIONS": "[\"Endjin.*\",\"System.*\",\"MSTest.*\"]",
"AUTO_MERGE_PACKAGE_WILDCARD_EXPRESSIONS": "[]",
"AUTO_RELEASE_PACKAGE_WILDCARD_EXPRESSIONS": "[]"
}
7 changes: 7 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,11 @@ updates:
microsoft-extensions:
patterns:
- Microsoft.Extensions.*
- package-ecosystem: "github-actions"
directories:
- "/"
- "actions/**/*"
schedule:
interval: "daily"
open-pull-requests-limit: 10
Comment on lines +16 to +21
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dependabot config uses directory (singular), not directories. To monitor multiple directories you generally need multiple update entries (one per directory). As written, this block is likely invalid and may cause Dependabot to ignore the configuration.

Suggested change
directories:
- "/"
- "actions/**/*"
schedule:
interval: "daily"
open-pull-requests-limit: 10
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 10
- package-ecosystem: "github-actions"
directory: "/actions"
schedule:
interval: "daily"
open-pull-requests-limit: 10

Copilot uses AI. Check for mistakes.

12 changes: 9 additions & 3 deletions .github/workflows/auto_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,10 @@ jobs:
EOF
echo "is_release_pending : ${{ steps.get_release_pending_pr_list.outputs.is_release_pending }}"

- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 #v4.1.1
- name: Enable long paths
run: git config --global core.longpaths true

- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2
- name: Read pr-autoflow configuration
id: get_pr_autoflow_config
uses: endjin/pr-autoflow/actions/read-configuration@v4
Expand Down Expand Up @@ -207,11 +210,14 @@ jobs:
if: |
needs.check_ready_to_release.outputs.ready_to_release == 'true'
steps:
- uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4.0.0
- uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: '6.x'

- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 #v4.1.1
- name: Enable long paths
run: git config --global core.longpaths true

- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2
with:
# ensure we are creating the release tag on the default branch
ref: ${{ needs.lookup_default_branch.outputs.branch_name }}
Expand Down
64 changes: 20 additions & 44 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,24 @@ on:
push:
branches:
- main
- master
tags:
- '*'
pull_request:
branches:
- main
- master
workflow_dispatch:
inputs:
forcePublish:
description: When true the Publish stage will always be run, otherwise it only runs for tagged versions.
required: false
default: false
type: boolean
skipCleanup:
description: When true the pipeline clean-up stage will not be run. For example, the cache used between pipeline stages will be retained.
forcePublicNugetDestination:
description: When true the NuGet Publish destination will always be set to nuget.org. (Force publishing normally publishes to GitHub Packages, if not tagged version)
required: false
default: false
type: boolean

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
group: ${{ github.workflow }}-${{ github.sha }}
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using github.sha in the concurrency group defeats cancel-in-progress (each commit has a unique group, so older runs won't be canceled). If the goal is to cancel superseded runs for the same branch/PR, use a stable key like github.ref (push) and/or github.event.pull_request.number (PRs).

Suggested change
group: ${{ github.workflow }}-${{ github.sha }}
group: ${{ github.workflow }}-${{ github.ref }}

Copilot uses AI. Check for mistakes.
cancel-in-progress: true

permissions:
Expand All @@ -36,48 +32,28 @@ permissions:
pull-requests: write # enable test result annotations

jobs:
prepareConfig:
name: Prepare Configuration
build:
name: Run Build
runs-on: ubuntu-latest
outputs:
RESOLVED_ENV_VARS: ${{ steps.prepareEnvVarsAndSecrets.outputs.environmentVariablesYamlBase64 }}
RESOLVED_SECRETS: ${{ steps.prepareEnvVarsAndSecrets.outputs.secretsYamlBase64 }}
steps:
# Declare any environment variables and/or secrets that need to be available inside the build process
- uses: endjin/Endjin.RecommendedPractices.GitHubActions/actions/prepare-env-vars-and-secrets@main
id: prepareEnvVarsAndSecrets
with:
environmentVariablesYaml: |
BUILDVAR_NuGetPublishSource: "${{ startsWith(github.ref, 'refs/tags/') && 'https://api.nuget.org/v3/index.json' || format('https://nuget.pkg.github.com/{0}/index.json', github.repository_owner) }}"
# BUILDVAR_ContainerRegistryFqdn: "${{ vars.DEFAULT_CONTAINER_REGISTRY_FQDN }}"
# BUILDVAR_UseAcrTasks: "true"
ZF_NUGET_PUBLISH_SOURCE: ${{ (startsWith(github.ref, 'refs/tags/') || github.event.inputs.forcePublicNugetDestination == 'true') && 'https://api.nuget.org/v3/index.json' || format('https://nuget.pkg.github.com/{0}/index.json', github.repository_owner) }}
secretsYaml: |
NUGET_API_KEY: "${{ startsWith(github.ref, 'refs/tags/') && secrets.NUGET_APIKEY || secrets.BUILD_PUBLISHER_PAT }}"
NUGET_API_KEY: "${{ startsWith(github.ref, 'refs/tags/') && secrets.ENDJIN_NUGET_APIKEY || secrets.ENDJIN_GITHUB_PUBLISHER_PAT }}"
secretsEncryptionKey: ${{ secrets.SHARED_WORKFLOW_KEY }}

build:
needs: prepareConfig
uses: endjin/Endjin.RecommendedPractices.GitHubActions/.github/workflows/scripted-build-pipeline.yml@main
with:
netSdkVersion: '9.x'
additionalNetSdkVersion: '8.x'
# workflow_dispatch inputs are always strings, the type property is just for the UI
forcePublish: ${{ github.event.inputs.forcePublish == 'true' || github.event_name == 'pull_request' }}
skipCleanup: ${{ github.event.inputs.skipCleanup == 'true' }}
# testArtifactName: ''
# testArtifactPath: ''
compilePhaseEnv: ${{ needs.prepareConfig.outputs.RESOLVED_ENV_VARS }}
testPhaseEnv: ${{ needs.prepareConfig.outputs.RESOLVED_ENV_VARS }}
packagePhaseEnv: ${{ needs.prepareConfig.outputs.RESOLVED_ENV_VARS }}
publishPhaseEnv: ${{ needs.prepareConfig.outputs.RESOLVED_ENV_VARS }}
publishArtifactName: 'image-tag'
publishArtifactPath: 'image-tag'

secrets:
compilePhaseAzureCredentials: ${{ secrets.AZURE_READER_CREDENTIALS }}
# testPhaseAzureCredentials: ${{ secrets.TESTS_KV_READER_CREDENTIALS }}
# packagePhaseAzureCredentials: ${{ secrets.AZURE_PUBLISH_CREDENTIALS }}
# publishPhaseAzureCredentials: ${{ secrets.AZURE_PUBLISH_CREDENTIALS }}
# compilePhaseSecrets: ${{ needs.prepareConfig.outputs.RESOLVED_SECRETS }}
# testPhaseSecrets: ${{ needs.prepareConfig.outputs.RESOLVED_SECRETS }}
# packagePhaseSecrets: ${{ needs.prepareConfig.outputs.RESOLVED_SECRETS }}
publishPhaseSecrets: ${{ needs.prepareConfig.outputs.RESOLVED_SECRETS }}
- uses: endjin/Endjin.RecommendedPractices.GitHubActions/actions/run-build-process@main
id: run_build
with:
netSdkVersion: '10.x'
forcePublish: ${{ github.event.inputs.forcePublish == 'true' }}
buildArtifactName: 'image-tag'
buildArtifactPath: 'image-tag'
buildAzureCredentials: ${{ secrets.ENDJIN_PROD_ACR_READER_CREDENTIALS }}
buildEnv: ${{ steps.prepareEnvVarsAndSecrets.outputs.environmentVariablesYamlBase64 }}
buildSecrets: ${{ steps.prepareEnvVarsAndSecrets.outputs.secretsYamlBase64 }}
secretsEncryptionKey: ${{ secrets.SHARED_WORKFLOW_KEY }}
token: ${{ secrets.GITHUB_TOKEN }}
4 changes: 3 additions & 1 deletion .github/workflows/dependabot_approve_and_label.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ jobs:
is_auto_release_candidate: ${{ steps.parse_dependabot_pr_autorelease.outputs.is_interesting_package }}
semver_increment: ${{ steps.parse_dependabot_pr_automerge.outputs.semver_increment }}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 #v4.1.1
- name: Enable long paths
run: git config --global core.longpaths true
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2
- name: Read pr-autoflow configuration
id: get_pr_autoflow_config
uses: endjin/pr-autoflow/actions/read-configuration@v4
Expand Down
Loading
Loading