diff --git a/.github/workflows/broken_links.yml b/.github/workflows/broken_links.yml index f320d62..678b89e 100644 --- a/.github/workflows/broken_links.yml +++ b/.github/workflows/broken_links.yml @@ -2,7 +2,6 @@ name: Broken Links Report on: schedule: - # Run every Saturday at 2 AM UTC - cron: "0 2 * * 6" workflow_dispatch: @@ -14,68 +13,37 @@ jobs: issues: write steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # ratchet:actions/checkout@v6.0.2 + - uses: actions/checkout@v4 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # ratchet:actions/setup-node@v6.2.0 + - uses: actions/setup-go@v5 with: - node-version: lts/* + go-version: "1.22" - - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # ratchet:actions/cache@v5.0.3 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - - name: Install Dependencies - run: npm ci --ignore-scripts --no-audit --no-progress --prefer-offline + - name: Build + run: go build -o awesome-docker ./cmd/awesome-docker - name: Run Link Check id: link_check run: | - npm test > link_check_output.txt 2>&1 || true - if grep -q "❌ ERROR" link_check_output.txt; then - echo "has_errors=true" >> $GITHUB_OUTPUT + ./awesome-docker check > link_check_output.txt 2>&1 || true + if grep -q "broken links" link_check_output.txt; then + echo "has_errors=true" >> "$GITHUB_OUTPUT" else - echo "has_errors=false" >> $GITHUB_OUTPUT + echo "has_errors=false" >> "$GITHUB_OUTPUT" fi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Create/Update Issue for Broken Links if: steps.link_check.outputs.has_errors == 'true' - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # ratchet:actions/github-script@v8 + uses: actions/github-script@v7 with: script: | const fs = require('fs'); const output = fs.readFileSync('link_check_output.txt', 'utf8'); - // Extract error information - const errorMatch = output.match(/❌ ERROR[\s\S]*$/); - const errorInfo = errorMatch ? errorMatch[0] : 'Link check failed - see workflow logs'; + const issueBody = `# Broken Links Detected\n\nThe weekly link check found broken or inaccessible links.\n\n\`\`\`\n${output}\n\`\`\`\n\n## Action Required\n\n- Update the URL if the resource moved\n- Remove the entry if permanently unavailable\n- Add to \`config/exclude.yaml\` if a known false positive\n\n---\n*Auto-generated by broken_links.yml*`; - const issueBody = `# 🔗 Broken Links Detected - - The weekly link check has found broken or inaccessible links in the repository. - - ## Error Details - - \`\`\` - ${errorInfo} - \`\`\` - - ## Action Required - - Please review and fix the broken links above. Options: - - Update the URL if the resource moved - - Remove the entry if it's permanently unavailable - - Add to \`tests/exclude_in_test.json\` if it's a known false positive - - --- - *Auto-generated by [broken_links.yml](https://github.com/veggiemonk/awesome-docker/blob/master/.github/workflows/broken_links.yml)* - `; - - // Check for existing issue const issues = await github.rest.issues.listForRepo({ owner: context.repo.owner, repo: context.repo.repo, @@ -91,21 +59,19 @@ jobs: issue_number: issues.data[0].number, body: issueBody }); - console.log(`Updated issue #${issues.data[0].number}`); } else { - const issue = await github.rest.issues.create({ + await github.rest.issues.create({ owner: context.repo.owner, repo: context.repo.repo, - title: '🔗 Broken Links Detected - Action Required', + title: 'Broken Links Detected', body: issueBody, labels: ['broken-links', 'bug'] }); - console.log(`Created issue #${issue.data.number}`); } - name: Close Issue if No Errors if: steps.link_check.outputs.has_errors == 'false' - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # ratchet:actions/github-script@v8 + uses: actions/github-script@v7 with: script: | const issues = await github.rest.issues.listForRepo({ @@ -115,7 +81,6 @@ jobs: labels: 'broken-links', per_page: 1 }); - if (issues.data.length > 0) { await github.rest.issues.update({ owner: context.repo.owner, @@ -124,11 +89,4 @@ jobs: state: 'closed', state_reason: 'completed' }); - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: issues.data[0].number, - body: '✅ All links are now working! Closing this issue.' - }); - console.log(`Closed issue #${issues.data[0].number}`); } diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml index 5ec560a..9d90e25 100644 --- a/.github/workflows/deploy-pages.yml +++ b/.github/workflows/deploy-pages.yml @@ -20,22 +20,20 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # ratchet:actions/checkout@v6.0.2 + uses: actions/checkout@v4 - - name: Setup Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # ratchet:actions/setup-node@v6.2.0 + - uses: actions/setup-go@v5 with: - node-version-file: '.nvmrc' - cache: 'npm' + go-version: "1.22" - - name: Install dependencies - run: npm ci + - name: Build CLI + run: go build -o awesome-docker ./cmd/awesome-docker - name: Build website - run: npm run build + run: ./awesome-docker build - name: Upload artifact - uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # ratchet:actions/upload-pages-artifact@v4 + uses: actions/upload-pages-artifact@v4 with: path: ./website @@ -48,4 +46,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # ratchet:actions/deploy-pages@v4 + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/health_report.yml b/.github/workflows/health_report.yml index 5eac611..3a95606 100644 --- a/.github/workflows/health_report.yml +++ b/.github/workflows/health_report.yml @@ -2,56 +2,52 @@ name: Weekly Health Report on: schedule: - # Run every Monday at 9 AM UTC - cron: "0 9 * * 1" - workflow_dispatch: # Allow manual trigger + workflow_dispatch: jobs: health-check: runs-on: ubuntu-latest permissions: - contents: write + contents: read issues: write steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # ratchet:actions/checkout@v6.0.2 + - uses: actions/checkout@v4 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # ratchet:actions/setup-node@v6.2.0 + - uses: actions/setup-go@v5 with: - node-version: lts/* + go-version: "1.22" - - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # ratchet:actions/cache@v5.0.3 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- + - name: Build + run: go build -o awesome-docker ./cmd/awesome-docker - - name: Install Dependencies - run: npm ci --ignore-scripts --no-audit --no-progress --prefer-offline - - - name: Run Health Check - run: node tests/health_check.mjs + - name: Run Health Scoring + run: ./awesome-docker health continue-on-error: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Upload Health Report - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # ratchet:actions/upload-artifact@v5 - with: - name: health-report - path: HEALTH_REPORT.md + - name: Generate Report + id: report + run: | + ./awesome-docker report > health_report.txt 2>&1 || true + if [ -s health_report.txt ]; then + echo "has_report=true" >> "$GITHUB_OUTPUT" + else + echo "has_report=false" >> "$GITHUB_OUTPUT" + fi - - name: Create Issue with Health Report - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # ratchet:actions/github-script@v8 + - name: Create/Update Issue with Health Report + if: steps.report.outputs.has_report == 'true' + uses: actions/github-script@v7 with: script: | const fs = require('fs'); + const report = fs.readFileSync('health_report.txt', 'utf8'); - // Read the health report - const report = fs.readFileSync('HEALTH_REPORT.md', 'utf8'); + const issueBody = report + '\n\n---\n*Auto-generated weekly by health_report.yml*'; - // Check if there's already an open issue const issues = await github.rest.issues.listForRepo({ owner: context.repo.owner, repo: context.repo.repo, @@ -60,25 +56,19 @@ jobs: per_page: 1 }); - const issueBody = report + '\n\n---\n*This report is auto-generated weekly. See [health_check.mjs](https://github.com/veggiemonk/awesome-docker/blob/master/tests/health_check.mjs) for details.*'; - if (issues.data.length > 0) { - // Update existing issue await github.rest.issues.update({ owner: context.repo.owner, repo: context.repo.repo, issue_number: issues.data[0].number, body: issueBody }); - console.log(`Updated issue #${issues.data[0].number}`); } else { - // Create new issue - const issue = await github.rest.issues.create({ + await github.rest.issues.create({ owner: context.repo.owner, repo: context.repo.repo, - title: '🏥 Weekly Health Report - Repository Maintenance Needed', + title: 'Weekly Health Report - Repository Maintenance Needed', body: issueBody, labels: ['health-report', 'maintenance'] }); - console.log(`Created issue #${issue.data.number}`); } diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 041e5b1..bc613fc 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -11,22 +11,16 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # ratchet:actions/checkout@v6.0.2 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # ratchet:actions/setup-node@v6.2.0 - with: - node-version: lts/* + - uses: actions/checkout@v4 - - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # ratchet:actions/cache@v5.0.3 - id: cache + - uses: actions/setup-go@v5 with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- + go-version: "1.22" - - name: Install Dependencies - # if: steps.cache.outputs.cache-hit != 'true' - run: npm ci --ignore-scripts --no-audit --no-progress --prefer-offline - - run: npm run test-pr + - name: Build + run: go build -o awesome-docker ./cmd/awesome-docker + + - name: Validate + run: ./awesome-docker validate env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}