diff --git a/.github/package.json b/.github/package.json new file mode 100644 index 000000000..5babb1d92 --- /dev/null +++ b/.github/package.json @@ -0,0 +1,13 @@ +{ + "name": "checkly-docs-automation", + "version": "1.0.0", + "description": "Automation scripts for Checkly documentation", + "private": true, + "scripts": { + "update-cli-changelog": "node scripts/update-cli-changelog.js", + "update-agent-changelog": "node scripts/update-agent-changelog.js" + }, + "dependencies": { + "@octokit/rest": "^20.0.2" + } +} \ No newline at end of file diff --git a/.github/scripts/update-agent-changelog.js b/.github/scripts/update-agent-changelog.js new file mode 100644 index 000000000..22a7888b7 --- /dev/null +++ b/.github/scripts/update-agent-changelog.js @@ -0,0 +1,243 @@ +#!/usr/bin/env node + +const fs = require('fs').promises; +const path = require('path'); +const https = require('https'); + +/** + * Fetch tags from Docker Hub API + */ +async function fetchDockerHubTags() { + return new Promise((resolve, reject) => { + const options = { + hostname: 'hub.docker.com', + path: '/v2/repositories/checkly/agent/tags?page_size=50', + method: 'GET', + headers: { + 'Accept': 'application/json' + } + }; + + https.get(options, (res) => { + let data = ''; + + res.on('data', (chunk) => { + data += chunk; + }); + + res.on('end', () => { + try { + const result = JSON.parse(data); + resolve(result.results || []); + } catch (error) { + reject(error); + } + }); + }).on('error', reject); + }); +} + +/** + * Parse version from tag name + */ +function parseVersion(tagName) { + // Match semantic version pattern + const match = tagName.match(/^v?(\d+\.\d+\.\d+)$/); + return match ? match[1] : null; +} + +/** + * Compare semantic versions + */ +function compareVersions(a, b) { + const partsA = a.split('.').map(Number); + const partsB = b.split('.').map(Number); + + for (let i = 0; i < 3; i++) { + if (partsA[i] > partsB[i]) return 1; + if (partsA[i] < partsB[i]) return -1; + } + return 0; +} + +/** + * Read current changelog and extract documented versions + */ +async function getDocumentedVersions() { + const changelogPath = path.join(process.cwd(), 'site/content/docs/changelog/private-locations-agent.md'); + const content = await fs.readFile(changelogPath, 'utf8'); + + const versionRegex = /### Version ([\d.]+)/g; + const versions = new Set(); + let match; + + while ((match = versionRegex.exec(content)) !== null) { + versions.add(match[1]); + } + + return versions; +} + +/** + * Format date for changelog + */ +function formatDate(dateString) { + const date = new Date(dateString); + return date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric' + }); +} + +/** + * Generate changelog entry template + */ +function generateChangelogTemplate(version, date) { + return `### Version ${version} (${date}) + + + +**Breaking changes** + + +- + +**Features** + + +- + +**Improvements** + + +- + +**Security updates** + + +- + +**Bug fixes** + + +- + +**Runtime support** + + +- Runtime: + +**Dependencies** + + +- Node.js: +- Docker minimum: +- Playwright: + +`; +} + +/** + * Update changelog file + */ +async function updateChangelog(newVersions) { + const changelogPath = path.join(process.cwd(), 'site/content/docs/changelog/private-locations-agent.md'); + let content = await fs.readFile(changelogPath, 'utf8'); + + // Sort versions newest first + newVersions.sort((a, b) => compareVersions(b.version, a.version)); + + // Generate new entries + const newEntries = newVersions + .map(v => generateChangelogTemplate(v.version, v.date)) + .join('\n'); + + // Find insertion point (after "## Checkly Agent Releases" heading) + const insertRegex = /## Checkly Agent Releases\n/; + const insertMatch = content.match(insertRegex); + + if (insertMatch) { + const insertIndex = insertMatch.index + insertMatch[0].length; + content = + content.slice(0, insertIndex) + + '\n' + newEntries + + content.slice(insertIndex); + } else { + // Fallback: insert after the main description + const lines = content.split('\n'); + const headerEnd = lines.findIndex(line => line.startsWith('## ')); + + content = [ + ...lines.slice(0, headerEnd), + '', + '## Checkly Agent Releases', + '', + newEntries.trim(), + '', + ...lines.slice(headerEnd) + ].join('\n'); + } + + await fs.writeFile(changelogPath, content); +} + +/** + * Main function + */ +async function main() { + try { + console.log('Fetching Docker Hub tags...'); + const tags = await fetchDockerHubTags(); + + console.log('Getting documented versions...'); + const documentedVersions = await getDocumentedVersions(); + + // Process tags and find new versions + const newVersions = []; + + for (const tag of tags) { + const version = parseVersion(tag.name); + + if (version && !documentedVersions.has(version)) { + // Skip if it's a beta/rc/alpha version + if (tag.name.includes('beta') || tag.name.includes('rc') || tag.name.includes('alpha')) { + continue; + } + + newVersions.push({ + version, + date: formatDate(tag.last_updated), + tag: tag.name + }); + } + } + + if (newVersions.length === 0) { + console.log('No new versions found'); + process.exit(0); + } + + console.log(`Found ${newVersions.length} new version(s):`, newVersions.map(v => v.version).join(', ')); + + // Update changelog + await updateChangelog(newVersions); + + // Set output for GitHub Actions + const latestVersion = newVersions.sort((a, b) => compareVersions(b.version, a.version))[0].version; + + // Update commit message to include version + await require('child_process').execSync( + `git commit --amend -m "docs: add Private Locations Agent version ${latestVersion} to changelog"`, + { stdio: 'inherit' } + ); + + console.log('Changelog updated successfully'); + + } catch (error) { + console.error('Error updating changelog:', error); + process.exit(1); + } +} + +main(); \ No newline at end of file diff --git a/.github/scripts/update-cli-changelog.js b/.github/scripts/update-cli-changelog.js new file mode 100644 index 000000000..5ec89e2c9 --- /dev/null +++ b/.github/scripts/update-cli-changelog.js @@ -0,0 +1,195 @@ +#!/usr/bin/env node + +const fs = require('fs').promises; +const path = require('path'); +const { Octokit } = require('@octokit/rest'); + +const octokit = new Octokit({ + auth: process.env.GITHUB_TOKEN +}); + +async function getLatestReleases() { + const { data: releases } = await octokit.repos.listReleases({ + owner: 'checkly', + repo: 'checkly-cli', + per_page: 20 + }); + + return releases.filter(r => !r.prerelease); +} + +async function getCurrentChangelog() { + const changelogPath = path.join(process.cwd(), 'site/content/docs/changelog/cli.md'); + return await fs.readFile(changelogPath, 'utf8'); +} + +function parseReleaseNotes(body) { + const sections = { + breaking: [], + added: [], + changed: [], + fixed: [], + deprecated: [], + removed: [], + security: [] + }; + + if (!body) return sections; + + const lines = body.split('\n'); + let currentSection = null; + + lines.forEach(line => { + const trimmed = line.trim(); + + // Match section headers + if (trimmed.match(/^#+\s*(breaking\s*changes?)/i)) { + currentSection = 'breaking'; + } else if (trimmed.match(/^#+\s*added/i) || trimmed.match(/^#+\s*features?/i)) { + currentSection = 'added'; + } else if (trimmed.match(/^#+\s*changed/i)) { + currentSection = 'changed'; + } else if (trimmed.match(/^#+\s*fixed/i) || trimmed.match(/^#+\s*bug\s*fixes/i)) { + currentSection = 'fixed'; + } else if (trimmed.match(/^#+\s*deprecated/i)) { + currentSection = 'deprecated'; + } else if (trimmed.match(/^#+\s*removed/i)) { + currentSection = 'removed'; + } else if (trimmed.match(/^#+\s*security/i)) { + currentSection = 'security'; + } + // Capture list items + else if (currentSection && (trimmed.startsWith('-') || trimmed.startsWith('*'))) { + // Clean up the line + let cleanLine = trimmed.replace(/^[-*]\s*/, '- '); + + // Remove PR links but keep context + cleanLine = cleanLine.replace(/\s*\(#\d+\)\s*/, ''); + cleanLine = cleanLine.replace(/\s*\[#\d+\]\([^)]+\)\s*/, ''); + + // Remove commit hashes + cleanLine = cleanLine.replace(/\s*\([0-9a-f]{7,40}\)\s*/, ''); + + sections[currentSection].push(cleanLine); + } + }); + + return sections; +} + +function extractRuntimeInfo(body) { + // Try to find runtime information in the release notes + const runtimeMatch = body.match(/runtime[s]?\s*(20\d{2}\.\d{2})/i); + return runtimeMatch ? runtimeMatch[1] : null; +} + +function formatChangelogEntry(release) { + const version = release.tag_name.replace(/^v/, ''); + const date = new Date(release.published_at).toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric' + }); + + const sections = parseReleaseNotes(release.body); + const runtime = extractRuntimeInfo(release.body || ''); + + let entry = `## Version ${version} - ${date}\n\n`; + + // Add runtime info if found + if (runtime) { + entry += `**Runtime support**: ${runtime}\n\n`; + } + + // Add sections in preferred order + const sectionOrder = ['breaking', 'added', 'changed', 'fixed', 'deprecated', 'removed', 'security']; + + sectionOrder.forEach(section => { + if (sections[section].length > 0) { + const title = section.charAt(0).toUpperCase() + section.slice(1); + const sectionTitle = section === 'breaking' ? 'Breaking Changes' : title; + + entry += `### ${sectionTitle}\n`; + sections[section].forEach(item => { + entry += `${item}\n`; + }); + entry += '\n'; + } + }); + + return entry; +} + +async function updateChangelog() { + try { + const releases = await getLatestReleases(); + const currentChangelog = await getCurrentChangelog(); + + // Extract existing versions + const versionRegex = /## Version ([\d.]+)/g; + const existingVersions = new Set(); + let match; + + while ((match = versionRegex.exec(currentChangelog)) !== null) { + existingVersions.add(match[1]); + } + + // Find new releases + const newReleases = releases.filter(release => { + const version = release.tag_name.replace(/^v/, ''); + return !existingVersions.has(version); + }); + + if (newReleases.length === 0) { + console.log('No new releases found'); + process.exit(0); + } + + // Sort by date (newest first) + newReleases.sort((a, b) => new Date(b.published_at) - new Date(a.published_at)); + + // Generate new entries + const newEntries = newReleases.map(formatChangelogEntry).join('\n'); + + // Insert new entries after the header section + const insertPoint = currentChangelog.indexOf('## Version compatibility'); + let updatedChangelog; + + if (insertPoint !== -1) { + updatedChangelog = + currentChangelog.slice(0, insertPoint) + + newEntries + '\n' + + currentChangelog.slice(insertPoint); + } else { + // Fallback: insert after the initial description + const lines = currentChangelog.split('\n'); + const headerEnd = lines.findIndex(line => line.startsWith('##')); + + updatedChangelog = [ + ...lines.slice(0, headerEnd), + '', + newEntries.trim(), + '', + ...lines.slice(headerEnd) + ].join('\n'); + } + + // Write updated changelog + const changelogPath = path.join(process.cwd(), 'site/content/docs/changelog/cli.md'); + await fs.writeFile(changelogPath, updatedChangelog); + + console.log(`Added ${newReleases.length} new releases to changelog`); + console.log(`Latest version: ${newReleases[0].tag_name}`); + + // Output for GitHub Actions + console.log(`::set-output name=has_updates::true`); + console.log(`::set-output name=latest_version::${newReleases[0].tag_name}`); + console.log(`::set-output name=release_count::${newReleases.length}`); + + } catch (error) { + console.error('Error updating changelog:', error); + process.exit(1); + } +} + +updateChangelog(); \ No newline at end of file diff --git a/.github/workflows/README.md b/.github/workflows/README.md new file mode 100644 index 000000000..2c9c20d78 --- /dev/null +++ b/.github/workflows/README.md @@ -0,0 +1,54 @@ +# Automated Changelog Workflows + +This directory contains GitHub Actions workflows that automatically detect new releases and create pull requests to update the documentation changelogs. + +## Workflows + +### 1. Update CLI Changelog (`update-cli-changelog.yml`) + +- **Trigger**: Daily at 9 AM UTC, manual dispatch, or webhook +- **Source**: GitHub releases from `checkly/checkly-cli` +- **Behavior**: Parses release notes and creates PRs with formatted changelog entries +- **PR Type**: Ready for review (contains parsed release information) + +### 2. Update Private Locations Agent Changelog (`update-agent-changelog.yml`) + +- **Trigger**: Daily at 10 AM UTC or manual dispatch +- **Source**: Docker Hub tags from `checkly/agent` +- **Behavior**: Detects new versions and creates PRs with template entries +- **PR Type**: Draft (requires human to fill in release details) + +## Key Differences + +| Feature | CLI Workflow | Agent Workflow | +|---------|-------------|----------------| +| Data source | GitHub API | Docker Hub API | +| Release notes | Available | Not available | +| PR content | Complete | Template | +| PR status | Ready | Draft | +| Human input | Review only | Fill details | + +## Setup + +1. Ensure Node.js dependencies are installed: + ```bash + cd .github + npm install + ``` + +2. No additional secrets required (uses default `GITHUB_TOKEN`) + +## Manual Execution + +To manually trigger either workflow: + +1. Go to Actions tab in GitHub +2. Select the workflow +3. Click "Run workflow" +4. Select branch and run + +## Maintenance + +- Update Node.js version in workflows as needed +- Check API endpoints if Docker Hub or GitHub change their APIs +- Review and update the changelog template format as needed \ No newline at end of file diff --git a/.github/workflows/update-agent-changelog.yml b/.github/workflows/update-agent-changelog.yml new file mode 100644 index 000000000..e58f4b51f --- /dev/null +++ b/.github/workflows/update-agent-changelog.yml @@ -0,0 +1,94 @@ +name: Update Private Locations Agent Changelog + +on: + # Run daily to check for new releases + schedule: + - cron: '0 10 * * *' # 10 AM UTC daily + # Allow manual trigger + workflow_dispatch: + +jobs: + check-docker-releases: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + + - name: Install dependencies + run: | + cd .github + npm install + + - name: Check for new agent releases + id: check-releases + run: | + node .github/scripts/update-agent-changelog.js + + - name: Check for changes + id: check-changes + run: | + if git diff --quiet; then + echo "has_changes=false" >> $GITHUB_OUTPUT + else + echo "has_changes=true" >> $GITHUB_OUTPUT + # Get the version from the last commit message + VERSION=$(git log -1 --pretty=%B | grep -oP 'version \K[\d.]+' || echo "unknown") + echo "version=$VERSION" >> $GITHUB_OUTPUT + fi + + - name: Create Pull Request + if: steps.check-changes.outputs.has_changes == 'true' + uses: peter-evans/create-pull-request@v5 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: 'docs: add Private Locations Agent version ${{ steps.check-changes.outputs.version }} to changelog' + title: 'Add Private Locations Agent v${{ steps.check-changes.outputs.version }} to changelog' + body: | + ## Private Locations Agent Release Detected + + A new version of the Checkly Private Locations Agent has been published to Docker Hub. + + ### Action Required + + This PR contains a template for the new version. Please fill in the following information: + + 1. **Breaking Changes**: Any changes that require user action + 2. **Features**: New capabilities added + 3. **Fixes**: Bug fixes and improvements + 4. **Security**: Security-related updates + 5. **Runtime Support**: Which Checkly runtimes are supported + 6. **Dependencies**: Node.js version, Docker requirements + + ### Resources + + - Docker Hub: https://hub.docker.com/r/checkly/agent/tags + - Internal release notes or team communication + - Previous changelog entries for reference + + ### Checklist + + - [ ] Fill placeholder sections as needed + - [ ] Verify runtime(s) compatibility + - [ ] Check Docker version requirements + - [ ] Add version notes if needed + - [ ] Convert from draft to ready for review + + --- + *This PR was automatically generated. Human review and details are required.* + branch: auto/agent-changelog-${{ steps.check-changes.outputs.version }} + delete-branch: true + draft: true + labels: | + docs + needs-details + agent-release + automated \ No newline at end of file diff --git a/.github/workflows/update-cli-changelog.yml b/.github/workflows/update-cli-changelog.yml new file mode 100644 index 000000000..ae823a744 --- /dev/null +++ b/.github/workflows/update-cli-changelog.yml @@ -0,0 +1,85 @@ +name: Update CLI Changelog + +on: + # Run on schedule + schedule: + - cron: '0 9 * * *' # Daily at 9 AM UTC + # Manual trigger + workflow_dispatch: + # Webhook from CLI repo (optional) + repository_dispatch: + types: [cli-release] + +jobs: + check-and-update: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + cache: 'npm' + cache-dependency-path: '.github/package-lock.json' + + - name: Install dependencies + run: | + cd .github + npm ci + + - name: Update changelog + id: update + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + node .github/scripts/update-cli-changelog.js + + - name: Check for changes + id: check-changes + run: | + if git diff --quiet; then + echo "has_changes=false" >> $GITHUB_OUTPUT + else + echo "has_changes=true" >> $GITHUB_OUTPUT + echo "changes<> $GITHUB_OUTPUT + git diff --stat >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + fi + + - name: Create Pull Request + if: steps.check-changes.outputs.has_changes == 'true' + uses: peter-evans/create-pull-request@v5 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: 'docs: update CLI changelog with latest releases' + title: 'Update CLI Changelog' + body: | + ## Automated CLI Changelog Update + + This PR updates the CLI changelog with the latest releases from the checkly-cli repository. + + ### Changes + ``` + ${{ steps.check-changes.outputs.changes }} + ``` + + ### Review checklist + - [ ] Version numbers are correct + - [ ] Release notes are properly formatted + - [ ] Runtime compatibility information is accurate + - [ ] No sensitive information included + + --- + *This PR was automatically generated by the update-cli-changelog workflow.* + branch: auto/update-cli-changelog + delete-branch: true + labels: | + documentation + automated + changelog \ No newline at end of file diff --git a/site/config.toml b/site/config.toml index 52475d48d..e18e1c8ae 100644 --- a/site/config.toml +++ b/site/config.toml @@ -223,6 +223,11 @@ disqusShortname = "checkly" url = "/docs/runtimes/specs/" weight = 190 +[[menu.reference]] + name = "Changelog" + url = "/docs/changelog/" + weight = 195 + [[menu.reference]] name = "API Reference" url = "https://developers.checklyhq.com" diff --git a/site/content/docs/changelog/_index.md b/site/content/docs/changelog/_index.md new file mode 100644 index 000000000..dabdbe8ce --- /dev/null +++ b/site/content/docs/changelog/_index.md @@ -0,0 +1,37 @@ +--- +title: Checkly Changelog - Checkly Docs +displayTitle: Checkly Changelog +navTitle: Changelog +weight: 100 +slug: / +--- + +Track changes and updates to Checkly products. This change log documents new features, improvements, and fixes for our developer tools. + +## Checkly Product Changelog + +To receive updates on major product announcements, CLI and agent releases, check out the [Checkly Product Changelog](https://feedback.checklyhq.com/changelog) where you can also write or up vote feature requests. + +## [Checkly CLI](/docs/changelog/cli/) + +Command-line interface for managing Checkly resources programmatically. View updates for: + +- New commands and features +- Performance improvements +- Bug fixes and resolved issues + +## [Private Locations Agent](/docs/changelog/private-locations-agent/) + +Docker-based agent for running checks from your infrastructure. View updates for: + +- Runtime compatibility changes +- Security enhancements +- Configuration updates + +## Stay up-to-date + +Get notified about updates: + +- **Blog**: Read major announcements and feature deep-dives on the [Checkly blog](https://www.checklyhq.com/blog/) +- **Community**: [Join our developer community](https://checklycommunity.slack.com/join/shared_invite/zt-2qc51mpyr-5idwVD4R4izkf5FC4CFk1A#/shared-invite/email) for live discussions and support. +- **Product**: View all product updates in the main [product changelog](https://feedback.checklyhq.com/changelog) you can subscribe via e-mail or to an RSS feed that automatically posts into your Slack, Teams or Discord channels. diff --git a/site/content/docs/changelog/cli.md b/site/content/docs/changelog/cli.md new file mode 100644 index 000000000..5cf585458 --- /dev/null +++ b/site/content/docs/changelog/cli.md @@ -0,0 +1,289 @@ +--- +title: Checkly CLI Changelog - Checkly Docs +displayTitle: Checkly CLI Changelog +navTitle: CLI +weight: 10 +--- + +Release notes for the Checkly command-line interface. For installation and usage, see the [CLI documentation](/docs/cli). + +## Latest version + +Check your current version: + +```bash +checkly --version +``` + +Update to the latest version: + +```bash +npm install checkly@latest +``` + +## Checkly CLI Releases + +### Version 6.0.1 (June 26, 2025) + +**Fixed** + +- Fix Playwright Test crash when importing date-fns. Disable tree-shaking for ESM bundling + +### Version 6.0.0 (June 23, 2025) + +**Runtime support**: [2025.04](/docs/runtimes/specs/#202504) + +**Added** + +- Support for runtime [2025.04](/docs/runtimes/specs/#202504) + +### Version 5.2.2 (June 11, 2025) + +**Fixed** + +- Ensure we exclude `__checks__` build directory from the file watcher + +### Version 5.2.1 (June 5, 2025) + +**Fixed** + +- Allow nested projects in monorepos by using a stable Playwright Test cache folder. The cache folder will be placed in `checkly.config.ts`'s directory + +### Version 5.2.0 (May 23, 2025) + +**Changed** + +- Extract and handle Playwright Test annotations in runtime [2025.04](/docs/runtimes/specs/#202504), allowing `@playwright/test` test runs with `.skip` and `.only` annotations + +### Version 5.1.5 (May 14, 2025) + +**Fixed** + +- Fix passing env vars into testSessions + +### Version 5.1.4 (May 8, 2025) + +**Fixed** + +- Update axios to fix the "Cannot set headers after they are sent to the client" errors + +### Version 5.1.3 (May 2, 2025) + +**Fixed** + +- Build correct external list for esbuild. Exclude all dependencies, include devDependencies + +### Version 5.1.2 (April 30, 2025) + +**Fixed** + +- Fix external bundling options so Node dependencies can be excluded correctly + +### Version 5.1.1 (April 11, 2025) + +**Fixed** + +- Add missing location details to global result when using test sessions (in the CLI) + +### Version 5.1.0 (April 4, 2025) + +**Added** + +- Add `AlertEscalationPolicy`, allowing the configuration of multi-channel alerts + +### Version 5.0.1 (March 21, 2025) + +**Fixed** + +- Fix the usage of the `checklyPropsPath` option for check resources + +### Version 5.0.0 (March 18, 2025) + +**Added** + +- Update the CLI with the improved Pagerduty v2 integration + +### Version 4.9.1 (February 29, 2025) + +**Fixed** + +- Increase server shutdown timer to avoid sudden connection closes while reporting results back + +### Version 4.9.0 (February 2, 2025) + +**Added** + +- Add `runParallel`, which replaces `runInParallel` + +**Deprecated** + +- `runInParallel` is deprecated and will be removed in a future version. Please use `runParallel` instead + +### Version 4.8.0 (January 25, 2025) + +**Added** + +- Support `testMatch` for Monitoring as Code projects + +### Version 4.7.0 (January 11, 2025) + +**Added** + +- Support for the `api-only` project type in the `test` command + +### Version 4.6.0 (December 7, 2024) + +**Added** + +- Add `syncOnDeploy` option to opt out of syncing Terraform resources + +### Version 4.5.1 (November 29, 2024) + +**Fixed** + +- Export `testSessionId` from Checkly + +### Version 4.5.0 (November 8, 2024) + +**Added** + +- Add test session support to group results from a single test run + +### Version 4.4.0 (October 31, 2024) + +**Added** + +- Add support for Multistep check test-only mode + +### Version 4.3.1 (October 29, 2024) + +**Fixed** + +- Fix missing named export from CLI constructs (`defineConfig`) + +### Version 4.3.0 (October 25, 2024) + +**Breaking Changes** + +- The `--list` flag has been repurposed from listing all checks to listing all resources +- Private location slugs now require the prefix `private-` to match the API behavior +- The `--record` flag now has no effect on Browser or Multistep checks +- The constructs are now built using TypeScript v5 + +**Added** + +- Heartbeat monitoring support +- New Playwright Test runner (`@playwright/test`) +- Standardized config file with `defineConfig` +- Support for browser checks created from `@playwright/test` files +- Support for `.only` & `.skip` annotations in check files + +**Changed** + +- Support Node 22 when using runtime [2025.04](/docs/runtimes/specs/#202504) +- The `init` command is now deprecated in favor of scaffolding + +### Version 4.2.0 (May 23, 2024) + +**Added** + +- Support for external check IDs + +### Version 4.1.0 (April 10, 2024) + +**Runtime support**: [2024.02](/docs/runtimes/specs/#202402) + +**Breaking Changes** + +- Node.js 16 is no longer supported + +**Added** + +- Support for runtime [2024.02](/docs/runtimes/specs/#202402) + +### Version 4.0.0 (March 14, 2024) + +**Added** + +- Support for `connectTimeout` in API check defaults + +### Version 3.3.0 (February 22, 2024) + +**Added** + +- Add `--tags` filter to `checkly test` command + +### Version 3.2.0 (January 18, 2024) + +**Added** + +- Add support for `cookies` prop on API checks + +### Version 3.1.0 (December 14, 2023) + +**Added** + +- Add support for headers in Multistep checks + +### Version 3.0.2 (November 30, 2023) + +**Added** + +- Support for `pathName` and `followRedirects` on API checks + +### Version 3.0.1 (November 16, 2023) + +**Added** + +- Add support for new alerting reminders +- Add support for snapshot testing + +### Version 3.0.0 (October 12, 2023) + +**Runtime support**: [2023.09](/docs/runtimes/specs/#202309) + +**Added** + +- Support for runtime [2023.09](/docs/runtimes/specs/#202309) + +### Version 2.8.0 (September 21, 2023) + +**Added** + +- Support for `retryStrategy` on checks +- Support for `checkRunId` in browser checks + +### Version 2.7.0 (August 24, 2023) + +**Runtime support**: [2023.02](/docs/runtimes/specs/#202302) + +**Breaking Changes** + +- The `checkly test` command now runs location-based scheduling by default +- Default runtime changed to [2023.02](/docs/runtimes/specs/#202302) + +**Added** + +- Support for runtime [2023.02](/docs/runtimes/specs/#202302) +- Support for missing response and request properties on API checks + +> Note: For historical information about versions prior to 2.7.0, please refer to the GitHub releases page. + +## Migration guides + +Before upgrading major versions: + +1. Review breaking changes in release notes +2. Test in a non-production environment +3. Update configuration files as needed +4. Run `checkly test` to verify compatibility + +## Additional resources + +- **All releases**: View complete history on [GitHub releases](https://github.com/checkly/checkly-cli/releases) +- **Major updates**: See summarized releases in the [product changelog](https://feedback.checklyhq.com/changelog?c=Checkly+CLI) + +## Getting help + +- Join the [developer community](https://www.checklyhq.com/slack/) for discussions +- [Contact support](https://app.checklyhq.com/?support=true) for assistance \ No newline at end of file diff --git a/site/content/docs/changelog/private-locations-agent.md b/site/content/docs/changelog/private-locations-agent.md new file mode 100644 index 000000000..c3d9db300 --- /dev/null +++ b/site/content/docs/changelog/private-locations-agent.md @@ -0,0 +1,85 @@ +--- +title: Private Locations Agent Changelog - Checkly Docs +displayTitle: Private Locations Agent Changelog +navTitle: Private Locations Agent +weight: 20 +--- + +Release history for the Checkly Private Locations Agent. For setup instructions, see the [Private Locations documentation](/docs/private-locations). + +- **Major releases**: View summarized releases in the [product changelog](https://feedback.checklyhq.com/changelog?c=Checkly+Agent) + +## Checkly Agent Releases + +### Version 6.0.6 (June 26, 2025) + +**Security improvements** + +- Updated container to use GID 10001 for enhanced Kubernetes compatibility +- Configure with `runAsGroup: 10001` in your security context + +**Stability fixes** + +- Improved error handling for missing `await` statements in Playwright tests +- Fixed JSON report generation issues with oversized or unparsable values + +### Version 6.0.5 (June 23, 2025) + +**Features** + +- Added support for [Playwright check suites](/docs/playwright-checks/). +- Added debug logging with `DEBUG=checkly:*` environment variable +- Bundled Node.js for offline installations + +**Security updates** + +- Enhanced secret scrubbing in logs +- Patched all reported npm vulnerabilities + +**Improvements** + +- Added retry logic for artifact uploads +- Improved fault tolerance + +### Version 6.0.0 (May 9, 2025) + +**Breaking changes** + +- Minimum Docker version 20.10 required +- Updated configuration schema + +**New features** + +- Support for runtimes [2024.09](/docs/runtimes/specs/#202409) and [2025.04](/docs/runtimes/specs/#202504) +- Disabled `PLAYWRIGHT_NO_COPY_PROMPT` for better reporter compatibility + +## Version history + +- **Summary**: [Product changelog](https://feedback.checklyhq.com/changelog?c=Checkly+Agent) +- **Latest versions pusblished**: [Docker Hub tags](https://hub.docker.com/r/checkly/agent/tags) + +## Compatibility matrix + +| Agent version | Docker minimum | Supported runtimes | Node.js | +|--------------|----------------|-------------------|---------| +| 6.x | 20.10 | [2025.04](/docs/runtimes/specs/#202504), [2024.09](/docs/runtimes/specs/#202409) | v22.11.0 | +| 5.x | 19.03 | [2025.04](/docs/runtimes/specs/#202509) | v22.11.0 | +| 4.x | 19.03 | [2024.09](/docs/runtimes/specs/#202409) | v18 | +| 3.x | 19.03 | [2023.09](/docs/runtimes/specs/#202309) | v18 | + +## Update checklist + +When [updating to the lates agent](/docs/private-locations/checkly-agent-configuration/#updating-the-agent-container), ensure: + +1. Confirm Docker version compatibility +2. Review breaking changes like Node.js supported version. +3. Test in staging environment +4. Update configuration files +5. Deploy changes + +## Getting help + +- View logs with `docker logs ` +- Enable debug mode for detailed diagnostics +- Join the global [developer community](https://www.checklyhq.com/slack/) discussions +- [Contact the support team](https://app.checklyhq.com/?support=true) for help \ No newline at end of file