Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
48e3be8
chore: add coderabbit config for PR filters
Mar 9, 2026
fafd8cd
chore: reorganized NX infrastructure and cleaned up .NET messaging (b…
Mar 7, 2026
ddadf33
chore: reorganized NX infrastructure and cleaned up .NET messaging (b…
Mar 7, 2026
02ea934
chore: remove Provider project as requested
Mar 9, 2026
2b1b3af
chore: reorganized NX infrastructure and cleaned up .NET messaging (b…
Mar 7, 2026
69c8b6e
chore: remove Provider project as requested
Mar 9, 2026
82ae7ea
chore: merge master into feature/sprint-8b2-monorepo-cleanup and reso…
Mar 10, 2026
79c31bf
feat: Initialize Nx workspace with customer and provider web applicat…
Mar 10, 2026
f9977bc
feat: Introduce RabbitMQ-based Dead Letter Queue (DLQ) system with in…
Mar 10, 2026
9cdeef1
feat: Define the new frontend strategy for customer applications usin…
Mar 10, 2026
e15b344
feat: Add initial package.json and package-lock.json for the MeAjudaA…
Mar 10, 2026
f3854b9
feat: Add MeAjudaAi.Web.Customer project to Nx workspace.
Mar 10, 2026
20e1e3d
feat: create new api-client library and its associated Nx workspace c…
Mar 10, 2026
f3b2c75
feat: Implement NextAuth.js for customer authentication with Keycloak…
Mar 10, 2026
abb0721
feat: implement dead letter messaging, customer authentication, and A…
Mar 10, 2026
74cda48
chore: remove nx cache and workspace-data from version control, fix R…
Mar 10, 2026
69277ba
fix(customer-web): resolve next.js build breaking on config, missing …
Mar 10, 2026
99ef39b
feat: Add new api-client library and RabbitMQ infrastructure manager.
Mar 10, 2026
7e35f73
fix(git): remove .nx cache and temporary artifacts from tracking and …
Mar 10, 2026
cf3eae4
fix(git): remove build artifacts (dist folder) from tracking and upda…
Mar 10, 2026
dcd5ef7
fix(web): make auth config build-safe and purge generated code from t…
Mar 10, 2026
5cd9675
ci: automate API client generation in PR validation
Mar 10, 2026
e679df0
fix(review): apply CodeRabbit batch 6 findings
Mar 10, 2026
20a30b8
fix(customer-web): remove explicit any type causing next lint failure
Mar 10, 2026
ddc74a2
fix(review): apply CodeRabbit batch 7 findings & patch CI Swashbuckle…
Mar 10, 2026
2878f81
fix(review): bypass security validation for Testing env to fix Swashb…
Mar 10, 2026
0731e14
fix(review): integrate final batch 8 feedback for rabbitmq, keycloak …
Mar 10, 2026
54fb2e9
fix(review): integrate batch 9 review feedback and resolve swagger CI…
Mar 10, 2026
a2f627b
chore: code quality improvements, sonarqube overrides and ci thresholds
Mar 10, 2026
de4c207
fix(customer-web): resolve fatal next.js alias module resolution and …
Mar 10, 2026
90e3911
fix(customer-web): update apiProviders endpoint signature mapping aga…
Mar 10, 2026
e7dafb7
feat: Implement customer search page with provider listing, search fi…
Mar 10, 2026
c1c86dd
feat: Implement foundational modular infrastructure, shared utilities…
Mar 11, 2026
8586ebb
feat: Implement a new pull request validation workflow with code qual…
Mar 11, 2026
57f4c0a
feat: Implement Keycloak authentication, environment helpers, a funct…
Mar 11, 2026
9a57b47
feat: Introduce functional Result type for error handling, add unit t…
Mar 11, 2026
739d96b
feat: Add null service implementations for blob storage and document …
Mar 11, 2026
69577c0
feat: Implement a comprehensive pull request validation workflow, int…
Mar 12, 2026
bf6f7d7
ci: Add GitHub Actions workflow for pull request validation including…
Mar 12, 2026
004b1cd
feat: Implement comprehensive API security configuration, functional …
Mar 12, 2026
0b90a4e
feat: Introduce `SecurityExtensions` for comprehensive API security c…
Mar 12, 2026
182f715
feat: Set up comprehensive E2E testing with Testcontainers, add PR va…
Mar 12, 2026
0096b3b
feat: add a utility script to generate Coverlet runsettings XML for c…
Mar 12, 2026
7831eee
feat: Add Documents module with API and infrastructure extensions, in…
Mar 12, 2026
4e2f74e
feat: Introduce functional Result type for robust error handling, a N…
Mar 12, 2026
2f8e8de
test: Add unit tests for `SecurityExtensions.ValidateSecurityConfigur…
Mar 13, 2026
286867d
feat: Introduce Documents infrastructure project with NullDocumentInt…
Mar 13, 2026
5ba9c98
feat: Implement comprehensive security configurations including authe…
Mar 13, 2026
d2a9319
feat: Add a script to generate Coverlet runsettings files with XML es…
Mar 13, 2026
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: 2 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,5 @@ reviews:
- "!**/obj/**"
- "!**/CoverageReport/**"
- "!**/TestResults/**"
- "!**/packages.lock.json"
- "!**/MeAjudaAi.Web.Provider/**"
107 changes: 65 additions & 42 deletions .github/scripts/generate-runsettings.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,60 +4,83 @@
# This script is sourced by GitHub Actions workflows to avoid code duplication.
#

# Strict error handling:
# -e: exit on error
# -u: exit on unset variable
# -o pipefail: catch errors in piped commands
set -euo pipefail

# Escape XML special characters to prevent malformed XML output
escape_xml() {
local input="$1"
# Use sed for compatibility - escape &, <, >, ", '
echo "$input" | sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'\''/\&apos;/g'
local input="$1"
# Use sed for compatibility - escape &, <, >, ", '
echo "$input" | sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'\''/\&apos;/g'
}

# Generate a Coverlet runsettings file with the specified filters.
#
# Parameters:
# $1 - Output file path
# $1 - Output file path (REQUIRED)
# $2 - Assemblies to exclude from coverage (e.g., "[*]*Tests*")
# $3 - Files to exclude by path (glob patterns)
# $4 - Attributes to exclude (e.g., "Obsolete,GeneratedCode")
# $5 - (Optional) Assemblies to include in coverage
#
# Example:
# generate_runsettings "/tmp/unit.runsettings" \
# "[*]*Tests*;[*]*.Migrations.*" \
# "**/Migrations/**" \
# "Obsolete,GeneratedCode,CompilerGenerated" \
# "[MeAjudaAi.*]*"
#
# Returns 0 on success, 1 on failure.
generate_runsettings() {
local file="$1"
local exclude_filter="$2"
local exclude_by_file="$3"
local exclude_by_attr="$4"
local include_filter="${5:-}" # Optional parameter

# Escape XML special characters
exclude_filter=$(escape_xml "$exclude_filter")
exclude_by_file=$(escape_xml "$exclude_by_file")
exclude_by_attr=$(escape_xml "$exclude_by_attr")

{
echo '<?xml version="1.0" encoding="utf-8"?>'
echo '<RunSettings>'
echo ' <DataCollectionRunSettings>'
echo ' <DataCollectors>'
echo ' <DataCollector friendlyName="XPlat Code Coverage">'
echo ' <Configuration>'
echo ' <Format>opencover</Format>'
if [ -n "$include_filter" ]; then
include_filter=$(escape_xml "$include_filter")
echo " <Include>${include_filter}</Include>"
local file="${1:-}"
local exclude_filter="${2:-}"
local exclude_by_file="${3:-}"
local exclude_by_attr="${4:-}"
local include_filter="${5:-}"

# Validate required parameters
if [ -z "$file" ]; then
echo "❌ ERROR: Output file path is required as first parameter." >&2
return 1
fi

echo "📝 Generating runsettings: $file" >&2

# Escape XML special characters
exclude_filter=$(escape_xml "$exclude_filter")
exclude_by_file=$(escape_xml "$exclude_by_file")
exclude_by_attr=$(escape_xml "$exclude_by_attr")

# Use a global variable for the temporary file so the EXIT trap can access it
temp_file=$(mktemp)
trap 'rm -f "$temp_file"' EXIT

{
echo '<?xml version="1.0" encoding="utf-8"?>'
echo '<RunSettings>'
echo ' <DataCollectionRunSettings>'
echo ' <DataCollectors>'
echo ' <DataCollector friendlyName="XPlat Code Coverage">'
echo ' <Configuration>'
echo ' <Format>cobertura</Format>'
if [ -n "$include_filter" ]; then
include_filter=$(escape_xml "$include_filter")
echo " <Include>${include_filter}</Include>"
fi
echo " <Exclude>${exclude_filter}</Exclude>"
echo " <ExcludeByFile>${exclude_by_file}</ExcludeByFile>"
echo " <ExcludeByAttribute>${exclude_by_attr}</ExcludeByAttribute>"
echo ' </Configuration>'
echo ' </DataCollector>'
echo ' </DataCollectors>'
echo ' </DataCollectionRunSettings>'
echo '</RunSettings>'
} > "$temp_file"

# Verify write and move to final destination
if [ -s "$temp_file" ]; then
mv "$temp_file" "$file"
echo "✅ Generated: $file" >&2
return 0
else
echo "❌ ERROR: Failed to generate runsettings file (empty or write failed)." >&2
rm -f "$temp_file"
return 1
fi
echo " <Exclude>${exclude_filter}</Exclude>"
echo " <ExcludeByFile>${exclude_by_file}</ExcludeByFile>"
echo " <ExcludeByAttribute>${exclude_by_attr}</ExcludeByAttribute>"
echo ' </Configuration>'
echo ' </DataCollector>'
echo ' </DataCollectors>'
echo ' </DataCollectionRunSettings>'
echo '</RunSettings>'
} > "$file"
}
Loading
Loading