From 86f5cb15b8f6f23656cfa6e094a8066c73d2f791 Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Sat, 8 Nov 2025 19:31:52 +0530 Subject: [PATCH 01/18] fix(package): revert version to 1.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 15024f0..f3715e4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pulse-server", - "version": "1.3.0", + "version": "1.0.0", "description": "AI-powered Express.js server with OpenRouter integration", "main": "server.js", "type": "module", From 5160d6813f9eb1a67dbd63d921362ca2ac42cce8 Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Sat, 8 Nov 2025 20:00:48 +0530 Subject: [PATCH 02/18] feat(ci): add GitHub Actions workflows for auto release, build and deploy, PR linting, and testing --- .drone.yml | 653 ------------------------- .github/workflows/auto-release.yml | 21 + .github/workflows/build-and-deploy.yml | 44 ++ .github/workflows/pr-lint.yml | 26 + .github/workflows/release.yml | 21 + .github/workflows/test-on-pr.yml | 28 ++ 6 files changed, 140 insertions(+), 653 deletions(-) delete mode 100644 .drone.yml create mode 100644 .github/workflows/auto-release.yml create mode 100644 .github/workflows/build-and-deploy.yml create mode 100644 .github/workflows/pr-lint.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/test-on-pr.yml diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 4a96779..0000000 --- a/.drone.yml +++ /dev/null @@ -1,653 +0,0 @@ ---- -kind: pipeline -type: docker -name: pr-lint - -# Lint PR titles and commits for conventional commits format -trigger: - event: - - pull_request - -steps: - - name: install-dependencies - image: node:20-alpine - commands: - - npm ci --only=dev - - - name: lint-pr-title - image: node:20-alpine - depends_on: - - install-dependencies - commands: - - | - echo "Validating PR title: ${DRONE_PULL_REQUEST_TITLE}" - # Check if title follows conventional commits format - if echo "${DRONE_PULL_REQUEST_TITLE}" | grep -qE "^(feat|fix|docs|style|refactor|perf|test|chore|ci|revert)(\(.+\))?!?:"; then - echo "โœ… PR title follows conventional commits format" - else - echo "โŒ PR title does not follow conventional commits format" - echo "Valid formats: feat(scope): description, fix: description, etc." - exit 1 - fi - when: - event: - - pull_request - - - name: lint-commits - image: node:20-alpine - depends_on: - - install-dependencies - commands: - - | - echo "Linting commits in PR..." - apk add --no-cache git - git fetch origin ${DRONE_TARGET_BRANCH} - # Lint each commit message - npx commitlint --from origin/${DRONE_TARGET_BRANCH} --to HEAD --verbose - when: - event: - - pull_request - - - name: check-pr-validation - image: alpine:latest - depends_on: - - lint-commits - commands: - - | - echo "========================================" - echo "โœ… PR Validation Complete" - echo "========================================" - echo "PR Title: ${DRONE_PULL_REQUEST_TITLE}" - echo "All commits follow conventional commits format" - echo "Valid commit types: feat, fix, docs, style, refactor, perf, test, chore, ci, revert" - echo "========================================" - when: - event: - - pull_request - - - name: notify-lint-failure - image: appleboy/drone-telegram - settings: - token: - from_secret: telegram_token - to: - from_secret: telegram_chat_id - message: | - โŒ PR Lint Failed! - - PR: #${DRONE_PULL_REQUEST} - Title: ${DRONE_PULL_REQUEST_TITLE} - Author: {{ commit.author }} - - Please ensure PR title and commits follow conventional commits format. - when: - status: - - failure - event: - - pull_request - ---- -kind: pipeline -type: docker -name: test-on-PR - -# Run tests on PR creation -trigger: - event: - - pull_request - -steps: - - name: startup-check - image: alpine:3.19 - commands: - - echo "========================================" - - echo "๐Ÿš€ Pipeline started successfully!" - - echo "========================================" - - date - - echo "Alpine version:" && cat /etc/alpine-release - - echo "========================================" - - - name: install-dependencies - image: node:20-alpine - commands: - - echo "Installing dependencies..." - - npm ci --loglevel=info - - echo "โœ… Dependencies installed successfully" - - - name: run-tests - image: node:20-alpine - environment: - NODE_ENV: test - # Disable API key auth in tests (tests expect auth to be disabled) - API_KEY_AUTH_ENABLED: "false" - # Test environment variables - DEFAULT_AI_MODEL: "deepseek/deepseek-chat" - OPENROUTER_API_KEY: - from_secret: OPENROUTER_API_KEY - OPENROUTER_BASE_URL: - from_secret: OPENROUTER_BASE_URL - GITHUB_API_TOKEN: - from_secret: GITHUB_API_TOKEN - GITHUB_REST_API_BASE_URL: - from_secret: GITHUB_REST_API_BASE_URL - GITHUB_GRAPHQL_API_BASE_URL: - from_secret: GITHUB_GRAPHQL_API_BASE_URL - # Force unbuffered output - FORCE_COLOR: "1" - commands: - - echo "========================================" - - echo "CI Test Environment Check" - - echo "========================================" - - node --version - - npm --version - - echo "Checking Jest installation..." - - ls -la node_modules/jest/bin/ || echo "Jest bin not found" - - echo "========================================" - - echo "Running tests..." - - echo "========================================" - - node --experimental-vm-modules node_modules/jest/bin/jest.js --ci --forceExit --runInBand --verbose --colors 2>&1 || exit 1 - - echo "========================================" - - echo "โœ… Tests completed successfully!" - - echo "========================================" - - - name: lint-commits - image: node:20-alpine - commands: - - npx commitlint --from HEAD~1 --to HEAD --verbose - - - name: test-server-connectivity - image: alpine:latest - commands: - - apk add --no-cache openssh-client curl netcat-openbsd - - echo "========================================" - - echo "๐Ÿ”Œ Testing SSH connection to deployment server" - - echo "========================================" - - echo "Target:" $DEPLOY_HOST":22" - - echo "User:" $DROPLET_USER - - nc -zv $DEPLOY_HOST 22 && echo "Port 22 is reachable" || echo "Connection to port 22 FAILED" - - echo "" - - echo "Testing SSH authentication..." - - mkdir -p ~/.ssh - - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519 - - chmod 600 ~/.ssh/id_ed25519 - - ssh-keyscan -t ed25519 $DEPLOY_HOST >> ~/.ssh/known_hosts 2>/dev/null || true - - ssh -v -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10 $DROPLET_USER@$DEPLOY_HOST "echo SSH connection successful" || echo "SSH connection FAILED" - - echo "" - - echo "Drone runner public IP:" - - wget -qO- ifconfig.me || curl -s ifconfig.me - - echo "========================================" - environment: - DEPLOY_HOST: - from_secret: DEPLOY_HOST - DROPLET_USER: - from_secret: DROPLET_USER - SSH_PRIVATE_KEY: - from_secret: SSH_PRIVATE_KEY - - - name: build-dry-run - image: alpine:latest - commands: - - echo "๐Ÿงช Testing build steps (dry-run)..." - # Test build and copy process - - mkdir -p /tmp/deploy-test - - cp -r . /tmp/deploy-test/ - # Exclude dev files - - rm -rf /tmp/deploy-test/node_modules - - rm -rf /tmp/deploy-test/.git - - rm -rf /tmp/deploy-test/tests - # Verify required files exist - - echo "โœ… Checking required files..." - - test -f /tmp/deploy-test/server.js && echo "โœ… server.js found" - - test -f /tmp/deploy-test/package.json && echo "โœ… package.json found" - - test -f /tmp/deploy-test/ecosystem.config.js && echo "โœ… ecosystem.config.js found" - - test -d /tmp/deploy-test/routes && echo "โœ… routes/ found" - - test -d /tmp/deploy-test/middleware && echo "โœ… middleware/ found" - - test -d /tmp/deploy-test/services && echo "โœ… services/ found" - - test -d /tmp/deploy-test/utils && echo "โœ… utils/ found" - # Show what would be deployed - - echo "๐Ÿ“ฆ Files to be deployed:" - - ls -lah /tmp/deploy-test/ | grep -E "^d|server.js|package|ecosystem" - - echo "๐Ÿงช Build dry-run complete!" - ---- -kind: pipeline -type: docker -name: build-and-deploy - -# Run only when release tag is created (v*.*.*) -trigger: - event: - - tag - ref: - - refs/tags/v* - -steps: - - name: install-dependencies - image: node:20-alpine - commands: - - echo "Installing dependencies..." - - npm ci --loglevel=info - - echo "โœ… Dependencies installed successfully" - - - name: install-test-deps - image: node:20-alpine - commands: - - echo "Installing test dependencies..." - - npm ci --loglevel=info - - echo "โœ… Test dependencies installed" - - - name: run-tests - image: node:20-alpine - depends_on: - - install-test-deps - environment: - NODE_ENV: test - # Disable API key auth in tests (tests expect auth to be disabled) - API_KEY_AUTH_ENABLED: "false" - # Test environment variables - DEFAULT_AI_MODEL: "deepseek/deepseek-chat" - OPENROUTER_API_KEY: - from_secret: OPENROUTER_API_KEY - OPENROUTER_BASE_URL: - from_secret: OPENROUTER_BASE_URL - GITHUB_API_TOKEN: - from_secret: GITHUB_API_TOKEN - GITHUB_REST_API_BASE_URL: - from_secret: GITHUB_REST_API_BASE_URL - GITHUB_GRAPHQL_API_BASE_URL: - from_secret: GITHUB_GRAPHQL_API_BASE_URL - FORCE_COLOR: "1" - commands: - - echo "========================================" - - echo "CI Test Environment Check" - - echo "========================================" - - node --version - - npm --version - - echo "Checking Jest installation..." - - ls -la node_modules/jest/bin/ || echo "Jest bin not found" - - echo "========================================" - - echo "Running tests..." - - echo "========================================" - - node --experimental-vm-modules node_modules/jest/bin/jest.js --ci --forceExit --runInBand --verbose --colors 2>&1 || exit 1 - - echo "========================================" - - echo "โœ… Tests completed successfully!" - - echo "========================================" - - - name: build-and-copy - image: alpine:latest - commands: - - echo "Building application..." - # Copy necessary files to deployment directory - - mkdir -p /tmp/deploy - - cp -r . /tmp/deploy/ - # Exclude dev files - - rm -rf /tmp/deploy/node_modules - - rm -rf /tmp/deploy/.git - - rm -rf /tmp/deploy/tests - - echo "Build complete" - volumes: - - name: deploy - path: /tmp/deploy - - - name: test-connectivity - image: alpine:latest - commands: - - apk add --no-cache netcat-openbsd curl - - echo "Testing connection to $DEPLOY_HOST:22" - - nc -zv $DEPLOY_HOST 22 || echo "Connection to port 22 FAILED" - - echo "Drone runner public IP:" - - wget -qO- ifconfig.me || curl -s ifconfig.me - environment: - DEPLOY_HOST: - from_secret: DEPLOY_HOST - - - name: copy-to-server - image: alpine:latest - depends_on: - - build-and-copy - environment: - DEPLOY_HOST: - from_secret: DEPLOY_HOST - DROPLET_USER: - from_secret: DROPLET_USER - SSH_PRIVATE_KEY: - from_secret: SSH_PRIVATE_KEY - commands: - - apk add --no-cache openssh-client rsync - - mkdir -p ~/.ssh - - echo "$${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa - - chmod 600 ~/.ssh/id_rsa - - ssh-keyscan -H "$${DEPLOY_HOST}" >> ~/.ssh/known_hosts - - echo "Copying files to server..." - - | - # Use rsync from /tmp/deploy volume - rsync -avz \ - --rsync-path="sudo rsync" \ - -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no" \ - /tmp/deploy/ \ - $${DROPLET_USER}@$${DEPLOY_HOST}:/var/www/pulse-server/ || true - # Verify key files were copied - ssh -i ~/.ssh/id_rsa $${DROPLET_USER}@$${DEPLOY_HOST} "ls -lh /var/www/pulse-server/{server.js,package.json,ecosystem.config.js}" - - - name: fix-permissions - image: alpine:latest - depends_on: - - copy-to-server - environment: - DEPLOY_HOST: - from_secret: DEPLOY_HOST - DROPLET_USER: - from_secret: DROPLET_USER - SSH_PRIVATE_KEY: - from_secret: SSH_PRIVATE_KEY - commands: - - apk add --no-cache openssh-client - - mkdir -p ~/.ssh - - echo "$${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa - - chmod 600 ~/.ssh/id_rsa - - ssh-keyscan -H "$${DEPLOY_HOST}" >> ~/.ssh/known_hosts - - | - echo "Fixing directory permissions..." - ssh -i ~/.ssh/id_rsa $${DROPLET_USER}@$${DEPLOY_HOST} " - cd /var/www/pulse-server - echo 'Current ownership:' && ls -ld /var/www/pulse-server - echo 'Fixing ownership and permissions...' - sudo chown -R $${DROPLET_USER}:www-data /var/www/pulse-server - sudo chmod -R 755 /var/www/pulse-server - sudo chmod -R g+w /var/www/pulse-server - echo 'New ownership:' && ls -ld /var/www/pulse-server - echo 'Directory permissions fixed โœ“' - " - - - name: install-production-deps - image: alpine:latest - depends_on: - - fix-permissions - environment: - DEPLOY_HOST: - from_secret: DEPLOY_HOST - DROPLET_USER: - from_secret: DROPLET_USER - SSH_PRIVATE_KEY: - from_secret: SSH_PRIVATE_KEY - commands: - - apk add --no-cache openssh-client - - mkdir -p ~/.ssh - - echo "$${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa - - chmod 600 ~/.ssh/id_rsa - - ssh-keyscan -H "$${DEPLOY_HOST}" >> ~/.ssh/known_hosts - - ssh -i ~/.ssh/id_rsa $${DROPLET_USER}@$${DEPLOY_HOST} "cd /var/www/pulse-server && npm ci --only=production" - - - name: health-check-before-deploy - image: alpine:latest - depends_on: - - install-production-deps - environment: - DEPLOY_HOST: - from_secret: DEPLOY_HOST - DROPLET_USER: - from_secret: DROPLET_USER - SSH_PRIVATE_KEY: - from_secret: SSH_PRIVATE_KEY - commands: - - apk add --no-cache openssh-client - - mkdir -p ~/.ssh - - echo "$${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa - - chmod 600 ~/.ssh/id_rsa - - ssh-keyscan -H "$${DEPLOY_HOST}" >> ~/.ssh/known_hosts - - ssh -i ~/.ssh/id_rsa $${DROPLET_USER}@$${DEPLOY_HOST} "echo Checking server health... && pm2 describe pulse-server || echo App not running yet" - - - name: deploy-with-pm2 - image: alpine:latest - depends_on: - - health-check-before-deploy - environment: - DEPLOY_HOST: - from_secret: DEPLOY_HOST - DROPLET_USER: - from_secret: DROPLET_USER - SSH_PRIVATE_KEY: - from_secret: SSH_PRIVATE_KEY - commands: - - apk add --no-cache openssh-client - - mkdir -p ~/.ssh - - echo "$${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa - - chmod 600 ~/.ssh/id_rsa - - ssh-keyscan -H "$${DEPLOY_HOST}" >> ~/.ssh/known_hosts - - ssh -i ~/.ssh/id_rsa $${DROPLET_USER}@$${DEPLOY_HOST} "cd /var/www/pulse-server && pm2 reload ecosystem.config.js --env production || pm2 start ecosystem.config.js --env production && pm2 save" - - - name: health-check-after-deploy - image: alpine:latest - depends_on: - - deploy-with-pm2 - environment: - DEPLOY_HOST: - from_secret: DEPLOY_HOST - DROPLET_USER: - from_secret: DROPLET_USER - SSH_PRIVATE_KEY: - from_secret: SSH_PRIVATE_KEY - commands: - - apk add --no-cache openssh-client - - mkdir -p ~/.ssh - - echo "$${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa - - chmod 600 ~/.ssh/id_rsa - - ssh-keyscan -H "$${DEPLOY_HOST}" >> ~/.ssh/known_hosts - - ssh -i ~/.ssh/id_rsa $${DROPLET_USER}@$${DEPLOY_HOST} "sleep 5 && pm2 describe pulse-server && pm2 logs pulse-server --lines 20 --nostream && curl -f http://localhost:3000/health || exit 1" - - - name: notify-success - image: appleboy/drone-telegram - settings: - token: - from_secret: telegram_token - to: - from_secret: telegram_chat_id - message: | - โœ… Deployment successful! - - Repository: {{ repo.name }} - Branch: {{ commit.branch }} - Commit: {{ commit.sha }} - Author: {{ commit.author }} - Message: {{ commit.message }} - when: - status: - - success - depends_on: - - health-check-after-deploy - - - name: notify-failure - image: appleboy/drone-telegram - settings: - token: - from_secret: telegram_token - to: - from_secret: telegram_chat_id - message: | - โŒ Deployment failed! - - Repository: {{ repo.name }} - Branch: {{ commit.branch }} - Commit: {{ commit.sha }} - Author: {{ commit.author }} - when: - status: - - failure - -volumes: - - name: deploy - temp: {} - ---- -kind: pipeline -type: docker -name: release - -# Automatically create release when tag is pushed -trigger: - event: - - tag - ref: - - refs/tags/v* - -steps: - - name: create-github-release - image: node:20-alpine - environment: - GITHUB_API_TOKEN: - from_secret: GITHUB_API_TOKEN - commands: - - apk add --no-cache git curl jq - - | - # Extract version from tag - VERSION="${DRONE_TAG}" - echo "Creating GitHub release for $VERSION" - - # Get changelog entry for this version - CHANGELOG_CONTENT=$(sed -n "/## \[$VERSION\]/,/## \[/p" CHANGELOG.md | head -n -1) - - # If no changelog found, use commit message - if [ -z "$CHANGELOG_CONTENT" ]; then - CHANGELOG_CONTENT="Release $VERSION - See commit ${DRONE_COMMIT_SHA:0:8}" - fi - - # Create release via GitHub API - curl -X POST \ - -H "Authorization: token $${GITHUB_API_TOKEN}" \ - -H "Accept: application/vnd.github.v3+json" \ - https://api.github.com/repos/NelakaWith/pulse-server/releases \ - -d "{ - \"tag_name\": \"$VERSION\", - \"name\": \"$VERSION\", - \"body\": $(echo "$CHANGELOG_CONTENT" | jq -R -s .), - \"draft\": false, - \"prerelease\": false - }" | jq '.' - - echo "โœ… GitHub release created successfully" - - - name: notify-release - image: appleboy/drone-telegram - settings: - token: - from_secret: telegram_token - to: - from_secret: telegram_chat_id - message: | - ๐Ÿš€ New release published! - - Tag: ${DRONE_TAG} - Repository: {{ repo.name }} - Author: {{ commit.author }} - when: - status: - - success - event: - - tag - ---- -kind: pipeline -type: docker -name: auto-release - -# Automatically create release when PR is merged to main -trigger: - event: - - push - branch: - - main - # Skip commits generated by release process itself (prevents infinite loop) - skip_commits: - - "chore(release):" - -steps: - - name: check-for-release - image: node:20-alpine - commands: - - apk add --no-cache git - - npm ci - - | - echo "Checking if release is needed..." - # Check if there are releasable commits since last tag - LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") - if [ -z "$LAST_TAG" ]; then - echo "No previous tags found. Creating initial release." - export SHOULD_RELEASE=true - else - echo "Last tag: $LAST_TAG" - # Check for feat:, fix:, or BREAKING CHANGE: commits - NEW_COMMITS=$(git log $LAST_TAG..HEAD --pretty=format:"%s" | grep -E "^(feat|fix|perf|revert)(\(.*\))?:|BREAKING CHANGE:" || true) - if [ -n "$NEW_COMMITS" ]; then - echo "Found releasable commits:" - echo "$NEW_COMMITS" - export SHOULD_RELEASE=true - else - echo "No releasable commits found." - export SHOULD_RELEASE=false - fi - fi - - - name: create-release - image: node:20-alpine - environment: - GITHUB_API_TOKEN: - from_secret: GITHUB_API_TOKEN - GITHUB_SSH_KEY: - from_secret: GITHUB_SSH_KEY - commands: - - apk add --no-cache git openssh-client - - git config --global user.email "ci@pulse-server.com" - - git config --global user.name "Drone CI" - - mkdir -p ~/.ssh - - echo "$${GITHUB_SSH_KEY}" > ~/.ssh/id_rsa - - chmod 600 ~/.ssh/id_rsa - - ssh-keyscan -t ed25519 github.com >> ~/.ssh/known_hosts 2>/dev/null || true - - git config --global core.sshCommand "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=accept-new" - - | - # Convert HTTPS remote to SSH - REMOTE_URL=$(git config --get remote.origin.url) - if [[ $REMOTE_URL == https://* ]]; then - echo "Converting remote from HTTPS to SSH..." - SSH_URL=$(echo $REMOTE_URL | sed 's|https://github.com/|git@github.com:|') - git remote set-url origin $SSH_URL - echo "Remote URL updated to: $SSH_URL" - fi - - npm ci - - | - LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") - NEW_COMMITS=$(git log $LAST_TAG..HEAD --pretty=format:"%s" | grep -E "^(feat|fix|perf|revert)(\(.*\))?:|BREAKING CHANGE:" || true) - if [ -z "$LAST_TAG" ] || [ -n "$NEW_COMMITS" ]; then - echo "Creating release..." - npm run release - # Get the new version - NEW_VERSION=$(node -p "require('./package.json').version") - echo "New version: $NEW_VERSION" - # Push changes and tags using SSH - git push --follow-tags origin main - else - echo "Skipping release - no releasable commits" - fi - depends_on: - - check-for-release - - - name: notify-release - image: appleboy/drone-telegram - settings: - token: - from_secret: telegram_token - to: - from_secret: telegram_chat_id - message: | - ๐ŸŽ‰ New version released! - - Repository: {{ repo.name }} - Branch: {{ commit.branch }} - Commit: {{ commit.sha }} - Author: {{ commit.author }} - - CHANGELOG updated and tag pushed to main. - when: - status: - - success - depends_on: - - create-release diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml new file mode 100644 index 0000000..cdc62d4 --- /dev/null +++ b/.github/workflows/auto-release.yml @@ -0,0 +1,21 @@ +name: Auto Release +on: + push: + branches: + - main +jobs: + auto-release: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Check for release + run: | + LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") + NEW_COMMITS=$(git log $LAST_TAG..HEAD --pretty=format:"%s" | grep -E "^(feat|fix|perf|revert)(\(.*\))?:|BREAKING CHANGE:" || true) + if [ -z "$LAST_TAG" ] || [ -n "$NEW_COMMITS" ]; then + echo "Creating release..." + npm run release + git push --follow-tags origin main + else + echo "Skipping release - no releasable commits" diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml new file mode 100644 index 0000000..210cf7a --- /dev/null +++ b/.github/workflows/build-and-deploy.yml @@ -0,0 +1,44 @@ +name: Build and Deploy +on: + push: + tags: + - "v*.*.*" +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install dependencies + run: npm ci --loglevel=info + - name: Run tests + env: + NODE_ENV: test + API_KEY_AUTH_ENABLED: false + DEFAULT_AI_MODEL: deepseek/deepseek-chat + OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} + OPENROUTER_BASE_URL: ${{ secrets.OPENROUTER_BASE_URL }} + GITHUB_API_TOKEN: ${{ secrets.GITHUB_API_TOKEN }} + GITHUB_REST_API_BASE_URL: ${{ secrets.GITHUB_REST_API_BASE_URL }} + GITHUB_GRAPHQL_API_BASE_URL: ${{ secrets.GITHUB_GRAPHQL_API_BASE_URL }} + FORCE_COLOR: 1 + run: | + node --version + npm --version + node --experimental-vm-modules node_modules/jest/bin/jest.js --ci --forceExit --runInBand --verbose --colors + - name: Build and copy files + run: | + mkdir -p /tmp/deploy + cp -r . /tmp/deploy/ + rm -rf /tmp/deploy/node_modules /tmp/deploy/.git /tmp/deploy/tests + - name: Deploy to server + env: + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + DROPLET_USER: ${{ secrets.DROPLET_USER }} + SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + run: | + echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts + rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no" /tmp/deploy/ $DROPLET_USER@$DEPLOY_HOST:/var/www/pulse-server/ + ssh -i ~/.ssh/id_rsa $DROPLET_USER@$DEPLOY_HOST "cd /var/www/pulse-server && npm ci --only=production && pm2 reload ecosystem.config.js --env production || pm2 start ecosystem.config.js --env production && pm2 save" diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml new file mode 100644 index 0000000..ca0adce --- /dev/null +++ b/.github/workflows/pr-lint.yml @@ -0,0 +1,26 @@ +name: PR Lint +on: + pull_request: + types: [opened, edited, synchronize] +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install dependencies + run: npm ci --only=dev + - name: Lint PR title + run: | + echo "Validating PR title: ${{ github.event.pull_request.title }}" + if echo "${{ github.event.pull_request.title }}" | grep -qE "^(feat|fix|docs|style|refactor|perf|test|chore|ci|revert)(\(.+\))?!?:"; then + echo "โœ… PR title follows conventional commits format" + else + echo "โŒ PR title does not follow conventional commits format" + echo "Valid formats: feat(scope): description, fix: description, etc." + exit 1 + fi + - name: Lint commits + run: | + echo "Linting commits in PR..." + npx commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..0708ccf --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,21 @@ +name: Release +on: + push: + tags: + - "v*.*.*" +jobs: + create-release: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Create GitHub Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + VERSION=${GITHUB_REF#refs/tags/} + CHANGELOG_CONTENT=$(sed -n "/## [${VERSION}]/,/## [/p" CHANGELOG.md | head -n -1) + if [ -z "$CHANGELOG_CONTENT" ]; then + CHANGELOG_CONTENT="Release $VERSION" + fi + gh release create "$VERSION" --title "$VERSION" --notes "$CHANGELOG_CONTENT" diff --git a/.github/workflows/test-on-pr.yml b/.github/workflows/test-on-pr.yml new file mode 100644 index 0000000..b872ca6 --- /dev/null +++ b/.github/workflows/test-on-pr.yml @@ -0,0 +1,28 @@ +name: Test on PR +on: + pull_request: + types: [opened, synchronize] +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install dependencies + run: npm ci --loglevel=info + - name: Run tests + env: + NODE_ENV: test + API_KEY_AUTH_ENABLED: false + DEFAULT_AI_MODEL: deepseek/deepseek-chat + OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} + OPENROUTER_BASE_URL: ${{ secrets.OPENROUTER_BASE_URL }} + GITHUB_API_TOKEN: ${{ secrets.GITHUB_API_TOKEN }} + GITHUB_REST_API_BASE_URL: ${{ secrets.GITHUB_REST_API_BASE_URL }} + GITHUB_GRAPHQL_API_BASE_URL: ${{ secrets.GITHUB_GRAPHQL_API_BASE_URL }} + FORCE_COLOR: 1 + run: | + node --version + npm --version + echo "Running tests..." + node --experimental-vm-modules node_modules/jest/bin/jest.js --ci --forceExit --runInBand --verbose --colors From 4381fc6648f16fb913122eba814d5596dc1074e6 Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Sat, 8 Nov 2025 20:04:30 +0530 Subject: [PATCH 03/18] docs(README): update README and CI/CD documentation to reflect migration from Drone CI to GitHub Actions --- README.md | 159 +++++++++++++++++++++-------------------- docs/CI_CD_PIPELINE.md | 61 +++++++++------- 2 files changed, 116 insertions(+), 104 deletions(-) diff --git a/README.md b/README.md index 34a68b4..3a4fe1f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ An AI-powered Express.js server designed for seamless integration with OpenRouter AI services. Built with modern Node.js practices and ready for production deployment. -[![Build Status](https://drone.nelakawithanage.com/api/badges/NelakaWith/pulse-server/status.svg?branch=main)](https://drone.nelakawithanage.com/NelakaWith/pulse-server) +[![Build Status](https://github.com/NelakaWith/pulse-server/actions/workflows/test-on-pr.yml/badge.svg?branch=main)](https://github.com/NelakaWith/pulse-server/actions) [![Node.js Version](https://img.shields.io/badge/node-%3E%3D14.0.0-brightgreen)](https://nodejs.org/) [![License: AGPL 3.0](https://img.shields.io/badge/License-AGPL%203.0-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![ES6 Modules](https://img.shields.io/badge/ES6-Modules-yellow)](https://nodejs.org/api/esm.html) @@ -25,9 +25,9 @@ An AI-powered Express.js server designed for seamless integration with OpenRoute ### Core Documentation -- [๐Ÿ”„ CI/CD Pipeline](#-cicd-pipeline-with-drone-ci) +- [๐Ÿ”„ CI/CD Pipeline](#-cicd-pipeline-with-github-actions) - ๐Ÿ“š [CI/CD Pipeline Guide](./docs/CI_CD_PIPELINE.md) - Complete architecture and features - - ๐Ÿ”ง [CI/CD Setup](./docs/CI_CD_SETUP.md) - Step-by-step configuration + - ๏ฟฝ๏ธ [CI/CD Setup](./docs/CI_CD_SETUP.md) - Step-by-step configuration - ๐Ÿ“‹ [CI/CD Quick Reference](./docs/CI_CD_QUICK_REFERENCE.md) - Commands and troubleshooting - ๐ŸŽจ [CI/CD Visual Workflow](./docs/CI_CD_VISUAL_WORKFLOW.md) - Pipeline diagrams and flows - [๐Ÿ”— Key Endpoints](#-key-endpoints) @@ -222,18 +222,18 @@ Start here! [**QUICK_START.md**](./docs/QUICK_START.md) covers: ``` Frontend Application - โ†“ + โ†“ POST /api/enrichment {owner, name, scope, task} - โ†“ + โ†“ Backend Server โ”œโ”€ Fetch GitHub data (GraphQL) โ”œโ”€ Send to OpenRouter AI โ””โ”€ Return enriched analysis - โ†“ + โ†“ Formatted JSON Response {success, data, metadata} - โ†“ + โ†“ Display Results to User ``` @@ -252,109 +252,110 @@ See [API_GUIDE.md](./docs/API_GUIDE.md#4-repository-enrichment-primary-endpoint) The frontend communicates with the backend using this unified contract: -```javascript -// Request -POST /api/enrichment -{ - "owner": "username", - "name": "repo-name", - "scope": "repo", - "task": "analyze" | "summarize-issues", - "question": "optional custom question" -} - -// Response -{ - "success": true, - "data": { - "repository": { /* repo details */ }, - "analysis": "AI-generated insights", - "metadata": { /* metadata */ } - } -} -``` - -- `npm start` - Start the production server -- `npm run dev` - Start development server with auto-restart -- `npm test` - Run test suite +## ๐Ÿ› ๏ธ CI/CD Pipeline with GitHub Actions -## ๐Ÿ“Š API Endpoints +This project uses **GitHub Actions** for automated testing, linting, building, releasing, and deployment with a **build-and-copy** approach and **PM2** process management. -### Core Endpoints - -- **GET /** - Welcome message and server information -- **GET /health** - Health check endpoint -- **GET /api** - API information and available routes - -### Enrichment Endpoints (Main Feature) +### Pipeline Overview -- **POST /api/enrichment** - Unified repository analysis endpoint - - Task: `analyze` - AI-powered repository analysis - - Task: `summarize-issues` - AI summary of repository issues +| Event | Workflow File | Actions | +| ---------------- | --------------------------------- | ----------------------------------------- | +| **PR Created** | pr-lint.yml, test-on-pr.yml | Run tests, validate conventional commits | +| **PR Merged** | auto-release.yml | Create version, update CHANGELOG | +| **Tag Pushed** | release.yml, build-and-deploy.yml | Build, copy, deploy to production via PM2 | +| **Main Updated** | auto-release.yml | Full release pipeline | -### AI Endpoints +### Quick CI/CD Setup -- **POST /api/ai/llm** - AI chat/completion endpoint -- **GET /ai/models** - List available AI models +```bash +# 1. Make changes and commit (conventional format) +npm run commit -### GitHub Data Endpoints +# 2. Push and create PR +git push origin feat/new-feature -- **POST /api/github/repository** - Get raw GitHub repository data -- Additional GitHub endpoints for issues, PRs, users, etc. +# 3. GitHub Actions automatically: +# - Validates commit format +# - Runs all tests +# - Lints PR title -**๐Ÿ“– For complete endpoint documentation, see [API_GUIDE.md](./docs/API_GUIDE.md)** +# 4. After PR merge to main: +# - Auto-creates release (v1.1.0) +# - Builds application +# - Deploys to production via PM2 +# - Sends success notification +``` -## ๐Ÿ”’ API Key Management +### Deployment Architecture -### Overview +``` +GitHub Push โ†’ GitHub Actions โ†’ Build & Test โ†’ Deploy to Server + โ†“ + Copy files via SSH/rsync + โ†“ + Install dependencies + โ†“ + PM2 reload (zero-downtime) + โ†“ + Health checks + โ†“ + Telegram notification +``` -Pulse Server uses **API Key Authentication** to secure all `/api` endpoints. This ensures that only authorized clients can access your server's functionality. +### Required Secrets -### Key Types +Configure in GitHub repository settings (Settings โ†’ Secrets and variables โ†’ Actions): -1. **Development Keys** - For local testing and development -2. **Staging Keys** - For pre-production environment -3. **Production Keys** - For live deployment (must be securely generated) +``` +DEPLOY_HOST # Server hostname +DROPLET_USER # SSH username +SSH_PRIVATE_KEY # SSH private key +GITHUB_TOKEN # GitHub token +TELEGRAM_TOKEN # Telegram bot token +TELEGRAM_CHAT_ID # Telegram chat ID +``` -### Generating Production API Keys +### PM2 Process Management -Use the built-in API key generator: +**Configuration:** `ecosystem.config.js` ```bash -# Generate 1 production key -node utils/generateApiKey.js prod 1 +# Start application +pm2 start ecosystem.config.js --env production -# Generate 3 production keys -node utils/generateApiKey.js prod 3 +# Zero-downtime reload +pm2 reload ecosystem.config.js --env production -# Generate 5 staging keys -node utils/generateApiKey.js staging 5 -``` +# View logs +pm2 logs pulse-server -**Output example:** +# Monitor status +pm2 monit +# Save configuration +pm2 save ``` -๐Ÿ”‘ Generating 3 API key(s) for prod environment: -1. sk-prod-3c96ecbbe2b83a2130d69d25579b5361ca7ead272c478f61 -2. sk-prod-9eeb3cb562a4a9af2d03caf58c55c7aa9b0551e1430d4010 -3. sk-prod-46cd217ba5cc7773c36d5e8b667ba2567cbd635201dca541 -``` +**Features:** -### How to Use API Keys +- โœ… Cluster mode with 2 instances +- โœ… Auto-restart on failure +- โœ… Health checks every 30 seconds +- โœ… Graceful shutdown +- โœ… Memory limit: 500MB +- โœ… JSON logging -#### Option 1: Header Method (Recommended) +**๐Ÿ“š See [CI_CD_PIPELINE.md](./docs/CI_CD_PIPELINE.md) for complete CI/CD documentation** -```bash -curl -H "X-API-Key: sk-prod-3c96ecbbe2b83a2130d69d25579b5361ca7ead272c478f61" \ - http://localhost:3000/api/enrichment -``` +--- + +```` #### Option 2: Query Parameter ```bash curl "http://localhost:3000/api/enrichment?api_key=sk-prod-3c96ecbbe2b83a2130d69d25579b5361ca7ead272c478f61" -``` +```` ### Configuration diff --git a/docs/CI_CD_PIPELINE.md b/docs/CI_CD_PIPELINE.md index c1ae302..af420ae 100644 --- a/docs/CI_CD_PIPELINE.md +++ b/docs/CI_CD_PIPELINE.md @@ -40,6 +40,7 @@ Pulse Server uses **Drone CI** for continuous integration and deployment with a 3. Lint commit messages **Success Criteria:** +Pulse Server uses **GitHub Actions** for continuous integration and deployment with a build-and-copy approach and PM2 for process management. - All tests pass (11/11) - No linting errors @@ -47,24 +48,28 @@ Pulse Server uses **Drone CI** for continuous integration and deployment with a --- +**Triggers:** Pull Request created/updated + ### 3. **Build and Deploy Pipeline** (`.drone.yml` - build-and-deploy) +**Purpose:** Validates that PR titles and commits follow conventional commits format **Triggers:** - Push to `main` or `develop` branch - Tag creation (e.g., `v1.2.3`) -**Purpose:** Build, test, and deploy application to production server +### 2. **Test Workflow** (`.github/workflows/test-on-pr.yml`) -**Steps:** +**Triggers:** Pull Request created/updated #### Build Phase -1. **Install Dependencies** - Fresh install with `npm ci` +### 3. **Build and Deploy Workflow** (`.github/workflows/build-and-deploy.yml`) + 2. **Run Tests** - Ensure all tests pass before deployment -3. **Build and Copy** - Prepare deployment package (exclude dev files) + **Triggers:** -#### Deployment Phase +- Tag creation (e.g., `v1.2.3`) 4. **Copy to Server** - SCP files to `/var/www/pulse-server` 5. **Install Production Deps** - `npm ci --only=production` on server @@ -77,7 +82,9 @@ Pulse Server uses **Drone CI** for continuous integration and deployment with a #### Notification Phase -9. **Notify Success/Failure** - Send Telegram notification +4. **Copy to Server** - rsync files to `/var/www/pulse-server` via SSH + +5. **Notify Success/Failure** - Send Telegram notification **Files Deployed:** @@ -90,49 +97,53 @@ ecosystem.config.js routes/** middleware/** services/** -utils/** +### 4. **Auto-Release Workflow** (`.github/workflows/auto-release.yml`) ``` ---- +## **Triggers:** Push to `main` branch (after PR merge) ### 4. **Auto-Release Pipeline** (`.drone-release.yml`) -**Triggers:** Push to `main` branch (after PR merge) +### 5. **Release Workflow** (`.github/workflows/release.yml`) +**Triggers:** Push to `main` branch (after PR merge) +**Triggers:** Tag push (e.g., `git push --tags`) **Purpose:** Automatically create semantic version releases **Steps:** -1. **Check for Release** - Analyze commits since last tag +## Required Secrets +1. **Check for Release** - Analyze commits since last tag + Configure these secrets in your GitHub repository settings (Settings โ†’ Secrets and variables โ†’ Actions): - Look for `feat:`, `fix:`, `perf:`, `revert:`, or `BREAKING CHANGE:` - Skip if only `docs:`, `chore:`, `style:` commits -2. **Create Release** - If releasable commits found: - - - Run `npm run release` (standard-version) - - Bump version in `package.json` - - Update `CHANGELOG.md` - - Create git tag - - Push changes and tags +``` +DEPLOY_HOST # Server hostname/IP +DROPLET_USER # SSH username +SSH_PRIVATE_KEY # SSH private key +``` -3. **Notify Release** - Send Telegram notification with new version +- Create git tag +- Push changes and tags -4. **Trigger Deployment** - Automatically deploy the new release +``` +GITHUB_TOKEN # GitHub personal access token +``` **Version Bumping Rules:** -- `feat:` โ†’ Minor version (1.0.0 โ†’ 1.1.0) -- `fix:` โ†’ Patch version (1.0.0 โ†’ 1.0.1) -- `BREAKING CHANGE:` โ†’ Major version (1.0.0 โ†’ 2.0.0) +``` +TELEGRAM_TOKEN # Telegram bot token +TELEGRAM_CHAT_ID # Telegram chat ID for notifications +``` --- ### 5. **Release Pipeline** (`.drone.yml` - release) -**Triggers:** Tag push (e.g., `git push --tags`) - -**Purpose:** Create GitHub release with changelog +### Auto-release workflow uses GITHUB_TOKEN and SSH_PRIVATE_KEY for pushing tags and releases. **Steps:** From 9fbd96f328884e60db876f8d1ad82336a3b224a9 Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Sun, 9 Nov 2025 13:47:01 +0530 Subject: [PATCH 04/18] style(ci): format YAML files for consistency in auto-release, build-and-deploy, and release workflows --- .github/workflows/auto-release.yml | 36 +++++------ .github/workflows/build-and-deploy.yml | 82 +++++++++++++------------- .github/workflows/release.yml | 36 +++++------ 3 files changed, 77 insertions(+), 77 deletions(-) diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml index cdc62d4..ba5de8a 100644 --- a/.github/workflows/auto-release.yml +++ b/.github/workflows/auto-release.yml @@ -1,21 +1,21 @@ name: Auto Release on: - push: - branches: - - main + push: + branches: + - main jobs: - auto-release: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Check for release - run: | - LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") - NEW_COMMITS=$(git log $LAST_TAG..HEAD --pretty=format:"%s" | grep -E "^(feat|fix|perf|revert)(\(.*\))?:|BREAKING CHANGE:" || true) - if [ -z "$LAST_TAG" ] || [ -n "$NEW_COMMITS" ]; then - echo "Creating release..." - npm run release - git push --follow-tags origin main - else - echo "Skipping release - no releasable commits" + auto-release: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Check for release + run: | + LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") + NEW_COMMITS=$(git log $LAST_TAG..HEAD --pretty=format:"%s" | grep -E "^(feat|fix|perf|revert)(\(.*\))?:|BREAKING CHANGE:" || true) + if [ -z "$LAST_TAG" ] || [ -n "$NEW_COMMITS" ]; then + echo "Creating release..." + npm run release + git push --follow-tags origin main + else + echo "Skipping release - no releasable commits" diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 210cf7a..c340cb0 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -1,44 +1,44 @@ name: Build and Deploy on: - push: - tags: - - "v*.*.*" + push: + tags: + - "v*.*.*" jobs: - build-and-deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Install dependencies - run: npm ci --loglevel=info - - name: Run tests - env: - NODE_ENV: test - API_KEY_AUTH_ENABLED: false - DEFAULT_AI_MODEL: deepseek/deepseek-chat - OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} - OPENROUTER_BASE_URL: ${{ secrets.OPENROUTER_BASE_URL }} - GITHUB_API_TOKEN: ${{ secrets.GITHUB_API_TOKEN }} - GITHUB_REST_API_BASE_URL: ${{ secrets.GITHUB_REST_API_BASE_URL }} - GITHUB_GRAPHQL_API_BASE_URL: ${{ secrets.GITHUB_GRAPHQL_API_BASE_URL }} - FORCE_COLOR: 1 - run: | - node --version - npm --version - node --experimental-vm-modules node_modules/jest/bin/jest.js --ci --forceExit --runInBand --verbose --colors - - name: Build and copy files - run: | - mkdir -p /tmp/deploy - cp -r . /tmp/deploy/ - rm -rf /tmp/deploy/node_modules /tmp/deploy/.git /tmp/deploy/tests - - name: Deploy to server - env: - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - DROPLET_USER: ${{ secrets.DROPLET_USER }} - SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} - run: | - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts - rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no" /tmp/deploy/ $DROPLET_USER@$DEPLOY_HOST:/var/www/pulse-server/ - ssh -i ~/.ssh/id_rsa $DROPLET_USER@$DEPLOY_HOST "cd /var/www/pulse-server && npm ci --only=production && pm2 reload ecosystem.config.js --env production || pm2 start ecosystem.config.js --env production && pm2 save" + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install dependencies + run: npm ci --loglevel=info + - name: Run tests + env: + NODE_ENV: test + API_KEY_AUTH_ENABLED: false + DEFAULT_AI_MODEL: deepseek/deepseek-chat + OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} + OPENROUTER_BASE_URL: ${{ secrets.OPENROUTER_BASE_URL }} + GITHUB_API_TOKEN: ${{ secrets.GITHUB_API_TOKEN }} + GITHUB_REST_API_BASE_URL: ${{ secrets.GITHUB_REST_API_BASE_URL }} + GITHUB_GRAPHQL_API_BASE_URL: ${{ secrets.GITHUB_GRAPHQL_API_BASE_URL }} + FORCE_COLOR: 1 + run: | + node --version + npm --version + node --experimental-vm-modules node_modules/jest/bin/jest.js --ci --forceExit --runInBand --verbose --colors + - name: Build and copy files + run: | + mkdir -p /tmp/deploy + cp -r . /tmp/deploy/ + rm -rf /tmp/deploy/node_modules /tmp/deploy/.git /tmp/deploy/tests + - name: Deploy to server + env: + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + DROPLET_USER: ${{ secrets.DROPLET_USER }} + SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + run: | + echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts + rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no" /tmp/deploy/ $DROPLET_USER@$DEPLOY_HOST:/var/www/pulse-server/ + ssh -i ~/.ssh/id_rsa $DROPLET_USER@$DEPLOY_HOST "cd /var/www/pulse-server && npm ci --only=production && pm2 reload ecosystem.config.js --env production || pm2 start ecosystem.config.js --env production && pm2 save" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0708ccf..b112fb9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,21 +1,21 @@ name: Release on: - push: - tags: - - "v*.*.*" + push: + tags: + - "v*.*.*" jobs: - create-release: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Create GitHub Release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - VERSION=${GITHUB_REF#refs/tags/} - CHANGELOG_CONTENT=$(sed -n "/## [${VERSION}]/,/## [/p" CHANGELOG.md | head -n -1) - if [ -z "$CHANGELOG_CONTENT" ]; then - CHANGELOG_CONTENT="Release $VERSION" - fi - gh release create "$VERSION" --title "$VERSION" --notes "$CHANGELOG_CONTENT" + create-release: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Create GitHub Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + VERSION=${GITHUB_REF#refs/tags/} + CHANGELOG_CONTENT=$(sed -n "/## [${VERSION}]/,/## [/p" CHANGELOG.md | head -n -1) + if [ -z "$CHANGELOG_CONTENT" ]; then + CHANGELOG_CONTENT="Release $VERSION" + fi + gh release create "$VERSION" --title "$VERSION" --notes "$CHANGELOG_CONTENT" From e6d255fd95fb7e08dc9a8fa8194a03ebf5c48aaf Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Sun, 9 Nov 2025 20:00:35 +0530 Subject: [PATCH 05/18] style(pr-lint): adjust indentation for consistency in workflow YAML --- .github/workflows/pr-lint.yml | 48 ++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml index ca0adce..c1bd050 100644 --- a/.github/workflows/pr-lint.yml +++ b/.github/workflows/pr-lint.yml @@ -1,26 +1,28 @@ name: PR Lint on: - pull_request: - types: [opened, edited, synchronize] + pull_request: + types: [opened, edited, synchronize] jobs: - lint: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Install dependencies - run: npm ci --only=dev - - name: Lint PR title - run: | - echo "Validating PR title: ${{ github.event.pull_request.title }}" - if echo "${{ github.event.pull_request.title }}" | grep -qE "^(feat|fix|docs|style|refactor|perf|test|chore|ci|revert)(\(.+\))?!?:"; then - echo "โœ… PR title follows conventional commits format" - else - echo "โŒ PR title does not follow conventional commits format" - echo "Valid formats: feat(scope): description, fix: description, etc." - exit 1 - fi - - name: Lint commits - run: | - echo "Linting commits in PR..." - npx commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install dependencies + run: npm ci --only=dev + - name: Lint PR title + run: | + echo "Validating PR title: ${{ github.event.pull_request.title }}" + if echo "${{ github.event.pull_request.title }}" | grep -qE "^(feat|fix|docs|style|refactor|perf|test|chore|ci|revert)(\(.+\))?!?:"; then + echo "โœ… PR title follows conventional commits format" + else + echo "โŒ PR title does not follow conventional commits format" + echo "Valid formats: feat(scope): description, fix: description, etc." + exit 1 + fi + - name: Fetch base branch + run: git fetch origin ${{ github.event.pull_request.base.ref }} + - name: Lint commits + run: | + echo "Linting commits in PR..." + npx commitlint --from origin/${{ github.event.pull_request.base.ref }} --to ${{ github.event.pull_request.head.sha }} --verbose From 216eaf6bdc0ef1b2d1ab6f6da92284e91f41faaa Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Sun, 9 Nov 2025 20:14:35 +0530 Subject: [PATCH 06/18] style(workflows): standardize environment variable names in CI workflows --- .github/workflows/build-and-deploy.yml | 6 ++-- .github/workflows/test-on-pr.yml | 50 +++++++++++++------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index c340cb0..8901f18 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -18,9 +18,9 @@ jobs: DEFAULT_AI_MODEL: deepseek/deepseek-chat OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} OPENROUTER_BASE_URL: ${{ secrets.OPENROUTER_BASE_URL }} - GITHUB_API_TOKEN: ${{ secrets.GITHUB_API_TOKEN }} - GITHUB_REST_API_BASE_URL: ${{ secrets.GITHUB_REST_API_BASE_URL }} - GITHUB_GRAPHQL_API_BASE_URL: ${{ secrets.GITHUB_GRAPHQL_API_BASE_URL }} + GH_API_TOKEN: ${{ secrets.GH_API_TOKEN }} + GH_REST_API_BASE_URL: ${{ secrets.GH_REST_API_BASE_URL }} + GH_GRAPHQL_API_BASE_URL: ${{ secrets.GH_GRAPHQL_API_BASE_URL }} FORCE_COLOR: 1 run: | node --version diff --git a/.github/workflows/test-on-pr.yml b/.github/workflows/test-on-pr.yml index b872ca6..5dbd401 100644 --- a/.github/workflows/test-on-pr.yml +++ b/.github/workflows/test-on-pr.yml @@ -1,28 +1,28 @@ name: Test on PR on: - pull_request: - types: [opened, synchronize] + pull_request: + types: [opened, synchronize] jobs: - test: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Install dependencies - run: npm ci --loglevel=info - - name: Run tests - env: - NODE_ENV: test - API_KEY_AUTH_ENABLED: false - DEFAULT_AI_MODEL: deepseek/deepseek-chat - OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} - OPENROUTER_BASE_URL: ${{ secrets.OPENROUTER_BASE_URL }} - GITHUB_API_TOKEN: ${{ secrets.GITHUB_API_TOKEN }} - GITHUB_REST_API_BASE_URL: ${{ secrets.GITHUB_REST_API_BASE_URL }} - GITHUB_GRAPHQL_API_BASE_URL: ${{ secrets.GITHUB_GRAPHQL_API_BASE_URL }} - FORCE_COLOR: 1 - run: | - node --version - npm --version - echo "Running tests..." - node --experimental-vm-modules node_modules/jest/bin/jest.js --ci --forceExit --runInBand --verbose --colors + test: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install dependencies + run: npm ci --loglevel=info + - name: Run tests + env: + NODE_ENV: test + API_KEY_AUTH_ENABLED: false + DEFAULT_AI_MODEL: deepseek/deepseek-chat + OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} + OPENROUTER_BASE_URL: ${{ secrets.OPENROUTER_BASE_URL }} + GH_API_TOKEN: ${{ secrets.GH_API_TOKEN }} + GH_REST_API_BASE_URL: ${{ secrets.GH_REST_API_BASE_URL }} + GH_GRAPHQL_API_BASE_URL: ${{ secrets.GH_GRAPHQL_API_BASE_URL }} + FORCE_COLOR: 1 + run: | + node --version + npm --version + echo "Running tests..." + node --experimental-vm-modules node_modules/jest/bin/jest.js --ci --forceExit --runInBand --verbose --colors From b982c5072a76bd55304a5d6dde4e1ae0dfcc147e Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Sun, 9 Nov 2025 20:27:20 +0530 Subject: [PATCH 07/18] fix(generateApiKey): import missing modules and correct CLI execution check --- utils/generateApiKey.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/utils/generateApiKey.js b/utils/generateApiKey.js index 29364e6..2ca89df 100644 --- a/utils/generateApiKey.js +++ b/utils/generateApiKey.js @@ -1,9 +1,11 @@ import crypto from "crypto"; +import { fileURLToPath } from "url"; +import path from "path"; /** * Generate a secure random API key * Format: sk-[environment]-[random] - * + *n * @param {string} environment - Environment prefix (prod, staging, dev) * @returns {string} A secure random API key * @@ -58,7 +60,8 @@ export function hashApiKey(apiKey) { } // CLI: Generate keys when run directly -if (import.meta.url === `file://${process.argv[1]}`) { +const __filename = fileURLToPath(import.meta.url); +if (path.resolve(process.argv[1]) === path.resolve(__filename)) { const environment = process.argv[2] || "dev"; const count = parseInt(process.argv[3]) || 1; From 60e99030f714a9afc3fe35f4fc0721ba0d8b7e35 Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Sun, 9 Nov 2025 20:27:35 +0530 Subject: [PATCH 08/18] fix(pr-lint): ensure fetch-depth is set for code checkout step --- .github/workflows/pr-lint.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml index c1bd050..9aa02b8 100644 --- a/.github/workflows/pr-lint.yml +++ b/.github/workflows/pr-lint.yml @@ -8,6 +8,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Install dependencies run: npm ci --only=dev - name: Lint PR title From 0a7b3883a4fbc463c739f377fa3d4f66db5f0c43 Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Sun, 9 Nov 2025 20:56:58 +0530 Subject: [PATCH 09/18] refactor(build-and-deploy): streamline deployment process by removing redundant build step --- .github/workflows/build-and-deploy.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 8901f18..b45c88f 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -26,11 +26,6 @@ jobs: node --version npm --version node --experimental-vm-modules node_modules/jest/bin/jest.js --ci --forceExit --runInBand --verbose --colors - - name: Build and copy files - run: | - mkdir -p /tmp/deploy - cp -r . /tmp/deploy/ - rm -rf /tmp/deploy/node_modules /tmp/deploy/.git /tmp/deploy/tests - name: Deploy to server env: DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} @@ -40,5 +35,5 @@ jobs: echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts - rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no" /tmp/deploy/ $DROPLET_USER@$DEPLOY_HOST:/var/www/pulse-server/ + rsync -avz --exclude='node_modules' --exclude='.git' --exclude='tests' --exclude='.github' --exclude='*.md' --exclude='LICENSE' -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no" ./ $DROPLET_USER@$DEPLOY_HOST:/var/www/pulse-server/ ssh -i ~/.ssh/id_rsa $DROPLET_USER@$DEPLOY_HOST "cd /var/www/pulse-server && npm ci --only=production && pm2 reload ecosystem.config.js --env production || pm2 start ecosystem.config.js --env production && pm2 save" From 43b413bbaa262b27ce410ad54e78d7f759f2429f Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Thu, 13 Nov 2025 18:14:33 +0530 Subject: [PATCH 10/18] chore(CHANGELOG): Refactor code structure for improved readability and maintainability --- CHANGELOG.md | 560 ++++++++++++++++++++++---------------------- docs/CHANGELOG.md | 574 ++++++++++++++++++++++++++++++---------------- 2 files changed, 660 insertions(+), 474 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a998fa..1d794c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,341 +2,341 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. -## 1.8.0 (2025-11-08) - +## 1.0.0 (2025-11-12) ### Features -* **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) -* **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) -* **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) -* **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) -* **ci:** add installation of test dependencies and enhance GitHub release creation process ([4ce4360](https://github.com/NelakaWith/pulse-server/commit/4ce4360eac3edbd05a3710d82a12b8668fd334ce)) -* **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) -* **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) -* **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) -* **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) -* **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) -* **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) -* **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) -* **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) -* **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) -* **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) -* **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) -* **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) -* **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) -* **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) -* **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) -* **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) -* **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) -* **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) -* **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) -* **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) -* **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) -* **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) -* **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) -* **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) -* **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) -* **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) -* **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) -* **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) +- Initial release of Pulse Server with Express.js and OpenRouter integration +- API key authentication and rate limiting +- GitHub API integration +- Repository enrichment endpoints +- Comprehensive test suite +- CI/CD pipelines with GitHub Actions +- Automated deployment to production server + +### Bug Fixes + +- Version reset to 1.0.0 for proper release cycle +### Features + +- **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) +- **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) +- **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add installation of test dependencies and enhance GitHub release creation process ([4ce4360](https://github.com/NelakaWith/pulse-server/commit/4ce4360eac3edbd05a3710d82a12b8668fd334ce)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) +- **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) +- **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) +- **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) +- **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) +- **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) +- **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) +- **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) +- **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) +- **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) +- **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) +- **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) +- **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) +- **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) +- **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) +- **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) +- **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) +- **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) +- **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) +- **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) +- **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) +- **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) +- **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) +- **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) +- **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) ### Bug Fixes -* **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) -* **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) -* **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) -* **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) -* **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) -* **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) -* **ci:** update permissions handling and SSH setup for production deployment ([81f6f98](https://github.com/NelakaWith/pulse-server/commit/81f6f98978b93f79737793871865ff0cb249b6b2)) -* **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) -* **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) -* **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) -* **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) -* **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) -* **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) -* **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) -* **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) -* **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) -* **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) -* **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) -* **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) -* **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) +- **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) +- **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) +- **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) +- **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) +- **ci:** update permissions handling and SSH setup for production deployment ([81f6f98](https://github.com/NelakaWith/pulse-server/commit/81f6f98978b93f79737793871865ff0cb249b6b2)) +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) +- **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) +- **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) +- **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) +- **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) +- **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) +- **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) +- **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) +- **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) +- **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) +- **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) +- **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) ## 1.7.0 (2025-11-08) - ### Features -* **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) -* **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) -* **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) -* **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) -* **ci:** add installation of test dependencies and enhance GitHub release creation process ([4ce4360](https://github.com/NelakaWith/pulse-server/commit/4ce4360eac3edbd05a3710d82a12b8668fd334ce)) -* **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) -* **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) -* **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) -* **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) -* **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) -* **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) -* **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) -* **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) -* **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) -* **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) -* **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) -* **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) -* **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) -* **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) -* **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) -* **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) -* **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) -* **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) -* **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) -* **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) -* **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) -* **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) -* **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) -* **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) -* **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) -* **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) -* **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) -* **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) - +- **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) +- **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) +- **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add installation of test dependencies and enhance GitHub release creation process ([4ce4360](https://github.com/NelakaWith/pulse-server/commit/4ce4360eac3edbd05a3710d82a12b8668fd334ce)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) +- **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) +- **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) +- **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) +- **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) +- **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) +- **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) +- **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) +- **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) +- **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) +- **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) +- **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) +- **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) +- **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) +- **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) +- **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) +- **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) +- **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) +- **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) +- **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) +- **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) +- **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) +- **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) +- **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) +- **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) ### Bug Fixes -* **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) -* **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) -* **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) -* **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) -* **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) -* **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) -* **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) -* **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) -* **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) -* **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) -* **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) -* **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) -* **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) -* **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) -* **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) -* **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) -* **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) -* **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) -* **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) +- **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) +- **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) +- **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) +- **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) +- **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) +- **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) +- **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) +- **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) +- **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) +- **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) +- **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) +- **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) +- **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) +- **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) +- **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) ## 1.6.0 (2025-11-08) - ### Features -* **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) -* **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) -* **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) -* **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) -* **ci:** add installation of test dependencies and enhance GitHub release creation process ([4ce4360](https://github.com/NelakaWith/pulse-server/commit/4ce4360eac3edbd05a3710d82a12b8668fd334ce)) -* **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) -* **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) -* **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) -* **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) -* **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) -* **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) -* **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) -* **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) -* **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) -* **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) -* **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) -* **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) -* **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) -* **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) -* **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) -* **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) -* **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) -* **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) -* **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) -* **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) -* **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) -* **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) -* **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) -* **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) -* **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) -* **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) -* **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) -* **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) - +- **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) +- **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) +- **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add installation of test dependencies and enhance GitHub release creation process ([4ce4360](https://github.com/NelakaWith/pulse-server/commit/4ce4360eac3edbd05a3710d82a12b8668fd334ce)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) +- **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) +- **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) +- **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) +- **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) +- **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) +- **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) +- **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) +- **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) +- **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) +- **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) +- **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) +- **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) +- **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) +- **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) +- **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) +- **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) +- **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) +- **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) +- **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) +- **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) +- **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) +- **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) +- **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) +- **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) ### Bug Fixes -* **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) -* **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) -* **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) -* **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) -* **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) -* **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) -* **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) -* **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) -* **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) -* **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) -* **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) -* **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) -* **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) -* **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) -* **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) -* **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) -* **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) -* **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) -* **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) +- **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) +- **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) +- **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) +- **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) +- **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) +- **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) +- **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) +- **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) +- **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) +- **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) +- **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) +- **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) +- **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) +- **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) +- **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) ## 1.5.0 (2025-11-08) - ### Features -* **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) -* **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) -* **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) -* **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) -* **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) -* **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) -* **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) -* **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) -* **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) -* **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) -* **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) -* **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) -* **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) -* **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) -* **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) -* **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) -* **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) -* **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) -* **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) -* **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) -* **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) -* **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) -* **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) -* **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) -* **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) -* **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) -* **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) -* **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) -* **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) -* **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) -* **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) -* **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) - +- **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) +- **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) +- **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) +- **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) +- **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) +- **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) +- **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) +- **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) +- **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) +- **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) +- **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) +- **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) +- **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) +- **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) +- **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) +- **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) +- **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) +- **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) +- **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) +- **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) +- **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) +- **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) +- **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) +- **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) +- **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) +- **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) +- **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) ### Bug Fixes -* **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) -* **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) -* **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) -* **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) -* **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) -* **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) -* **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) -* **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) -* **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) -* **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) -* **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) -* **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) -* **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) -* **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) -* **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) -* **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) -* **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) -* **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) -* **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) +- **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) +- **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) +- **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) +- **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) +- **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) +- **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) +- **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) +- **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) +- **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) +- **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) +- **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) +- **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) +- **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) +- **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) +- **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) ## 1.4.0 (2025-11-08) - ### Features -* **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) -* **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) -* **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) -* **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) -* **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) -* **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) -* **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) -* **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) -* **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) -* **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) -* **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) -* **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) -* **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) -* **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) -* **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) -* **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) -* **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) -* **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) -* **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) -* **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) -* **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) -* **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) -* **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) -* **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) -* **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) -* **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) -* **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) -* **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) -* **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) -* **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) -* **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) -* **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) - +- **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) +- **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) +- **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) +- **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) +- **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) +- **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) +- **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) +- **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) +- **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) +- **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) +- **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) +- **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) +- **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) +- **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) +- **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) +- **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) +- **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) +- **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) +- **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) +- **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) +- **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) +- **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) +- **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) +- **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) +- **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) +- **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) +- **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) ### Bug Fixes -* **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) -* **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) -* **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) -* **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) -* **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) -* **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) -* **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) -* **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) -* **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) -* **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) -* **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) -* **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) -* **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) -* **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) -* **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) -* **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) -* **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) -* **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) -* **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) +- **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) +- **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) +- **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) +- **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) +- **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) +- **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) +- **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) +- **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) +- **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) +- **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) +- **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) +- **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) +- **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) +- **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) +- **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) ## [1.3.0](https://github.com/NelakaWith/pulse-server/compare/v1.2.0...v1.3.0) (2025-11-08) - ### Features -* **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) -* **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) -* **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) - +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) ### Bug Fixes -* **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) ## [1.2.0](https://github.com/NelakaWith/pulse-server/compare/v1.1.0...v1.2.0) (2025-11-08) - ### Features -* **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) - +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) ### Bug Fixes -* **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) -* **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) ## 1.1.0 (2025-11-08) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index fc406d8..1d794c7 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,200 +1,386 @@ -````markdown # Changelog -All notable changes to this project are documented here. +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. -The format is based on [Keep a Changelog](https://keepachangelog.com/), -and this project adheres to [Semantic Versioning](https://semver.org/). +## 1.0.0 (2025-11-12) -## [Unreleased] +### Features -### Planned Features - -- JWT token authentication alongside API keys -- Webhook support for async operations -- AI image vision endpoint -- Advanced rate limiting analytics -- Database persistence layer - -## [1.0.0] - 2025-11-08 - -### Initial Release - -#### Added - -- **Express.js Server** - Fast, unopinionated Node.js framework -- **API Key Authentication** - Secure endpoints with API key validation -- **Rate Limiting** - Two-tier rate limiting (100/IP, 500/API key per 15 min) -- **OpenRouter Integration** - Access to 50+ AI models (GPT-4, Claude, Llama, etc.) -- **Repository Analysis** - AI-powered GitHub repository analysis -- **Issue Summarization** - Automatic summarization of repository issues -- **GitHub Integration** - GraphQL API integration for repository data -- **Security Headers** - Helmet.js for security headers (CSP, X-Frame-Options, etc.) -- **CORS Support** - Configurable Cross-Origin Resource Sharing -- **Request Logging** - Morgan middleware for HTTP request logging -- **Configuration Management** - Environment-based configuration -- **Error Handling** - Comprehensive error middleware and handling -- **Testing Suite** - Jest with 11 comprehensive tests -- **Docker Support** - Dockerfile and Docker Compose examples -- **Development Tools** - Nodemon for auto-restart during development - -#### Features - -**Core Endpoints:** - -- `GET /` - Welcome message and server info -- `GET /health` - Health check endpoint -- `GET /api` - API information and available routes - -**Enrichment Endpoints:** - -- `POST /api/enrichment` - Unified repository analysis endpoint - - Task: `analyze` - AI-powered repository analysis - - Task: `summarize-issues` - AI summary of issues - -**AI Endpoints:** - -- `POST /api/ai/llm` - AI chat/completion endpoint -- `GET /api/ai/models` - List available AI models - -**GitHub Endpoints:** - -- `GET /api/github/status` - GitHub service status -- `POST /api/github/repository` - Get raw GitHub repository data - -**Authentication:** - -- API Key in header: `X-API-Key: sk-prod-xxxxx` -- API Key in query: `?api_key=sk-prod-xxxxx` - -**Rate Limiting:** - -- 100 requests per 15 minutes per IP (unauthenticated) -- 500 requests per 15 minutes per API key (authenticated) -- Response headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset - -#### Documentation - -- QUICK_START.md - Getting started guide -- API_GUIDE.md - Complete API reference -- SECURITY.md - Security configuration and best practices -- FRONTEND_INTEGRATION.md - Framework examples (React, Vue, Angular, Svelte) -- API_KEY_QUICK_REFERENCE.md - One-page cheat sheet -- API_KEY_MANAGEMENT.md - API key generation and management -- PURPOSE.md - Project vision and goals - -#### Supported AI Models - -- OpenAI: GPT-4, GPT-3.5, GPT-4 Vision -- Anthropic: Claude 3 Opus, Claude 3 Sonnet, Claude 3 Haiku -- Google: Gemini Pro, Gemini 1.5 -- Meta: Llama 2 70B, Llama 3 70B -- DeepSeek: DeepSeek Chat v3.1 -- And 40+ more models - -#### Environment Variables - -``` -NODE_ENV=development|production|test -PORT=3000 -API_KEY_AUTH_ENABLED=true -API_KEYS=comma,separated,keys -GITHUB_API_TOKEN=github_pat_xxxxx -OPENROUTER_API_KEY=sk-or-v1-xxxxx -DEFAULT_AI_MODEL=deepseek/deepseek-chat-v3.1:free -OPENROUTER_BASE_URL=https://openrouter.ai/api/v1 -CORS_ORIGIN=http://localhost:3000,https://yourdomain.com -LOG_LEVEL=info|debug|warn|error -``` - -#### Dependencies - -- express: ^4.18.2 -- helmet: ^7.1.0 -- cors: ^2.8.5 -- dotenv: ^16.3.1 -- morgan: ^1.10.0 -- axios: ^1.6.0 -- graphql-request: ^7.3.1 - -#### Dev Dependencies - -- jest: ^29.7.0 -- nodemon: ^3.0.1 -- supertest: ^6.3.3 - -#### Tests - -- 11 comprehensive tests covering: - - Server startup and health checks - - API endpoint responses - - API key authentication (401/403) - - Rate limiting enforcement - - Error handling - - Route availability - - CORS configuration - - Security headers - -#### Known Limitations - -- No database persistence (in-memory operations only) -- Rate limiting stored in memory (resets on server restart) -- No horizontal scaling support yet -- No webhook support -- No async job queue - -#### Security - -- โœ… API Key authentication -- โœ… Rate limiting per IP/key -- โœ… Helmet.js security headers -- โœ… CORS configuration -- โœ… Request validation -- โœ… Error message sanitization -- โœ… Request logging -- โš ๏ธ No JWT support yet (planned for v2.0.0) -- โš ๏ธ No database encryption yet - -#### Breaking Changes - -- None (initial release) - -#### Migration Guide - -- None (initial release) - -#### Performance - -- Average response time: 100-500ms -- Supports 500 concurrent connections -- Rate limit window: 15 minutes -- Max tokens per request: 1000 (configurable) - -#### Installation - -```bash -npm install -cp .env.example .env.local -npm run dev -``` - -#### Testing - -```bash -npm test # Run all tests -npm test -- --watch # Watch mode -npm test -- --coverage # Coverage report -``` - -#### Credits - -- Created by Nelaka Withanage -- OpenRouter API integration +- Initial release of Pulse Server with Express.js and OpenRouter integration +- API key authentication and rate limiting - GitHub API integration - ---- - -**Format:** [Keep a Changelog](https://keepachangelog.com/) -**Versioning:** [Semantic Versioning](https://semver.org/) -**Last Updated:** November 8, 2025 -```` +- Repository enrichment endpoints +- Comprehensive test suite +- CI/CD pipelines with GitHub Actions +- Automated deployment to production server + +### Bug Fixes + +- Version reset to 1.0.0 for proper release cycle + +### Features + +- **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) +- **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) +- **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add installation of test dependencies and enhance GitHub release creation process ([4ce4360](https://github.com/NelakaWith/pulse-server/commit/4ce4360eac3edbd05a3710d82a12b8668fd334ce)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) +- **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) +- **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) +- **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) +- **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) +- **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) +- **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) +- **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) +- **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) +- **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) +- **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) +- **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) +- **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) +- **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) +- **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) +- **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) +- **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) +- **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) +- **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) +- **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) +- **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) +- **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) +- **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) +- **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) +- **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) + +### Bug Fixes + +- **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) +- **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) +- **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) +- **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) +- **ci:** update permissions handling and SSH setup for production deployment ([81f6f98](https://github.com/NelakaWith/pulse-server/commit/81f6f98978b93f79737793871865ff0cb249b6b2)) +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) +- **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) +- **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) +- **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) +- **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) +- **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) +- **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) +- **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) +- **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) +- **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) +- **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) +- **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) + +## 1.7.0 (2025-11-08) + +### Features + +- **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) +- **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) +- **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add installation of test dependencies and enhance GitHub release creation process ([4ce4360](https://github.com/NelakaWith/pulse-server/commit/4ce4360eac3edbd05a3710d82a12b8668fd334ce)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) +- **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) +- **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) +- **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) +- **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) +- **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) +- **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) +- **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) +- **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) +- **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) +- **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) +- **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) +- **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) +- **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) +- **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) +- **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) +- **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) +- **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) +- **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) +- **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) +- **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) +- **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) +- **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) +- **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) +- **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) + +### Bug Fixes + +- **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) +- **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) +- **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) +- **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) +- **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) +- **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) +- **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) +- **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) +- **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) +- **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) +- **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) +- **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) +- **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) +- **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) +- **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) + +## 1.6.0 (2025-11-08) + +### Features + +- **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) +- **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) +- **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add installation of test dependencies and enhance GitHub release creation process ([4ce4360](https://github.com/NelakaWith/pulse-server/commit/4ce4360eac3edbd05a3710d82a12b8668fd334ce)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) +- **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) +- **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) +- **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) +- **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) +- **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) +- **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) +- **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) +- **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) +- **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) +- **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) +- **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) +- **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) +- **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) +- **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) +- **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) +- **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) +- **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) +- **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) +- **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) +- **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) +- **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) +- **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) +- **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) +- **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) + +### Bug Fixes + +- **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) +- **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) +- **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) +- **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) +- **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) +- **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) +- **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) +- **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) +- **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) +- **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) +- **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) +- **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) +- **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) +- **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) +- **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) + +## 1.5.0 (2025-11-08) + +### Features + +- **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) +- **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) +- **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) +- **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) +- **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) +- **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) +- **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) +- **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) +- **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) +- **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) +- **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) +- **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) +- **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) +- **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) +- **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) +- **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) +- **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) +- **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) +- **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) +- **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) +- **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) +- **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) +- **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) +- **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) +- **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) +- **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) +- **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) + +### Bug Fixes + +- **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) +- **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) +- **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) +- **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) +- **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) +- **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) +- **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) +- **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) +- **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) +- **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) +- **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) +- **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) +- **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) +- **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) +- **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) + +## 1.4.0 (2025-11-08) + +### Features + +- **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) +- **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) +- **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) +- **ci:** refactor deployment steps to use SSH and rsync for file transfer and health checks ([5ab56e1](https://github.com/NelakaWith/pulse-server/commit/5ab56e1eda6da9365c80a5bed2b7bc12a100d0e6)) +- **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) +- **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) +- **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) +- **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) +- **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) +- **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) +- **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) +- **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) +- **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) +- **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) +- **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) +- **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) +- **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) +- **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) +- **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) +- **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) +- **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) +- **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) +- **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) +- **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) +- **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) +- **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) +- **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) + +### Bug Fixes + +- **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **ci:** convert remote repository URL from HTTPS to SSH for secure access ([8f0d710](https://github.com/NelakaWith/pulse-server/commit/8f0d71020273a5353a24fc8723242ad494346812)) +- **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) +- **ci:** enhance git operations with SSH for secure access and tag pushing ([d7b8a45](https://github.com/NelakaWith/pulse-server/commit/d7b8a45ff671c7a626cd9f2f8acc8138a2fa5e21)) +- **ci:** streamline rsync command for file transfer to server ([a5fb5cd](https://github.com/NelakaWith/pulse-server/commit/a5fb5cd81c0eb2c1d9949580dec26e61068c16dd)) +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) +- **ci:** update SSH key reference for Git operations in CI pipeline ([d7e8b9f](https://github.com/NelakaWith/pulse-server/commit/d7e8b9ff8fd98f0a31bc1d6f653ca1a0a827c8e6)) +- **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) +- **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) +- **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) +- **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) +- **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) +- **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) +- **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) +- **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) +- **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) +- **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) + +## [1.3.0](https://github.com/NelakaWith/pulse-server/compare/v1.2.0...v1.3.0) (2025-11-08) + +### Features + +- **ci:** add connectivity test step before deployment ([3e47617](https://github.com/NelakaWith/pulse-server/commit/3e47617a19891fc1a629813585258cf14c3e065c)) +- **ci:** add server connectivity test step in CI pipeline ([8351eb0](https://github.com/NelakaWith/pulse-server/commit/8351eb012bd1a0a879b39badafa16745d879d745)) +- **ci:** enhance server connectivity test with SSH authentication ([264b62c](https://github.com/NelakaWith/pulse-server/commit/264b62c5fd5cc4f12a7a7fe4313a3201bcec4c46)) + +### Bug Fixes + +- **ci:** update secret names for deployment and GitHub release configuration ([f546c4d](https://github.com/NelakaWith/pulse-server/commit/f546c4d9a9414cb875813cc12e2559aa93f53447)) + +## [1.2.0](https://github.com/NelakaWith/pulse-server/compare/v1.1.0...v1.2.0) (2025-11-08) + +### Features + +- **docs:** create CHANGELOG.md for version history and project updates ([cd8785a](https://github.com/NelakaWith/pulse-server/commit/cd8785a63d26d042f8badee691d6127ab49404b6)) + +### Bug Fixes + +- **app:** rename GITHUB_TOKEN to GITHUB_API_TOKEN across configuration files and documentation ([2947c34](https://github.com/NelakaWith/pulse-server/commit/2947c348d2700d600dc393f388f03592525ba16a)) +- **docs:** update GITHUB_TOKEN to GITHUB_API_TOKEN in changelog and pipeline configuration ([3b38815](https://github.com/NelakaWith/pulse-server/commit/3b3881590da2a9ee2fda5f5d590d3e7acd0508c3)) + +## 1.1.0 (2025-11-08) + +### Features + +- **api:** Add API key generation, validation, and hashing utilities with comprehensive documentation ([05c650e](https://github.com/NelakaWith/pulse-server/commit/05c650ebbf89bef30e41d898ddcc64ced101f16e)) +- **app:** Initialize Pulse Server with Express.js and OpenRouter integration placeholders ([2fbebaa](https://github.com/NelakaWith/pulse-server/commit/2fbebaa716d166307db0e02064536a492f1edc2c)) +- **ci:** add CI pipelines for PR linting, automated releases, and deployment processes ([e9081fe](https://github.com/NelakaWith/pulse-server/commit/e9081fe87eafed4c0e8bf9d2e4ca258a7d49fd1b)) +- **ci:** enhance CI pipeline with dry-run build step and file verification ([0f75179](https://github.com/NelakaWith/pulse-server/commit/0f75179477bb70704db4d980f72bda8849d05a1c)) +- **config:** Update default AI model to an empty string for improved flexibility ([666c343](https://github.com/NelakaWith/pulse-server/commit/666c343e7586b7ff35a978387e9ffe66594ff5c2)) +- **docs:** add CI/CD quick reference, setup guide, and visual workflow documentation ([156dd90](https://github.com/NelakaWith/pulse-server/commit/156dd90da06eb92b1153e1d83d4b013c1fd7e0fe)) +- **docs:** Add initial README and environment configuration example ([df285b4](https://github.com/NelakaWith/pulse-server/commit/df285b4ab44d38cc5deb07fd58606dc8fbb5ae11)) +- **docs:** Add purpose document outlining OpenRouter AI integration benefits for Pulse-Ops ([5af9ef3](https://github.com/NelakaWith/pulse-server/commit/5af9ef31ae830f5c0d4e70eaea41a17a9f5114dd)) +- **docs:** enhance README with additional guides and references for CI/CD and project setup ([d9a8a60](https://github.com/NelakaWith/pulse-server/commit/d9a8a60eae02d129c3ebb95ecf70e3cb28b5a120)) +- **docs:** update README with additional badges for build status, Node.js version, license, and testing ([0de7c58](https://github.com/NelakaWith/pulse-server/commit/0de7c58b209a0edb708b71d77ffb64414c8a3a01)) +- **docs:** update README with structured table of contents for improved navigation ([8f44cf5](https://github.com/NelakaWith/pulse-server/commit/8f44cf5d48d3163df0680f7339921896ec946b8a)) +- **enrichment:** Add enrichment routes for AI analysis and issue summarization ([d812d18](https://github.com/NelakaWith/pulse-server/commit/d812d186d6f32221486512f1fb48d9e080a92597)) +- **enrichment:** Implement unified endpoint for repository enrichment tasks with enhanced validation and default analysis question ([8f7d33d](https://github.com/NelakaWith/pulse-server/commit/8f7d33d7367cc5717ac17cf4c3b5cdeb1c7b04be)) +- **github:** Integrate GitHub API with new routes and service for repository management ([f655a66](https://github.com/NelakaWith/pulse-server/commit/f655a66c8b33a14a1140cd48656b2e7141e36115)) +- **logging:** Enhance logging with Logger utility across services and routes ([499f785](https://github.com/NelakaWith/pulse-server/commit/499f785a481d7fc50277ae3d4bacb796a58cb54a)) +- **modules:** Implement OpenRouter AI integration with environment configuration and modular architecture ([bec0410](https://github.com/NelakaWith/pulse-server/commit/bec041088cc607506b7300a599a7fa11cb328e82)) +- **pipeline:** add startup check step with version info and timestamp ([514037a](https://github.com/NelakaWith/pulse-server/commit/514037ad9f0c2ae70ad9886126760ef408035fa2)) +- **release:** add release scripts and versioning tools ([e509f8c](https://github.com/NelakaWith/pulse-server/commit/e509f8cdf149c243a84582a0c4859288324d0982)) +- **security:** Implement API key authentication and rate limiting with comprehensive documentation updates ([0b173fe](https://github.com/NelakaWith/pulse-server/commit/0b173fe2ac677eaa8bbc33408aff3063e4ce56bb)) +- **service:** add logging for successful OpenRouter API calls ([328c4fa](https://github.com/NelakaWith/pulse-server/commit/328c4fae2811248d1b67e4639e641ab0bcb04056)) +- **tests:** Add API endpoint and connection tests for improved reliability ([19a8130](https://github.com/NelakaWith/pulse-server/commit/19a81306f292ef2f6d3b233a6aa35e2056194252)) +- **tests:** Add API endpoint tests and connection validation for OpenRouter integration ([b9d6224](https://github.com/NelakaWith/pulse-server/commit/b9d6224ba99a0bec38e5c535b6a1e388f3dbe291)) +- **tests:** add HTTP/HTTPS agents with keep-alive configuration to OpenRouterService ([dc520f4](https://github.com/NelakaWith/pulse-server/commit/dc520f40192015800546d14665ac07c41a6d806b)) +- **tests:** Enhance API tests with API key authentication and rate limiting checks ([6bbf927](https://github.com/NelakaWith/pulse-server/commit/6bbf927d1ba96b7d4525f53de45b9382a62279c2)) +- **tests:** enhance test commands with detailed logging and environment checks ([dcf811e](https://github.com/NelakaWith/pulse-server/commit/dcf811ee9b66c47c44030561c3a7bb731f4a1615)) +- **tests:** enhance test configuration with API key management and update test command ([3dd6f59](https://github.com/NelakaWith/pulse-server/commit/3dd6f5982e1c6906266bc3de67382b4079ca0957)) +- **tests:** update test configuration with fallback API keys and improved logging ([9451b90](https://github.com/NelakaWith/pulse-server/commit/9451b909e4b9e77c6ceabb8c6f3bbd5452ca1c11)) + +### Bug Fixes + +- **ai:** Update endpoint from /chat to /llm for AI integration ([4a93865](https://github.com/NelakaWith/pulse-server/commit/4a93865497c3a72f2615ac8ab84facf085401945)) +- **ci:** disable API key auth in tests to prevent 401 errors ([468b662](https://github.com/NelakaWith/pulse-server/commit/468b662f7e4c14e6498c91e9162369de71e22ea2)) +- **docs:** remove extraneous markdown syntax from Conventional Commits guide ([7dffded](https://github.com/NelakaWith/pulse-server/commit/7dffded03a286dc8452d041ec230bdbb7696066a)) +- **docs:** update example in generateApiKeys documentation for clarity ([c4ecdc3](https://github.com/NelakaWith/pulse-server/commit/c4ecdc353927684bc960d5a1acb91042152bf3b6)) +- **docs:** update license badge in README from GPL to AGPL 3.0 ([7869bf7](https://github.com/NelakaWith/pulse-server/commit/7869bf71d736d875bbb8ffd59be759e6839830f1)) +- **docs:** update license information in README from ISC to AGPL 3.0 ([01eb613](https://github.com/NelakaWith/pulse-server/commit/01eb6134230b06a055bdc213666b65bc1dce3919)) +- **import:** Change import statement for openRouterService to named import ([678783e](https://github.com/NelakaWith/pulse-server/commit/678783efd5eb2ef673bb5ee00743672e65eeef99)) +- **logging:** simplify error logging in enrichment tasks ([6ab3481](https://github.com/NelakaWith/pulse-server/commit/6ab348139d40437237a291f64c2eb4bbfe78c2a7)) +- **rateLimit:** add periodic cleanup of expired request entries ([ada3143](https://github.com/NelakaWith/pulse-server/commit/ada3143b56a11edb143a0adb5e930f3183bbb271)) +- **release:** use semver for version increment logic in release script ([458e875](https://github.com/NelakaWith/pulse-server/commit/458e8755d17c2519a457d8dcf5cd6651565bc220)) +- **tests:** ensure app is properly closed after tests ([2519a99](https://github.com/NelakaWith/pulse-server/commit/2519a9969e08b0e72618220751f34cc3e09d73e7)) +- **tests:** update expected response status codes to include authentication errors ([e43fb21](https://github.com/NelakaWith/pulse-server/commit/e43fb21cea2633f2a04c9b8a64796c4e9caaef0c)) From 04e2bc29eb6e031840f08aedee9fafe4ecdc090b Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Thu, 13 Nov 2025 18:32:37 +0530 Subject: [PATCH 11/18] feat(enrichment): enhance analysis parsing and enrich repository data with pull requests --- routes/enrichment.js | 167 ++++++++++++++++++++++++++++++++++---- services/githubService.js | 122 ++++++++++++++++++---------- 2 files changed, 232 insertions(+), 57 deletions(-) diff --git a/routes/enrichment.js b/routes/enrichment.js index b2d3877..5f2b095 100644 --- a/routes/enrichment.js +++ b/routes/enrichment.js @@ -6,6 +6,65 @@ import { config } from "../config/index.js"; const router = express.Router(); +/** + * Parse AI analysis text into structured sections + */ +function parseAnalysisIntoSections(content) { + const sections = { + overview: "", + codeQuality: "", + healthMetrics: "", + areasForImprovement: "", + recommendations: "", + raw: content, + }; + + // Split content by common section headers (case insensitive) + const lines = content.split("\n"); + let currentSection = "overview"; + + for (const line of lines) { + const lowerLine = line.toLowerCase().trim(); + + if (lowerLine.includes("code quality") || lowerLine.includes("quality")) { + currentSection = "codeQuality"; + } else if (lowerLine.includes("health") || lowerLine.includes("metrics")) { + currentSection = "healthMetrics"; + } else if ( + lowerLine.includes("improvement") || + lowerLine.includes("areas") + ) { + currentSection = "areasForImprovement"; + } else if (lowerLine.includes("recommendation")) { + currentSection = "recommendations"; + } else if ( + lowerLine.includes("overview") || + lowerLine.includes("summary") + ) { + currentSection = "overview"; + } else { + // Add content to current section + if (sections[currentSection]) { + sections[currentSection] += line + "\n"; + } else { + sections[currentSection] = line + "\n"; + } + } + } + + // Clean up sections (remove empty ones, trim whitespace) + Object.keys(sections).forEach((key) => { + if (key !== "raw") { + sections[key] = sections[key].trim(); + if (!sections[key]) { + delete sections[key]; + } + } + }); + + return sections; +} + /** * POST /api/enrichment * Unified endpoint for repository enrichment tasks @@ -69,8 +128,6 @@ async function handleAnalyzeTask(res, owner, name, question) { question || "Provide a comprehensive analysis of this repository's code quality, health, and potential areas for improvement."; - Logger.info(`[Enrichment] Analyze task: ${owner}/${name}`); - // Step 1: Get GitHub repository data Logger.info(`[Enrichment] Fetching repository: ${owner}/${name}`); const repoResult = await githubService.getRepository(owner, name); @@ -102,9 +159,27 @@ async function handleAnalyzeTask(res, owner, name, question) { Logger.warn(`[Enrichment] Issues fetch failed: ${issuesResult.error}`); } - // Step 3: Prepare context for AI + // Step 3: Get repository pull requests for additional context + Logger.info( + `[Enrichment] Fetching recent pull requests for ${owner}/${name}` + ); + const prsResult = await githubService.getRepositoryPullRequests( + owner, + name, + 5 + ); + if (prsResult.success) { + Logger.info( + `[Enrichment] PRs data: ${prsResult.data.totalCount} total PRs, fetched ${prsResult.data.nodes.length} recent` + ); + } else { + Logger.warn(`[Enrichment] PRs fetch failed: ${prsResult.error}`); + } + + // Step 4: Prepare context for AI const repoData = repoResult.data; const issuesData = issuesResult.success ? issuesResult.data : null; + const prsData = prsResult.success ? prsResult.data : null; const contextPrompt = ` Repository Information: @@ -113,6 +188,11 @@ Repository Information: - Stars: ${repoData.stargazerCount} - Forks: ${repoData.forkCount} - Primary Language: ${repoData.primaryLanguage?.name || "Unknown"} +- Languages: ${ + repoData.languages?.nodes?.map((l) => l.name).join(", ") || "Unknown" + } +- Default Branch: ${repoData.defaultBranchRef?.name || "Unknown"} +- Branches: ${repoData.refs?.nodes?.map((r) => r.name).join(", ") || "Unknown"} - Created: ${repoData.createdAt} - Last Updated: ${repoData.updatedAt} @@ -126,11 +206,24 @@ ${issuesData.nodes : "" } +${ + prsData + ? `Recent Pull Requests (${prsData.totalCount} total): +${prsData.nodes + .slice(0, 3) + .map( + (pr) => + `- #${pr.number}: ${pr.title} (${pr.state}) - ${pr.additions}+/${pr.deletions}-` + ) + .join("\n")}` + : "" +} + User Question: ${analysisQuestion} -Please analyze this repository and answer the question based on the provided data.`; +Please analyze this repository and answer the question based on the provided data. Structure your response with clear sections like: Code Quality, Health Metrics, Areas for Improvement, and Recommendations.`; - // Step 4: Send to AI + // Step 5: Send to AI Logger.info( `[Enrichment] Sending context to AI (${contextPrompt.length} characters)` ); @@ -153,22 +246,64 @@ Please analyze this repository and answer the question based on the provided dat `[Enrichment] AI analysis completed successfully (${aiResult.data.choices[0].message.content.length} characters response)` ); - // Step 5: Return enriched response + // Step 6: Parse AI analysis into structured sections + const aiContent = aiResult.data.choices[0].message.content; + const analysisSections = parseAnalysisIntoSections(aiContent); + + // Step 7: Return enriched response return res.json({ success: true, data: { repository: { - name: repoData.name, - owner: owner, - url: repoData.url, - stars: repoData.stargazerCount, - language: repoData.primaryLanguage?.name, - }, - analysis: aiResult.data.choices[0].message.content, - metadata: { - totalIssues: issuesData?.totalCount || 0, - lastUpdated: repoData.updatedAt, + basic: { + name: repoData.name, + owner: owner, + url: repoData.url, + description: repoData.description, + createdAt: repoData.createdAt, + updatedAt: repoData.updatedAt, + }, + stats: { + stars: repoData.stargazerCount, + forks: repoData.forkCount, + }, + languages: + repoData.languages?.nodes?.map((l) => ({ + name: l.name, + color: l.color, + })) || [], + branches: repoData.refs?.nodes?.map((r) => r.name) || [], + defaultBranch: repoData.defaultBranchRef?.name, }, + issues: issuesData + ? { + totalCount: issuesData.totalCount, + recent: issuesData.nodes.slice(0, 3).map((issue) => ({ + number: issue.number, + title: issue.title, + state: issue.state, + author: issue.author.login, + labels: issue.labels.nodes.map((l) => l.name), + createdAt: issue.createdAt, + })), + } + : null, + pullRequests: prsData + ? { + totalCount: prsData.totalCount, + recent: prsData.nodes.slice(0, 3).map((pr) => ({ + number: pr.number, + title: pr.title, + state: pr.state, + author: pr.author.login, + additions: pr.additions, + deletions: pr.deletions, + changedFiles: pr.changedFiles, + createdAt: pr.createdAt, + })), + } + : null, + analysis: analysisSections, }, }); } catch (error) { diff --git a/services/githubService.js b/services/githubService.js index 6233b76..aad2398 100644 --- a/services/githubService.js +++ b/services/githubService.js @@ -1,13 +1,27 @@ import { GraphQLClient, gql } from "graphql-request"; +import axios from "axios"; import { config, isDevelopment } from "../config/index.js"; import { Logger } from "../utils/index.js"; class GitHubService { constructor() { - this.client = new GraphQLClient(config.github.graphqlApiBaseUrl, { - headers: { - authorization: `Bearer ${config.github.token}`, - }, + // Use GraphQL client with token for authenticated requests + this.graphqlClient = new GraphQLClient(config.github.graphqlApiBaseUrl, { + headers: config.github.token + ? { + authorization: `Bearer ${config.github.token}`, + } + : {}, + }); + + // Use axios for REST API calls (can work without auth for public repos) + this.restClient = axios.create({ + baseURL: config.github.restApiBaseUrl, + headers: config.github.token + ? { + authorization: `Bearer ${config.github.token}`, + } + : {}, }); } @@ -18,48 +32,74 @@ class GitHubService { * @returns {Promise} Repository data */ async getRepository(owner, name) { - const query = gql` - query GetRepository($owner: String!, $name: String!) { - repository(owner: $owner, name: $name) { - id - name - description - url - stargazerCount - forkCount - createdAt - updatedAt - primaryLanguage { - name - color - } - languages(first: 10) { - nodes { - name - color - } - } - defaultBranchRef { - name - } - refs(refPrefix: "refs/heads/", first: 10) { - nodes { - name + try { + // First try REST API (works without auth for public repos) + const restResponse = await this.restClient.get(`/repos/${owner}/${name}`); + const repoData = restResponse.data; + + // Try to get additional data with GraphQL if token is available + let languages = []; + let branches = []; + let defaultBranch = repoData.default_branch; + + if (config.github.token) { + try { + const query = gql` + query GetRepositoryDetails($owner: String!, $name: String!) { + repository(owner: $owner, name: $name) { + languages(first: 10) { + nodes { + name + color + } + } + refs(refPrefix: "refs/heads/", first: 10) { + nodes { + name + } + } + } } - } + `; + const graphqlData = await this.graphqlClient.request(query, { + owner, + name, + }); + languages = graphqlData.repository.languages?.nodes || []; + branches = + graphqlData.repository.refs?.nodes?.map((r) => r.name) || []; + } catch (graphqlError) { + Logger.warn( + `GraphQL failed, using REST data only: ${graphqlError.message}` + ); } } - `; - try { - const data = await this.client.request(query, { owner, name }); + // Format response to match expected structure + const formattedData = { + id: repoData.id.toString(), + name: repoData.name, + description: repoData.description, + url: repoData.html_url, + stargazerCount: repoData.stargazers_count, + forkCount: repoData.forks_count, + createdAt: repoData.created_at, + updatedAt: repoData.updated_at, + primaryLanguage: repoData.language + ? { name: repoData.language, color: null } + : null, + languages: { nodes: languages }, + defaultBranchRef: { name: defaultBranch }, + refs: { nodes: branches.map((name) => ({ name })) }, + }; + return { success: true, - data: data.repository, + data: formattedData, }; } catch (error) { if (isDevelopment) { - Logger.error(`GitHub GraphQL Error (getRepository): ${error.message}`); + Logger.error(`GitHub API Error (getRepository): ${error.message}`); } return { success: false, @@ -124,7 +164,7 @@ class GitHubService { `; try { - const data = await this.client.request(query, { + const data = await this.graphqlClient.request(query, { owner, name, first, @@ -218,7 +258,7 @@ class GitHubService { `; try { - const data = await this.client.request(query, { + const data = await this.graphqlClient.request(query, { owner, name, first, @@ -282,7 +322,7 @@ class GitHubService { `; try { - const data = await this.client.request(query, { login, first }); + const data = await this.graphqlClient.request(query, { login, first }); return { success: true, data: data.user.repositories, @@ -341,7 +381,7 @@ class GitHubService { `; try { - const data = await this.client.request(query, { + const data = await this.graphqlClient.request(query, { query: searchQuery, first, }); From 4098fd837e0fdf99f79fe40d43fd855e5d86d4e7 Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Tue, 18 Nov 2025 08:00:09 +0530 Subject: [PATCH 12/18] feat(enrichment): enhance analysis parsing and add tests for section extraction --- routes/enrichment.js | 178 ++++++++++++++++++++++++-------------- services/githubService.js | 77 +++++++++++++++++ tests/enrichment.test.js | 15 ++++ 3 files changed, 207 insertions(+), 63 deletions(-) create mode 100644 tests/enrichment.test.js diff --git a/routes/enrichment.js b/routes/enrichment.js index 5f2b095..0022c9a 100644 --- a/routes/enrichment.js +++ b/routes/enrichment.js @@ -25,31 +25,29 @@ function parseAnalysisIntoSections(content) { for (const line of lines) { const lowerLine = line.toLowerCase().trim(); - - if (lowerLine.includes("code quality") || lowerLine.includes("quality")) { + // Detect headers using starts-with style detection to avoid mid-line matches + if (/^code quality|^quality/.test(lowerLine)) { currentSection = "codeQuality"; - } else if (lowerLine.includes("health") || lowerLine.includes("metrics")) { + continue; + } + if (/^health|^metrics/.test(lowerLine)) { currentSection = "healthMetrics"; - } else if ( - lowerLine.includes("improvement") || - lowerLine.includes("areas") - ) { + continue; + } + if (/^(areas for improvement|areas|improvement)/.test(lowerLine)) { currentSection = "areasForImprovement"; - } else if (lowerLine.includes("recommendation")) { + continue; + } + if (/^recommendation/.test(lowerLine)) { currentSection = "recommendations"; - } else if ( - lowerLine.includes("overview") || - lowerLine.includes("summary") - ) { + continue; + } + if (/^overview|^summary/.test(lowerLine)) { currentSection = "overview"; - } else { - // Add content to current section - if (sections[currentSection]) { - sections[currentSection] += line + "\n"; - } else { - sections[currentSection] = line + "\n"; - } + continue; } + // Add content to current section + sections[currentSection] = (sections[currentSection] || "") + line + "\n"; } // Clean up sections (remove empty ones, trim whitespace) @@ -76,11 +74,23 @@ function parseAnalysisIntoSections(content) { * "scope": "repo", * "task": "analyze" | "summarize-issues", * "question": "optional custom question for analyze task" + * "files": ["src/index.js", "README.md"] // optional - list of file paths to include snippets + * "programmingLanguages": ["JavaScript", "TypeScript"] // optional - hints to focus analysis + * "frameworks": ["Express"] // optional - hints to focus analysis * } */ router.post("/", async (req, res) => { try { - const { owner, name, scope, task, question } = req.body; + const { + owner, + name, + scope, + task, + question, + files: requestedFiles, + programmingLanguages, + frameworks, + } = req.body; // Validate required fields if (!owner || !name || !scope || !task) { @@ -100,7 +110,15 @@ router.post("/", async (req, res) => { // Route based on task if (task === "analyze") { - return handleAnalyzeTask(res, owner, name, question); + return handleAnalyzeTask( + res, + owner, + name, + question, + requestedFiles, + programmingLanguages, + frameworks + ); } else if (task === "summarize-issues") { return handleSummarizeIssuesTask(res, owner, name); } else { @@ -121,7 +139,15 @@ router.post("/", async (req, res) => { /** * Handle analyze task */ -async function handleAnalyzeTask(res, owner, name, question) { +async function handleAnalyzeTask( + res, + owner, + name, + question, + requestedFiles = [], + programmingLanguages = [], + frameworks = [] +) { try { // For analyze task, use a default question if not provided const analysisQuestion = @@ -176,52 +202,74 @@ async function handleAnalyzeTask(res, owner, name, question) { Logger.warn(`[Enrichment] PRs fetch failed: ${prsResult.error}`); } - // Step 4: Prepare context for AI - const repoData = repoResult.data; - const issuesData = issuesResult.success ? issuesResult.data : null; - const prsData = prsResult.success ? prsResult.data : null; + // Step 4: Get extra resources: README, commits, and requested file snippets + Logger.info(`[Enrichment] Fetching repository README for ${owner}/${name}`); + const readmeResult = await githubService.getRepositoryReadme(owner, name); + if (readmeResult.success) { + Logger.info(`[Enrichment] README fetched (${owner}/${name})`); + } else { + Logger.warn(`[Enrichment] README fetch failed: ${readmeResult.error}`); + } - const contextPrompt = ` -Repository Information: -- Name: ${repoData.name} -- Description: ${repoData.description || "No description"} -- Stars: ${repoData.stargazerCount} -- Forks: ${repoData.forkCount} -- Primary Language: ${repoData.primaryLanguage?.name || "Unknown"} -- Languages: ${ - repoData.languages?.nodes?.map((l) => l.name).join(", ") || "Unknown" + Logger.info(`[Enrichment] Fetching recent commits for ${owner}/${name}`); + const commitsResult = await githubService.getRecentCommits(owner, name, 5); + if (commitsResult.success) { + Logger.info( + `[Enrichment] ${commitsResult.data.length} commits fetched for ${owner}/${name}` + ); + } else { + Logger.warn(`[Enrichment] Commits fetch failed: ${commitsResult.error}`); } -- Default Branch: ${repoData.defaultBranchRef?.name || "Unknown"} -- Branches: ${repoData.refs?.nodes?.map((r) => r.name).join(", ") || "Unknown"} -- Created: ${repoData.createdAt} -- Last Updated: ${repoData.updatedAt} - -${ - issuesData - ? `Recent Issues (${issuesData.totalCount} total): -${issuesData.nodes - .slice(0, 3) - .map((issue) => `- #${issue.number}: ${issue.title} (${issue.state})`) - .join("\n")}` - : "" -} -${ - prsData - ? `Recent Pull Requests (${prsData.totalCount} total): -${prsData.nodes - .slice(0, 3) - .map( - (pr) => - `- #${pr.number}: ${pr.title} (${pr.state}) - ${pr.additions}+/${pr.deletions}-` - ) - .join("\n")}` - : "" -} + // Fetch user requested file snippets (limit 3 files to keep token usage reasonable) + const fileSnippets = []; + if (Array.isArray(requestedFiles) && requestedFiles.length) { + const limitedFiles = requestedFiles.slice(0, 3); + for (const path of limitedFiles) { + Logger.info(`[Enrichment] Fetching file content for ${path}`); + const fileResult = await githubService.getFileContent( + owner, + name, + path + ); + if (fileResult.success) { + const snippet = (fileResult.data.content || "").slice(0, 1200); // 1200 chars max + fileSnippets.push({ path, snippet }); + } else { + Logger.warn( + `[Enrichment] File fetch failed for ${path}: ${fileResult.error}` + ); + } + } + } -User Question: ${analysisQuestion} + // Step 4: Prepare context for AI + const repoData = repoResult.data; + const issuesData = issuesResult.success ? issuesResult.data : null; + const prsData = prsResult.success ? prsResult.data : null; -Please analyze this repository and answer the question based on the provided data. Structure your response with clear sections like: Code Quality, Health Metrics, Areas for Improvement, and Recommendations.`; + const payload = { + repo_url: `https://github.com/${owner}/${name}`, + analysis_goal: analysisQuestion, + files: requestedFiles || [], + programming_languages: programmingLanguages?.length + ? programmingLanguages + : repoData.languages?.nodes?.map((l) => l.name) || [], + frameworks: frameworks || [], + repo_description: repoData.description || "", + readme_excerpt: + readmeResult.success && readmeResult.data.content + ? readmeResult.data.content.replace(/\n/g, "\\n").slice(0, 1200) + : "", + recent_commits: commitsResult.success ? commitsResult.data : [], + requested_file_snippets: fileSnippets, + }; + + const contextPrompt = `Please analyze the following repository. Use the payload JSON to guide your response (be concise):\n\n${JSON.stringify( + payload, + null, + 2 + )}\n\nPlease structure your response with clear sections: Overview, Code Quality, Health Metrics, Areas for Improvement, and Recommendations.`; // Step 5: Send to AI Logger.info( @@ -275,6 +323,9 @@ Please analyze this repository and answer the question based on the provided dat branches: repoData.refs?.nodes?.map((r) => r.name) || [], defaultBranch: repoData.defaultBranchRef?.name, }, + readme: readmeResult.success ? readmeResult.data.content : null, + recentCommits: commitsResult.success ? commitsResult.data : [], + requestedFiles: fileSnippets, issues: issuesData ? { totalCount: issuesData.totalCount, @@ -421,4 +472,5 @@ Please provide: } } +export { parseAnalysisIntoSections }; export default router; diff --git a/services/githubService.js b/services/githubService.js index aad2398..0c0c2e3 100644 --- a/services/githubService.js +++ b/services/githubService.js @@ -402,6 +402,83 @@ class GitHubService { } } + /** + * Get repository README content (decoded) + * @param {string} owner + * @param {string} name + */ + async getRepositoryReadme(owner, name) { + try { + const response = await this.restClient.get( + `/repos/${owner}/${name}/readme`, + { + headers: { Accept: "application/vnd.github.v3.raw" }, + } + ); + // When using `application/vnd.github.v3.raw`, GitHub returns raw text + const content = response.data; + return { success: true, data: { content } }; + } catch (error) { + if (isDevelopment) { + Logger.error( + `GitHub API Error (getRepositoryReadme): ${error.message}` + ); + } + return { success: false, error: error.message }; + } + } + + /** + * Get recent commits for a repository via REST + * @param {string} owner + * @param {string} name + * @param {number} perPage + */ + async getRecentCommits(owner, name, perPage = 5) { + try { + const response = await this.restClient.get( + `/repos/${owner}/${name}/commits?per_page=${perPage}` + ); + const commits = (response.data || []).map((c) => ({ + sha: c.sha, + message: c.commit.message, + author: c.commit.author?.name || c.author?.login || null, + date: c.commit.author?.date || null, + url: c.html_url, + })); + return { success: true, data: commits }; + } catch (error) { + if (isDevelopment) { + Logger.error(`GitHub API Error (getRecentCommits): ${error.message}`); + } + return { success: false, error: error.message }; + } + } + + /** + * Get a repository file content (decoded) + * @param {string} owner + * @param {string} name + * @param {string} path + */ + async getFileContent(owner, name, path) { + try { + const response = await this.restClient.get( + `/repos/${owner}/${name}/contents/${encodeURIComponent(path)}`, + { headers: { Accept: "application/vnd.github.v3.raw" } } + ); + const content = response.data; + return { success: true, data: { path, content } }; + } catch (error) { + if (isDevelopment) { + Logger.error( + `GitHub API Error (getFileContent ${path}): ${error.message}` + ); + } + return { success: false, error: error.message }; + } + } + /** * Check if GitHub token is configured * @returns {boolean} True if token is available diff --git a/tests/enrichment.test.js b/tests/enrichment.test.js new file mode 100644 index 0000000..204c86e --- /dev/null +++ b/tests/enrichment.test.js @@ -0,0 +1,15 @@ +import { parseAnalysisIntoSections } from "../routes/enrichment.js"; + +describe("parseAnalysisIntoSections", () => { + test("parses sections correctly", () => { + const sample = `Overview:\nThis is an overview.\n\nCode Quality:\nGood modularization.\n\nHealth Metrics:\nActive contributors: 2\n\nAreas for Improvement:\nAdd tests.\n\nRecommendations:\nAdd CI.`; + const result = parseAnalysisIntoSections(sample); + // console.log('parse result:', result); + expect(result.overview).toContain("This is an overview"); + expect(result.codeQuality).toContain("Good modularization"); + expect(result.healthMetrics).toContain("Active contributors"); + expect(result.areasForImprovement).toContain("Add tests"); + expect(result.recommendations).toContain("Add CI"); + expect(result.raw).toBeDefined(); + }); +}); From 1ac4702af71323fac0d5720bfeebd690619fcd4e Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Tue, 18 Nov 2025 08:02:32 +0530 Subject: [PATCH 13/18] feat(analyze): enhance AI payload with summarized issues and pull requests --- routes/enrichment.js | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/routes/enrichment.js b/routes/enrichment.js index 0022c9a..8c83dd9 100644 --- a/routes/enrichment.js +++ b/routes/enrichment.js @@ -248,6 +248,33 @@ async function handleAnalyzeTask( const issuesData = issuesResult.success ? issuesResult.data : null; const prsData = prsResult.success ? prsResult.data : null; + // Compact issues/PRs for the AI payload (short excerpts to control size) + const issuesSummary = issuesData + ? issuesData.nodes.slice(0, 10).map((issue) => ({ + number: issue.number, + title: issue.title, + state: issue.state, + author: issue.author?.login || null, + labels: issue.labels.nodes.map((l) => l.name), + createdAt: issue.createdAt, + body_excerpt: (issue.body || "").slice(0, 400), + })) + : []; + + const prsSummary = prsData + ? prsData.nodes.slice(0, 10).map((pr) => ({ + number: pr.number, + title: pr.title, + state: pr.state, + author: pr.author?.login || null, + additions: pr.additions, + deletions: pr.deletions, + changedFiles: pr.changedFiles, + createdAt: pr.createdAt, + body_excerpt: (pr.body || "").slice(0, 400), + })) + : []; + const payload = { repo_url: `https://github.com/${owner}/${name}`, analysis_goal: analysisQuestion, @@ -262,14 +289,16 @@ async function handleAnalyzeTask( ? readmeResult.data.content.replace(/\n/g, "\\n").slice(0, 1200) : "", recent_commits: commitsResult.success ? commitsResult.data : [], + issues: issuesSummary, + pull_requests: prsSummary, requested_file_snippets: fileSnippets, }; - const contextPrompt = `Please analyze the following repository. Use the payload JSON to guide your response (be concise):\n\n${JSON.stringify( + const contextPrompt = `Please analyze the following repository. Use the payload JSON to guide your response. Provide a detailed, actionable, and well-formatted analysis.\n\n${JSON.stringify( payload, null, 2 - )}\n\nPlease structure your response with clear sections: Overview, Code Quality, Health Metrics, Areas for Improvement, and Recommendations.`; + )}\n\nThe model must follow these output rules and formatting guidelines (do not change the top-level sections):\n\n- Include the following sections: Overview, Code Quality, Health Metrics, Areas for Improvement, and Recommendations.\n- For each section, provide:\n * A 1-sentence summary.\n * Key Findings: a short bullet list (include file paths when relevant).\n * For each finding, add a Severity label (High / Medium / Low).\n * Suggested Fix: a concise remediation.\n * Estimated Effort: very short (Low/Medium/High or numeric hours).\n- When applicable, call out Security and Performance concerns as distinct findings in Areas for Improvement.\n- End with a short prioritized list of Recommendations (1-5 items), each with a rationale and expected impact.\n- Keep the whole reply concise and limit overall length (preferably under 900 words) while providing enough detail for action.\n\nOptional: please include a small JSON snippet at the end called 'analysis_summary_json' with keys overview, codeQuality, healthMetrics, areasForImprovement, and recommendations that mirrors the prose. This helps programmatic parsing but is optional.\n\nPlease start your response now:`; // Step 5: Send to AI Logger.info( From feaece14a3acc0d1c47db372d64f803998faa2fc Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Tue, 18 Nov 2025 08:21:38 +0530 Subject: [PATCH 14/18] fix(config): update PORT to 3002 for development and production environments --- ecosystem.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ecosystem.config.js b/ecosystem.config.js index 40ad107..8439dbf 100644 --- a/ecosystem.config.js +++ b/ecosystem.config.js @@ -11,11 +11,11 @@ module.exports = { // Environment variables env: { NODE_ENV: "development", - PORT: 3000, + PORT: 3002, }, env_production: { NODE_ENV: "production", - PORT: 3000, + PORT: 3002, }, // Logging From 57059ed8583ac814e16e46ebc5f60a7693318e64 Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Tue, 18 Nov 2025 08:25:27 +0530 Subject: [PATCH 15/18] fix(docs): correct code block formatting in README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3a4fe1f..1c8c31f 100644 --- a/README.md +++ b/README.md @@ -355,7 +355,7 @@ pm2 save ```bash curl "http://localhost:3000/api/enrichment?api_key=sk-prod-3c96ecbbe2b83a2130d69d25579b5361ca7ead272c478f61" -```` +``` ### Configuration @@ -1350,3 +1350,4 @@ This project is licensed under the AGPL 3.0 License - see the [LICENSE](LICENSE) --- **Built with โค๏ธ for AI-powered applications** +```` From 5359f7c148c4726447369afb0a8777b32b643348 Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Tue, 18 Nov 2025 08:46:20 +0530 Subject: [PATCH 16/18] feat(ci): enhance build-and-deploy workflow with SSH setup for deployment --- .github/workflows/build-and-deploy.yml | 1 + docs/CI_CD_PIPELINE.md | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index b45c88f..d4fe079 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -32,6 +32,7 @@ jobs: DROPLET_USER: ${{ secrets.DROPLET_USER }} SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} run: | + mkdir -p ~/.ssh echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts diff --git a/docs/CI_CD_PIPELINE.md b/docs/CI_CD_PIPELINE.md index af420ae..bee5c43 100644 --- a/docs/CI_CD_PIPELINE.md +++ b/docs/CI_CD_PIPELINE.md @@ -48,11 +48,9 @@ Pulse Server uses **GitHub Actions** for continuous integration and deployment w --- -**Triggers:** Pull Request created/updated - ### 3. **Build and Deploy Pipeline** (`.drone.yml` - build-and-deploy) -**Purpose:** Validates that PR titles and commits follow conventional commits format +**Purpose:** Build and deploy application to production server **Triggers:** - Push to `main` or `develop` branch @@ -106,9 +104,11 @@ services/** ### 5. **Release Workflow** (`.github/workflows/release.yml`) -**Triggers:** Push to `main` branch (after PR merge) -**Triggers:** Tag push (e.g., `git push --tags`) -**Purpose:** Automatically create semantic version releases +**Triggers:** + +- Push to `main` branch (after PR merge) +- Tag push (e.g., `git push --tags`) + **Purpose:** Automatically create semantic version releases **Steps:** From 7fe175aac0ecd70bd552d238872d64279badda8b Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Tue, 18 Nov 2025 08:47:38 +0530 Subject: [PATCH 17/18] feat(ci): add git configuration and dependency installation steps to auto-release workflow --- .github/workflows/auto-release.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml index ba5de8a..dc10edc 100644 --- a/.github/workflows/auto-release.yml +++ b/.github/workflows/auto-release.yml @@ -6,9 +6,17 @@ on: jobs: auto-release: runs-on: ubuntu-latest + permissions: + contents: write steps: - name: Checkout code uses: actions/checkout@v4 + - name: Configure git + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + - name: Install dependencies + run: npm ci - name: Check for release run: | LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") From f20135dc1001a3ef6db571f530502262f2fc263d Mon Sep 17 00:00:00 2001 From: NelakaWith Date: Tue, 18 Nov 2025 08:48:08 +0530 Subject: [PATCH 18/18] fix(docs): correct formatting in generateApiKey.js documentation --- utils/generateApiKey.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/generateApiKey.js b/utils/generateApiKey.js index 2ca89df..950e230 100644 --- a/utils/generateApiKey.js +++ b/utils/generateApiKey.js @@ -5,7 +5,7 @@ import path from "path"; /** * Generate a secure random API key * Format: sk-[environment]-[random] - *n + * * @param {string} environment - Environment prefix (prod, staging, dev) * @returns {string} A secure random API key *