├── .node-version ├── .github ├── CODEOWNERS ├── release-drafter.yml └── workflows │ ├── release-drafter.yml │ └── codeql-analysis.yml ├── .typos.toml ├── src ├── __tests__ │ ├── __snapshots__ │ │ ├── db.ts.snap │ │ └── routes.ts.snap │ ├── config.ts │ ├── app.ts │ ├── db.ts │ └── routes.ts ├── __mocks__ │ ├── github_access_tokens.json │ ├── github_installations.json │ ├── db.ts │ ├── github-configuration-as-code-issues.json │ └── github-credentials-releases.json ├── config.ts ├── bin │ └── www.ts ├── setupAva.ts ├── routes.ts ├── app.ts └── db.ts ├── Jenkinsfile_k8s ├── .editorconfig ├── .vsconfig └── launch.json ├── renovate.json ├── README.md ├── Dockerfile ├── .eslintrc.cjs ├── .dockerignore ├── .eslintignore ├── .gitignore ├── Jenkinsfile ├── package.json └── tsconfig.json /.node-version: -------------------------------------------------------------------------------- 1 | 24.12.0 2 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @jenkins-infra/plugin-site 2 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | _extends: .github 2 | 3 | name-template: 'next' 4 | tag-template: 'next' 5 | -------------------------------------------------------------------------------- /.typos.toml: -------------------------------------------------------------------------------- 1 | [files] 2 | extend-exclude = [ 3 | "*.json", 4 | "*.ts.md", 5 | "setupAva.ts" # most of the file is a private key 6 | ] 7 | -------------------------------------------------------------------------------- /src/__tests__/__snapshots__/db.ts.snap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/docker-plugin-site-issues/main/src/__tests__/__snapshots__/db.ts.snap -------------------------------------------------------------------------------- /Jenkinsfile_k8s: -------------------------------------------------------------------------------- 1 | buildDockerAndPublishImage('plugin-site-issues', [ 2 | publishToPrivateAzureRegistry: true, 3 | targetplatforms: 'linux/arm64', 4 | ]) 5 | -------------------------------------------------------------------------------- /src/__tests__/__snapshots__/routes.ts.snap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/docker-plugin-site-issues/main/src/__tests__/__snapshots__/routes.ts.snap -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | charset = utf-8 7 | trim_trailing_whitespace = true 8 | insert_final_newline = true 9 | 10 | [*.md] 11 | trim_trailing_whitespace = false 12 | -------------------------------------------------------------------------------- /src/__mocks__/github_access_tokens.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "ghs_thisismytokenname", 3 | "expires_at": "2022-04-14T23:58:39Z", 4 | "permissions": { 5 | "contents": "read", 6 | "metadata": "read" 7 | }, 8 | "repository_selection": "all" 9 | } 10 | -------------------------------------------------------------------------------- /.vsconfig/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "type": "node", 6 | "request": "attach", 7 | "name": "Attach", 8 | "restart": true, 9 | "processId": "${command:PickProcess}" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /src/__mocks__/github_installations.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 12345, 4 | "app_id": 1234, 5 | "app_slug": "jenkins-plugin-site", 6 | "target_id": 107424, 7 | "target_type": "Organization", 8 | "permissions": { 9 | "contents": "read", 10 | "metadata": "read" 11 | } 12 | } 13 | ] 14 | -------------------------------------------------------------------------------- /src/__tests__/config.ts: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import nock from 'nock'; 3 | import config from '../config.js'; 4 | import { clear } from 'typescript-memoize'; 5 | 6 | test.beforeEach(() => { 7 | nock.disableNetConnect(); 8 | clear(['db']); 9 | }); 10 | 11 | test('config > go', (t) => { 12 | t.true(!!config); 13 | }); 14 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base" 4 | ], 5 | "schedule": [ 6 | "every weekday" 7 | ], 8 | "labels": [ 9 | "dependencies" 10 | ], 11 | "packageRules": [ 12 | { 13 | "matchUpdateTypes": [ 14 | "minor", 15 | "patch", 16 | "pin", 17 | "digest" 18 | ], 19 | "automerge": true 20 | }, 21 | { 22 | "matchDepTypes": [ 23 | "devDependencies" 24 | ], 25 | "automerge": true 26 | } 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /.github/workflows/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name: Release Drafter 2 | on: 3 | workflow_dispatch: 4 | push: 5 | release: 6 | types: [released] 7 | # Only allow 1 release-drafter build at a time to avoid creating multiple "next" releases 8 | concurrency: "release-drafter" 9 | jobs: 10 | update_release_draft: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6 14 | env: 15 | # This token is generated automatically by default in GitHub Actions: no need to create it manually 16 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-plugin-site-issues 2 | 3 | [![](https://img.shields.io/docker/pulls/jenkinsciinfra/plugin-site-issues?label=jenkinsciinfra%2Fplugin-site-issues&logo=docker&logoColor=white)](https://hub.docker.com/r/jenkinsciinfra/plugin-site-issues/tags) 4 | 5 | NodeJS service and Docker image used by [the plugins site](plugins.jenkins.io) to retrieve release and issue information about a plugin. 6 | 7 | It fetches data from [the reporting service](https://reports.jenkins.io/issues.index.json), [Update Center](https://updates.jenkins.io/current/update-center.actual.json), [Jira issues](https://issues.jenkins.io) and GitHub API (releases & issues). 8 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # syntax=docker/dockerfile:1 2 | FROM node:24.12.0 as builder 3 | WORKDIR /app 4 | COPY ["package.json", "package-lock.json*", "./"] 5 | RUN npm install 6 | COPY . . 7 | RUN npm run build 8 | # hadolint ignore=DL3059 9 | RUN npm run test 10 | 11 | FROM node:24.12.0 12 | RUN mkdir /app && chown node:node -R /app 13 | 14 | USER node 15 | WORKDIR /app 16 | 17 | ARG GIT_COMMIT_REV 18 | ENV GIT_COMMIT_REV=$GIT_COMMIT_REV 19 | ENV NODE_ENV=production 20 | COPY --chown=node:node ["package.json", "package-lock.json*", "./"] 21 | RUN npm install --production 22 | 23 | COPY --chown=node:node . . 24 | COPY --chown=node:node --from=builder /app/dist ./dist 25 | 26 | CMD [ "node", "./dist/bin/www" ] 27 | 28 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parser: '@typescript-eslint/parser', 4 | plugins: [ 5 | '@typescript-eslint', 6 | 'import', 7 | ], 8 | env: { 9 | commonjs: true, 10 | es2021: true, 11 | }, 12 | extends: [ 13 | 'airbnb-typescript/base', 14 | 'plugin:import/recommended', 15 | ], 16 | parserOptions: { 17 | ecmaVersion: 12, 18 | project: './tsconfig.json', 19 | }, 20 | settings: { 21 | "import/parsers": { 22 | "@typescript-eslint/parser": [".ts", ".tsx"] 23 | }, 24 | "import/resolver": { 25 | node: { extensions: [ ".js", ".mjs", ".ts" ] }, 26 | "typescript": { 27 | "alwaysTryTypes": true, // always try to resolve types under `@types` directory even it doesn't contain any source code, like `@types/unist` 28 | } 29 | } 30 | }, 31 | rules: { 32 | 'no-restricted-syntax': 'off', 33 | semi: ['error', 'always'], 34 | "import/extensions": [ 35 | "error", 36 | "never", 37 | { 38 | "js": "always" 39 | } 40 | ] 41 | }, 42 | }; 43 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | Dockerfile 2 | # Logs 3 | logs 4 | *.log 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | 9 | # Runtime data 10 | pids 11 | *.pid 12 | *.seed 13 | *.pid.lock 14 | 15 | # Directory for instrumented libs generated by jscoverage/JSCover 16 | lib-cov 17 | 18 | # Coverage directory used by tools like istanbul 19 | coverage 20 | 21 | # nyc test coverage 22 | .nyc_output 23 | 24 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 25 | .grunt 26 | 27 | # Bower dependency directory (https://bower.io/) 28 | bower_components 29 | 30 | # node-waf configuration 31 | .lock-wscript 32 | 33 | # Compiled binary addons (https://nodejs.org/api/addons.html) 34 | build/Release 35 | 36 | # Dependency directories 37 | node_modules/ 38 | jspm_packages/ 39 | 40 | # Typescript v1 declaration files 41 | typings/ 42 | 43 | # Optional npm cache directory 44 | .npm 45 | 46 | # Optional eslint cache 47 | .eslintcache 48 | 49 | # Optional REPL history 50 | .node_repl_history 51 | 52 | # Output of 'npm pack' 53 | *.tgz 54 | 55 | # Yarn Integrity file 56 | .yarn-integrity 57 | 58 | # dotenv environment variables file 59 | .env 60 | 61 | # next.js build output 62 | .next 63 | *.pem 64 | dist/ 65 | tsconfig.tsbuildinfo 66 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | *.pem 63 | dist/ 64 | tsconfig.tsbuildinfo 65 | src/ava-nock 66 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | *.pem 63 | dist/ 64 | tsconfig.tsbuildinfo 65 | 66 | # IDE 67 | .idea 68 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | pipeline { 2 | environment { 3 | GET_CONTENT = "true" 4 | HOME = "/tmp" 5 | TZ = "UTC" 6 | } 7 | 8 | agent { 9 | label 'docker&&linux' 10 | } 11 | 12 | options { 13 | timeout(time: 60, unit: 'MINUTES') 14 | ansiColor('xterm') 15 | buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '5', numToKeepStr: '5') 16 | } 17 | 18 | stages { 19 | stage('Check for typos') { 20 | steps { 21 | sh ''' 22 | curl -qsL https://github.com/crate-ci/typos/releases/download/v1.33.1/typos-v1.33.1-x86_64-unknown-linux-musl.tar.gz | tar xvzf - ./typos 23 | ./typos --format sarif > out.sarif || true 24 | ''' 25 | recordIssues(tools: [sarif(id: 'typos', name: 'Typos', pattern: 'out.sarif')]) 26 | } 27 | } 28 | 29 | stage('Lint and test') { 30 | agent { 31 | docker { 32 | image 'node:20.18.0' 33 | reuseNode true 34 | } 35 | } 36 | steps { 37 | sh 'npm clean-install' 38 | sh 'npm run build' 39 | sh 'npm run lint' 40 | sh 'npm run test -- --tap | npx tap-xunit > junit.xml || true' 41 | junit 'junit.xml' 42 | } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/config.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | 3 | // from https://stackoverflow.com/questions/8571501/how-to-check-whether-a-string-is-base64-encoded-or-not 4 | const BASE64_REGEX = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/; 5 | 6 | export class Config { 7 | readonly jira: { 8 | readonly url: string 9 | }; 10 | 11 | readonly github: { 12 | readonly server: string | undefined 13 | readonly appId: string 14 | readonly privateKey: string 15 | }; 16 | 17 | constructor() { 18 | let githubPrivateKey = ''; 19 | if (process.env.GITHUB_APP_PRIVATE_KEY) { 20 | if (fs.existsSync(process.env.GITHUB_APP_PRIVATE_KEY)) { 21 | githubPrivateKey = fs.readFileSync(process.env.GITHUB_APP_PRIVATE_KEY).toString(); 22 | } else if (BASE64_REGEX.test(process.env.GITHUB_APP_PRIVATE_KEY)) { 23 | githubPrivateKey = Buffer.from(process.env.GITHUB_APP_PRIVATE_KEY, 'base64').toString('ascii'); 24 | } else { 25 | githubPrivateKey = process.env.GITHUB_APP_PRIVATE_KEY; 26 | } 27 | } 28 | this.jira = { 29 | url: process.env.JIRA_URL || 'https://issues.jenkins.io', 30 | }; 31 | this.github = { 32 | server: process.env.GITHUB_SERVER, 33 | appId: process.env.GITHUB_APP_ID || '', 34 | privateKey: githubPrivateKey, 35 | }; 36 | 37 | if (!this.github.appId) { 38 | throw new Error('GITHUB_APP_ID not set'); 39 | } 40 | 41 | if (!this.github.privateKey) { 42 | throw new Error('GITHUB_APP_PRIVATE_KEY not set'); 43 | } 44 | } 45 | } 46 | 47 | const config = new Config(); 48 | 49 | export default config; 50 | -------------------------------------------------------------------------------- /src/bin/www.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /* eslint-disable no-console */ 3 | import http from 'http'; 4 | import gracefulShutdown from 'http-graceful-shutdown'; 5 | import app from '../app.js'; 6 | 7 | /** 8 | * Normalize a port into a number, string, or false. 9 | */ 10 | 11 | function normalizePort(val: string): string | number | false { 12 | const port = parseInt(val, 10); 13 | 14 | if (isNaN(port)) { 15 | // named pipe 16 | return val; 17 | } 18 | 19 | if (port >= 0) { 20 | // port number 21 | return port; 22 | } 23 | 24 | return false; 25 | } 26 | 27 | /** 28 | * Get port from environment and store in Express. 29 | */ 30 | 31 | const port = normalizePort(process.env.PORT || '3000'); 32 | app.set('port', port); 33 | 34 | /** 35 | * Create HTTP server. 36 | */ 37 | 38 | const server = http.createServer(app); 39 | 40 | /** 41 | * Listen on provided port, on all network interfaces. 42 | */ 43 | 44 | gracefulShutdown(server.listen(port)); 45 | server.on('error', (error: NodeJS.ErrnoException): void => { 46 | if (error.syscall !== 'listen') { 47 | throw error; 48 | } 49 | 50 | const bind = typeof app.get('port') === 'string' 51 | ? `Pipe ${app.get('port')}` 52 | : `Port ${app.get('port')}`; 53 | 54 | // handle specific listen errors with friendly messages 55 | if (error.code === 'EACCES') { 56 | console.error(`${bind} requires elevated privileges`); 57 | process.exit(1); 58 | } else if (error.code === 'EADDRINUSE') { 59 | console.error(`${bind} is already in use`); 60 | process.exit(1); 61 | } 62 | throw error; 63 | }); 64 | server.on('listening', (): void => { 65 | const addr = server.address() as string | { port: number }; 66 | const bind = typeof addr === 'string' 67 | ? `pipe ${addr}` 68 | : `port ${addr.port}`; 69 | console.log(`Listening on ${bind}`); 70 | }); 71 | -------------------------------------------------------------------------------- /src/setupAva.ts: -------------------------------------------------------------------------------- 1 | process.env.NODE_ENV = 'test'; 2 | 3 | // from https://docs.aws.amazon.com/code-samples/latest/catalog/php-cloudfront-my-private-key.pem.html 4 | process.env.GITHUB_APP_PRIVATE_KEY = Buffer.from(`-----BEGIN RSA PRIVATE KEY----- 5 | MIIEpAIBAAKCAQEAywYF71cKSo3xyi7/0S7N1blFCmBX4eZz0gXf+zyBfomuqhwrekZbvI1SRYQR 6 | rbN740DuuguNYde+tdQOylnL76eEI1QF45/MGcAhbD3hWxH93sLf+0VyUQ22WD79FPZnBY/W4Y45 7 | 5W/Z824Ek1SubKmozQV/WOMz0EYjvN+m62d1psuse9uWn0JwLQ/701HnkkFksq9guWPGpvmcIXHV 8 | zPn1sGDn3d2RS+qU5/LUmclqP+SfMfmS3j6yrzYQ0lnFBpzw2oQvv7j4j+0tB4xDcjlb5fM9IsQx 9 | zfCAm2yF3TaraM2n7ikXkmXLsUVpdePn5loRVMsgiLBYbbAiiuT0rQIDAQABAoIBAQCNMZErFLN5 10 | iiIf5HPQ/OX1vzV+s+YqmuTtqVxOE5RTdllcwN6T2R6vkPEom2LYFL0SHPRpuuMGqs5dEi9/Ftg3 11 | wZ6qGyNFXLrLJc2Yw6hYd7jBFXJEA9Yu/IRV9uh3ja20NobQsuMc558CJv9Tn073Dz7v5uTb4pcE 12 | P+NW1Yv2pe1CcYTQ0lOjM1iOFGuXAGOt5sq4qaRjfCPUiV70wTBbnMCOYrISWGBEN4EYAAB/omkm 13 | 4oPIpelLMrfEsyeZ6JgiTM9c1OE0CdtqT9hnGhT0tLw/8/g+vsYQqgz9q7p+f7qlwOGBLIY+dlrO 14 | rAGQ1QTAnWgf+tg6qaBujyHQ/QtZAoGBAPUmtEfp+46E2TEja3k6C6MaIKXtRXMdEm4HQyNQMY7q 15 | hXP2KBNhChI8fMIHXM8sJ74KasXIceQU04Menc+2TjlxMJo6zRVzlb76E9Q1cxdafl2lkzkHlizy 16 | Db30Xa59ZVyyALzlI5Z3T/6oL6ePJUk6Rl4flz6FNoMkI4i776JbAoGBANQCDvjOF2kBgx5LlsYA 17 | vwvOTwBPdcjqa9auq0ZmmXnNLxJUasWEzKbVsK2Ym12UWSf2AjV20ik/gUySrdIpYM6kgSUKkRxh 18 | tg+a10DmNvxP7u50DEIOCsZkhKAq1YEwjpuZVnFR8BuYLY14e6Hy1vzSdf0pTQtyCWb5L/HjuWOX 19 | AoGBAJwBAk6VNpDuN2yOtrDRYGBtmwMcJ8rmYDkGhBHv0Wm6EizGI6CZaxhJx7aNiuEHn07PQD0W 20 | nmtfWW4iSJjK0aK6RgyPiLyy7kM2zvGHBfOBkdK0MCjljAqUCmysGgWVJLDFUbTjOC9jQ9OxYYoG 21 | jNq5q9fv0IZnrVXs5HP57LfrAoGAV3QJ7QRGj+A50BNqPH8uT5Zo7D3a3mgk18fxivbjtGS5WBxO 22 | du/S47ceTF25KR76sAtA2gELrEwv8ABJh3neHx+ozjjPpx9/VGyRAop0gBwQ+XgRXmYgd7obI17H 23 | 96SqDvFvwQsFurxJfiQHC8T6fgvq8+VHjMMbsch0yJkhbj0CgYAVDagZxBOcLCnFr8MJQmwCwtvX 24 | vVMI5JT++fXVG7h+itsKeuW2ROOZL41NyWxwaMLURXY2GMteGSBHpgmlQDHxdi/aL10QY9MLdf8a 25 | daBAqhoDEr4SoKju8pagw6lqm65XeARyWkxqFqAZbb2K3bWY3x9qZT6oubLrCDGDKEXAMPLE 26 | -----END RSA PRIVATE KEY-----`).toString('base64'); 27 | process.env.JIRA_URL = 'https://issues.jenkins.io'; 28 | process.env.GITHUB_APP_ID = 'github_app_id'; 29 | -------------------------------------------------------------------------------- /src/routes.ts: -------------------------------------------------------------------------------- 1 | import findPackageJson from 'find-package-json'; 2 | import { Request, Response } from 'express'; 3 | import { DB, Issue } from './db.js'; 4 | 5 | declare module 'express-serve-static-core' { 6 | interface Request { 7 | db: DB 8 | } 9 | } 10 | 11 | /* GET home page. */ 12 | export function indexRoute(_req: Request, res: Response) { 13 | res.type('text').send('OK'); 14 | } 15 | 16 | export function healthcheckRoute(_req: Request, res: Response) { 17 | res.type('text').send('OK'); 18 | } 19 | 20 | export function infoRoute(_req: Request, res: Response) { 21 | const { version } = findPackageJson().next().value || {}; 22 | res.json({ 23 | commit: process.env.GIT_COMMIT_REV || version, 24 | version: version, 25 | }); 26 | } 27 | 28 | function compareIssuesDates(a: Issue, b: Issue) { 29 | return (Date.parse(b.created) - Date.parse(a.created)) 30 | || (Date.parse(b.updated) - Date.parse(a.updated)); 31 | } 32 | 33 | /* GET issues listing. */ 34 | export async function issuesRoute(req: Request, res: Response): Promise { 35 | const issueTrackers = await req.db.getIssuesForPlugin(req.params.plugin); 36 | if (!issueTrackers) { 37 | res.status(404).send('No such plugin'); 38 | return; 39 | } 40 | const promises = []; 41 | for (const tracker of issueTrackers) { 42 | if (tracker.type === 'jira') { 43 | promises.push(req.db.getJiraIssues(parseInt(tracker.reference, 10))); 44 | } else if (tracker.type === 'github') { 45 | promises.push(req.db.getGithubIssues(tracker.reference)); 46 | } 47 | } 48 | const sortedIssues = await Promise.all(promises) 49 | .then((issues) => issues.flat()) 50 | .then((issues) => issues.sort(compareIssuesDates)); 51 | res.json({ issues: sortedIssues }); 52 | } 53 | 54 | /* GET releases listing. */ 55 | export async function releasesRoute(req: Request, res: Response): Promise { 56 | const pluginInfo = await req.db.getPluginInfo(req.params.plugin); 57 | if (!pluginInfo) { 58 | res.status(404).send('No such plugin'); 59 | return; 60 | } 61 | const reference = pluginInfo.scm.replace(/https?:\/\/github.com\//, '').replace(/\/+$/, '').trim(); 62 | res.json({ releases: await req.db.getGithubReleases(reference) }); 63 | } 64 | -------------------------------------------------------------------------------- /src/app.ts: -------------------------------------------------------------------------------- 1 | import express, { NextFunction, Request, Response } from 'express'; 2 | import cors from 'cors'; 3 | import helmet from 'helmet'; 4 | import logger from 'morgan'; 5 | import promMid from 'express-prom-bundle'; 6 | import asyncHandler from 'express-async-handler'; 7 | import { 8 | indexRoute, healthcheckRoute, infoRoute, issuesRoute, releasesRoute, 9 | } from './routes.js'; 10 | import { DB } from './db.js'; 11 | 12 | const app = express(); 13 | 14 | declare module 'express-serve-static-core' { 15 | interface Request { 16 | db: DB 17 | } 18 | } 19 | 20 | app.set('trust proxy', true); 21 | app.set('env', process.env.NODE_ENV || app.get('env') || 'development'); 22 | app.set('db', new DB()); 23 | 24 | app.use(function (req, _res, next) { 25 | req.db = app.get('db'); 26 | next(); 27 | }); 28 | if (app.get('env') === 'production') { 29 | app.use(logger('combined')); 30 | } else if (app.get('env') === 'test') { 31 | /* Dont log */ 32 | } else { 33 | app.use(logger('dev')); 34 | } 35 | app.use(cors()); 36 | app.use(helmet()); 37 | app.use(express.json()); 38 | 39 | app.use(promMid({ 40 | includePath: true, 41 | normalizePath: [ 42 | ['^/api/plugins/.*/open', '/api/plugins/#plugin/open'], 43 | ], 44 | })); 45 | /* anything registered after this will be included in prom middleware */ 46 | const getRoutes: string[] = []; 47 | const get = (path: string, route: (req: Request, res: Response) => void) => { 48 | app.get(path, asyncHandler(route)); 49 | getRoutes.push(path); 50 | }; 51 | get('/', indexRoute); 52 | get('/info/healthcheck', healthcheckRoute); 53 | get('/info/routes', (_, res) => { res.json({ 'get': getRoutes }); }); 54 | get('/info', infoRoute); 55 | get('/api/plugin/:plugin/issues/open', issuesRoute); 56 | get('/api/plugin/:plugin/releases', releasesRoute); 57 | 58 | app.use((err: any, _req: Request, res: Response, next: NextFunction) => { 59 | err.statusCode = err.statusCode || 500; 60 | err.status = err.status || 'error'; 61 | 62 | console.log(err); 63 | 64 | res.status(err.statusCode).json({ 65 | status: err.status, 66 | message: err.message, 67 | }); 68 | next(err); 69 | }); 70 | 71 | //app.use(errorReporter({ 72 | // links: [ 73 | // ({ message }) => { 74 | // const url = `https://stackoverflow.com/search?q=${encodeURIComponent(`[node.js] ${message}`)}`; 75 | // return `Search stackoverflow`; 76 | // }, 77 | // ], 78 | //})); 79 | 80 | export default app; 81 | -------------------------------------------------------------------------------- /src/__tests__/app.ts: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import nock from 'nock'; 3 | import request from 'supertest'; 4 | import app from '../app.js'; 5 | import { DB } from '../db.js'; 6 | import * as td from 'testdouble'; 7 | import { clear } from 'typescript-memoize'; 8 | 9 | test.beforeEach(() => { 10 | nock.disableNetConnect(); 11 | nock.enableNetConnect('127.0.0.1'); 12 | clear(['db']); 13 | }); 14 | 15 | test.before(() => { 16 | const db = td.object('DB') as DB; 17 | app.set('db', db); 18 | td.when(db.getIssuesForPlugin('configuration-as-code')).thenResolve([ 19 | { 20 | 'type': 'github', 21 | 'reference': 'jenkinsci/configuration-as-code-plugin', 22 | 'viewUrl': 'https://github.com/jenkinsci/configuration-as-code-plugin/issues', 23 | 'reportUrl': 'https://github.com/jenkinsci/configuration-as-code-plugin/issues/new/choose', 24 | }, 25 | { 26 | 'type': 'jira', 27 | 'reference': '23170', 28 | 'viewUrl': 'https://issues.jenkins.io/issues/?jql=component=23170', 29 | }, 30 | ]); 31 | td.when(db.getJiraIssues(23170)).thenResolve([]); 32 | td.when(db.getGithubIssues('jenkinsci/configuration-as-code-plugin')).thenResolve([]); 33 | }); 34 | 35 | test('app > /info > should return 200 with commit and version', async (t) => { 36 | const response = await request(app).get('/info'); 37 | t.true(typeof response.body.commit !== 'undefined'); 38 | t.true(typeof response.body.version !== 'undefined'); 39 | t.deepEqual(response.status, 200); 40 | // TODO: expect(response.header['content-type']).toMatch(/\/json/); 41 | }); 42 | 43 | test('app >/info/healthcheck > should return 200', async (t) => { 44 | const response = await request(app).get('/info/healthcheck'); 45 | t.deepEqual(response.text, 'OK'); 46 | t.deepEqual(response.status, 200); 47 | // TODO: expect(response.header['content-type']).toMatch(/text\/plain/); 48 | }); 49 | 50 | test('app > /api/plugins/:plugin/issues/open > should return 200', async (t) => { 51 | const response = await request(app).get('/api/plugin/configuration-as-code/issues/open'); 52 | t.deepEqual(response.body, { issues: [] }); 53 | t.deepEqual(response.status, 200); 54 | // TODO: expect(response.header['content-type']).toMatch(/\/json/); 55 | }); 56 | 57 | test('app > should have all the routes', async (t) => { 58 | t.deepEqual((await request(app).get('/info/routes')).body, { 59 | get: [ 60 | '/', 61 | '/info/healthcheck', 62 | '/info/routes', 63 | '/info', 64 | '/api/plugin/:plugin/issues/open', 65 | '/api/plugin/:plugin/releases', 66 | ], 67 | }); 68 | }); 69 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ master ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ master ] 20 | schedule: 21 | - cron: '18 14 * * 2' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: [ 'javascript' ] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] 37 | # Learn more about CodeQL language support at https://git.io/codeql-language-support 38 | 39 | steps: 40 | - name: Checkout repository 41 | uses: actions/checkout@v6 42 | 43 | # Initializes the CodeQL tools for scanning. 44 | - name: Initialize CodeQL 45 | uses: github/codeql-action/init@v4 46 | with: 47 | languages: ${{ matrix.language }} 48 | # If you wish to specify custom queries, you can do so here or in a config file. 49 | # By default, queries listed here will override any specified in a config file. 50 | # Prefix the list here with "+" to use these queries and those in the config file. 51 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 52 | 53 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 54 | # If this step fails, then you should remove it and run the build manually (see below) 55 | - name: Autobuild 56 | uses: github/codeql-action/autobuild@v4 57 | 58 | # ℹ️ Command-line programs to run using the OS shell. 59 | # 📚 https://git.io/JvXDl 60 | 61 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 62 | # and modify them (or add more) to build your code if your project 63 | # uses a compiled language 64 | 65 | #- run: | 66 | # make bootstrap 67 | # make release 68 | 69 | - name: Perform CodeQL Analysis 70 | uses: github/codeql-action/analyze@v4 71 | -------------------------------------------------------------------------------- /src/__mocks__/db.ts: -------------------------------------------------------------------------------- 1 | export async function getIssuesForPlugin(pluginId: string) { 2 | if (pluginId === 'configuration-as-code') { 3 | return [ 4 | { 5 | type: 'github', 6 | reference: 'jenkinsci/configuration-as-code-plugin', 7 | viewUrl: 'https://github.com/jenkinsci/configuration-as-code-plugin/issues', 8 | reportUrl: 'https://github.com/jenkinsci/configuration-as-code-plugin/issues/new/choose', 9 | }, 10 | { 11 | type: 'jira', 12 | reference: '23170', 13 | viewUrl: 'https://issues.jenkins.io/issues/?jql=component=23170', 14 | }, 15 | ]; 16 | } 17 | return null; 18 | } 19 | 20 | export async function getGithubIssues() { 21 | return [ 22 | { 23 | assignee: '', 24 | created: '2021-03-29T05:04:57Z', 25 | issueType: 'dependencies', 26 | key: '#1588', 27 | priority: '', 28 | reporter: 'dependabot[bot]', 29 | resolution: 'open', 30 | status: 'open', 31 | summary: 'Bump artifactory from 3.4.0 to 3.10.6', 32 | updated: '2021-03-29T05:05:00Z', 33 | url: 'https://github.com/jenkinsci/configuration-as-code-plugin/pull/1588', 34 | }, 35 | { 36 | assignee: '', 37 | created: '2021-03-22T05:02:03Z', 38 | issueType: 'dependencies', 39 | key: '#1585', 40 | priority: '', 41 | reporter: 'dependabot[bot]', 42 | resolution: 'open', 43 | status: 'open', 44 | summary: 'Bump aws-java-sdk from 1.11.457 to 1.11.976', 45 | updated: '2021-03-22T05:02:07Z', 46 | url: 'https://github.com/jenkinsci/configuration-as-code-plugin/pull/1585', 47 | }, 48 | ]; 49 | } 50 | 51 | export async function getJiraIssues() { 52 | return [ 53 | { 54 | created: '2021-01-19T23:32:27.000+0000', 55 | issueType: 'Bug', 56 | key: 'JENKINS-64664', 57 | priority: 'Minor', 58 | reporter: 'Kevin Carrasco', 59 | summary: 'Kubernetes plugin jCasC compatibility issue', 60 | updated: '2021-02-05T09:42:22.000+0000', 61 | url: 'https://issues.jenkins.io/browse/JENKINS-64664', 62 | }, 63 | ]; 64 | } 65 | 66 | export async function getGithubReleases() { 67 | return [ 68 | { 69 | tagName: '1381.v2c3a_12074da_b_', 70 | name: '1381.v2c3a_12074da_b_', 71 | publishedAt: '2024-10-02T13:47:33Z', 72 | htmlURL: 'https://api.github.com/repos/jenkinsci/credentials-plugin/releases/178006192', 73 | bodyHTML: '## 🔒 Security fixes\r\n\r\n* Fix [SECURITY-3373](https://www.jenkins.io/security/advisory/2024-10-02/#SECURITY-3373). This fix requires Jenkins 2.479 or newer, LTS 2.462.3 or newer, to be effective.\r\n', 74 | }, 75 | { 76 | tagName: '1384.vf0a_2ed06f9c6', 77 | name: '1384.vf0a_2ed06f9c6', 78 | publishedAt: '2024-10-06T22:15:25Z', 79 | htmlURL: 'https://api.github.com/repos/jenkinsci/credentials-plugin/releases/178008509', 80 | bodyHTML: '## 🚀 New features and improvements\n\n* Update \'Add credentials\' dropdown button (#551) @janfaracik\n\n## ✍ Other changes\n\n* Fix typo in name of internal class registering `SecretBytesRedaction` (#562) @daniel-beck\n', 81 | }, 82 | ]; 83 | } 84 | -------------------------------------------------------------------------------- /src/__tests__/db.ts: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import nock from 'nock'; 3 | import { DB, processMarkdown } from '../db.js'; 4 | import { clear } from 'typescript-memoize'; 5 | 6 | test.beforeEach(() => { 7 | nock.disableNetConnect(); 8 | clear(['db']); 9 | }); 10 | 11 | test('db > getGithubIssues > succeeds', async (t) => { 12 | nock('https://reports.jenkins.io').get('/issues.index.json') 13 | .replyWithFile(200, 'src/__mocks__/issues.index.json', { 'Content-Type': 'application/json' }); 14 | nock('https://api.github.com').get('/app/installations') 15 | .replyWithFile(200, 'src/__mocks__/github_installations.json', { 'Content-Type': 'application/json' }); 16 | nock('https://api.github.com').post('/app/installations/12345/access_tokens') 17 | .replyWithFile(200, 'src/__mocks__/github_access_tokens.json', { 'Content-Type': 'application/json' }); 18 | nock('https://api.github.com') 19 | .get('/repos/jenkinsci/configuration-as-code-plugin/issues') 20 | .query({ per_page: 100, state: 'open' }) 21 | .replyWithFile(200, 'src/__mocks__/github-configuration-as-code-issues.json', { 'Content-Type': 'application/json' }); 22 | 23 | const db = new DB(); 24 | const issues = await db.getGithubIssues('jenkinsci/configuration-as-code-plugin'); 25 | t.snapshot(issues); 26 | }); 27 | 28 | test('db > getJiraIssues > succeeds', async (t) => { 29 | nock('https://issues.jenkins.io:443').post('/rest/api/2/search', { 30 | 'fields': [ 31 | 'key', 32 | 'components', 33 | 'summary', 34 | 'assignee', 35 | 'reporter', 36 | 'priority', 37 | 'status', 38 | 'resolution', 39 | 'created', 40 | 'updated', 41 | ], 42 | 'jql': 'project=JENKINS AND status in ("Open","In Progress","Reopened") AND component=21481', 43 | 'maxResults': 1000, 44 | 'startAt': 0, 45 | }).replyWithFile(200, 'src/__mocks__/jira-configuration-as-code-issues.json', { 'Content-Type': 'application/json' }); 46 | 47 | const db = new DB(); 48 | const issues = await db.getJiraIssues(21481); 49 | t.snapshot(issues); 50 | }); 51 | 52 | test('db > getGithubReleases > succeeds', async (t) => { 53 | nock('https://api.github.com').get('/app/installations') 54 | .replyWithFile(200, 'src/__mocks__/github_installations.json', { 'Content-Type': 'application/json' }); 55 | nock('https://api.github.com').post('/app/installations/12345/access_tokens') 56 | .replyWithFile(200, 'src/__mocks__/github_access_tokens.json', { 'Content-Type': 'application/json' }); 57 | nock('https://api.github.com') 58 | .get('/repos/jenkinsci/credentials-plugin/releases') 59 | .query({ per_page: 10 }) 60 | .replyWithFile(200, 'src/__mocks__/github-credentials-releases.json', { 'Content-Type': 'application/json' }); 61 | 62 | const db = new DB(); 63 | const releases = await db.getGithubReleases('jenkinsci/credentials-plugin'); 64 | t.snapshot(releases); 65 | }); 66 | 67 | test('db > processMarkdown > succeeds', async (t) => { 68 | const markdown = ` 69 | > [!WARNING] 70 | > This is a breaking change for anyone currently configuring matrix authorization using these plugins. 71 | `; 72 | const html = await processMarkdown(markdown, 'https://github.com/foo/bar'); 73 | t.snapshot(html); 74 | }); 75 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin-site-issues", 3 | "version": "0.3.0", 4 | "private": true, 5 | "license": "MIT", 6 | "type": "module", 7 | "engines": { 8 | "node": ">= 16" 9 | }, 10 | "scripts": { 11 | "start": "node ./dist/bin/www", 12 | "build": "tsc", 13 | "lint": "npx eslint . --ext .js,.jsx,.ts,.tsx", 14 | "test": "ava --timeout=2m", 15 | "dev": "nodemon", 16 | "dev:debug": "nodemon --inspect-brk" 17 | }, 18 | "main": "./src/bin/www.ts", 19 | "dependencies": { 20 | "@octokit/auth-app": "^8.0.0", 21 | "@octokit/request": "^10.0.0", 22 | "@octokit/rest": "^22.0.0", 23 | "axios": "^1.0.0", 24 | "cors": "^2.8.5", 25 | "express": "~5.2.0", 26 | "express-async-handler": "^1.2.0", 27 | "express-prom-bundle": "^8.0.0", 28 | "find-package-json": "^1.2.0", 29 | "hast-util-sanitize": "^5.0.2", 30 | "helmet": "^8.0.0", 31 | "http-graceful-shutdown": "^3.1.7", 32 | "jira-client": "^8.1.0", 33 | "morgan": "~1.10.0", 34 | "normalize-url": "^8.0.0", 35 | "prom-client": "^15.0.0", 36 | "remark": "^15.0.0", 37 | "remark-breaks": "^4.0.0", 38 | "remark-emoji": "^5.0.0", 39 | "remark-gfm": "^4.0.0", 40 | "remark-github": "^12.0.0", 41 | "remark-github-beta-blockquote-admonitions": "^3.1.1", 42 | "remark-html": "^16.0.0", 43 | "typescript-memoize": "^1.1.0" 44 | }, 45 | "devDependencies": { 46 | "@types/cors": "^2.8.12", 47 | "@types/debug": "^4.1.7", 48 | "@types/express": "^5.0.0", 49 | "@types/find-package-json": "^1.2.2", 50 | "@types/jira-client": "^7.1.4", 51 | "@types/morgan": "^1.9.3", 52 | "@types/node": "^24.0.0", 53 | "@types/supertest": "^6.0.0", 54 | "@typescript-eslint/eslint-plugin": "^5.18.0", 55 | "@typescript-eslint/parser": "^5.18.0", 56 | "ava": "6.4.1", 57 | "eslint": "^8.13.0", 58 | "eslint-config-airbnb-base": "^15.0.0", 59 | "eslint-config-airbnb-typescript": "^17.0.0", 60 | "eslint-import-resolver-typescript": "^4.0.0", 61 | "eslint-plugin-import": "^2.26.0", 62 | "eslint-plugin-jsx-a11y": "^6.5.1", 63 | "json-parse-better-errors": "^1.0.2", 64 | "json-stable-stringify": "^1.0.1", 65 | "nock": "^14.0.0", 66 | "node-mocks-http": "^1.11.0", 67 | "nodemon": "^3.0.0", 68 | "object-hash": "^3.0.0", 69 | "sinon": "^21.0.0", 70 | "supertest": "^7.0.0", 71 | "tap-xunit": "^2.4.1", 72 | "temp-write": "^6.0.0", 73 | "testdouble": "^3.16.4", 74 | "ts-node": "^10.9.1", 75 | "typescript": "^5.0.0" 76 | }, 77 | "nodemonConfig": { 78 | "restartable": "rs", 79 | "env": { 80 | "DEBUG": "plugin-site-issues:*", 81 | "NODE_ENV": "development" 82 | }, 83 | "ignore": [ 84 | ".git", 85 | "node_modules/", 86 | "dist/", 87 | "coverage/" 88 | ], 89 | "watch": [ 90 | "./package.json", 91 | "./src" 92 | ], 93 | "ext": "js,json,ts", 94 | "execMap": { 95 | "ts": "node --loader ts-node/esm" 96 | } 97 | }, 98 | "ava": { 99 | "extensions": { 100 | "ts": "module" 101 | }, 102 | "nodeArguments": [ 103 | "--loader=ts-node/esm" 104 | ], 105 | "require": [ 106 | "./src/setupAva.ts" 107 | ] 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/__tests__/routes.ts: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import nock from 'nock'; 3 | import httpMocks from 'node-mocks-http'; 4 | import { 5 | indexRoute, 6 | healthcheckRoute, 7 | infoRoute, 8 | issuesRoute, 9 | } from '../routes.js'; 10 | import { DB } from '../db.js'; 11 | import { clear } from 'typescript-memoize'; 12 | 13 | test.beforeEach(() => { 14 | nock.disableNetConnect(); 15 | clear(['db']); 16 | }); 17 | 18 | test('routes > infoRoute > should return 200 with commit and version', async (t) => { 19 | const req = httpMocks.createRequest(); 20 | req.db = new DB(); 21 | const res = httpMocks.createResponse(); 22 | 23 | infoRoute(req, res); 24 | 25 | const data = res._getJSONData(); 26 | t.is(200, res.statusCode); 27 | 28 | t.true(res._isEndCalled()); 29 | t.true(res._isJSON()); 30 | t.true(res._isUTF8()); 31 | 32 | t.truthy(data.commit); 33 | t.truthy(data.version); 34 | }); 35 | 36 | test('routes > healthcheckRoute > should return 200', async (t) => { 37 | const req = httpMocks.createRequest(); 38 | req.db = new DB(); 39 | const res = httpMocks.createResponse(); 40 | 41 | healthcheckRoute(req, res); 42 | 43 | t.is('OK', res._getData()); 44 | t.is('text/plain', res.getHeader('Content-Type') as string); 45 | }); 46 | 47 | test('routes > indexRoute > should return 200', async (t) => { 48 | const req = httpMocks.createRequest(); 49 | req.db = new DB(); 50 | const res = httpMocks.createResponse(); 51 | 52 | indexRoute(req, res); 53 | 54 | t.is('OK', res._getData()); 55 | t.is('text/plain', res.getHeader('Content-Type') as string); 56 | }); 57 | 58 | test('routes > issuesRoute > should return 200', async (t) => { 59 | nock('https://reports.jenkins.io').get('/issues.index.json') 60 | .replyWithFile(200, 'src/__mocks__/issues.index.json', { 'Content-Type': 'application/json' }); 61 | nock('https://api.github.com').get('/app/installations') 62 | .replyWithFile(200, 'src/__mocks__/github_installations.json', { 'Content-Type': 'application/json' }); 63 | nock('https://api.github.com').post('/app/installations/12345/access_tokens') 64 | .replyWithFile(200, 'src/__mocks__/github_access_tokens.json', { 'Content-Type': 'application/json' }); 65 | nock('https://api.github.com') 66 | .get('/repos/jenkinsci/configuration-as-code-plugin/issues') 67 | .query({ per_page: 100, state: 'open' }) 68 | .replyWithFile(200, 'src/__mocks__/github-configuration-as-code-issues.json', { 'Content-Type': 'application/json' }); 69 | nock('https://issues.jenkins.io:443').post('/rest/api/2/search', { 70 | 'fields': [ 71 | 'key', 72 | 'components', 73 | 'summary', 74 | 'assignee', 75 | 'reporter', 76 | 'priority', 77 | 'status', 78 | 'resolution', 79 | 'created', 80 | 'updated', 81 | ], 82 | 'jql': 'project=JENKINS AND status in ("Open","In Progress","Reopened") AND component=23170', 83 | 'maxResults': 1000, 84 | 'startAt': 0, 85 | }).replyWithFile(200, 'src/__mocks__/jira-configuration-as-code-issues.json', { 'Content-Type': 'application/json' }); 86 | 87 | const req = httpMocks.createRequest({ params: { plugin: 'configuration-as-code' } }); 88 | req.db = new DB(); 89 | const res = httpMocks.createResponse(); 90 | 91 | await issuesRoute(req, res); 92 | 93 | t.is(200, res.statusCode); 94 | t.true(res._isJSON()); 95 | t.true(res._isUTF8()); 96 | t.snapshot(res._getJSONData()); 97 | }); 98 | 99 | test('routes > issuesRoute > should return 404 on missing plugin', async (t) => { 100 | nock('https://reports.jenkins.io').get('/issues.index.json') 101 | .replyWithFile(200, 'src/__mocks__/issues.index.json', { 'Content-Type': 'application/json' }); 102 | 103 | const req = httpMocks.createRequest({ params: { plugin: '---missing-plugin' } }); 104 | req.db = new DB(); 105 | const res = httpMocks.createResponse(); 106 | 107 | await issuesRoute(req, res); 108 | 109 | t.is(404, res.statusCode); 110 | }); 111 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | /* Basic Options */ 5 | "incremental": true, /* Enable incremental compilation */ 6 | // https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping 7 | "lib": [ 8 | "ES2021" 9 | ], 10 | "module": "es2022", 11 | "target": "ES2021", 12 | "resolveJsonModule": false, 13 | // "lib": [], /* Specify library files to be included in the compilation. */ 14 | "allowJs": true, /* Allow javascript files to be compiled. */ 15 | // "checkJs": true, /* Report errors in .js files. */ 16 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ 17 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 18 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 19 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 20 | // "outFile": "./", /* Concatenate and emit output to single file. */ 21 | "outDir": "./dist", /* Redirect output structure to the directory. */ 22 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 23 | // "composite": true, /* Enable project compilation */ 24 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 25 | // "removeComments": true, /* Do not emit comments to output. */ 26 | // "noEmit": true, /* Do not emit outputs. */ 27 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 28 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 29 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 30 | /* Strict Type-Checking Options */ 31 | "strict": true, /* Enable all strict type-checking options. */ 32 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 33 | // "strictNullChecks": true, /* Enable strict null checks. */ 34 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 35 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ 36 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 37 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 38 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 39 | /* Additional Checks */ 40 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 41 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 42 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 43 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 44 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 45 | // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ 46 | /* Module Resolution Options */ 47 | "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 48 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 49 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 50 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 51 | // "typeRoots": [], /* List of folders to include type definitions from. */ 52 | // "types": [], /* Type declaration files to be included in compilation. */ 53 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 54 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 55 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 56 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 57 | /* Source Map Options */ 58 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 59 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 60 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 61 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 62 | /* Experimental Options */ 63 | "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 64 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 65 | /* Advanced Options */ 66 | "skipLibCheck": true, /* Skip type checking of declaration files. */ 67 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/db.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import { Octokit } from '@octokit/rest'; 3 | import { createAppAuth } from '@octokit/auth-app'; 4 | import { request as githubRequest } from '@octokit/request'; 5 | import { defaultSchema } from 'hast-util-sanitize'; 6 | import JiraApi from 'jira-client'; 7 | import normalizeUrl from 'normalize-url'; 8 | import { remark } from 'remark'; 9 | import remarkHtml from 'remark-html'; 10 | import remarkBreaks from 'remark-breaks'; 11 | import remarkGfm from 'remark-gfm'; 12 | import remarkAdmonitions from 'remark-github-beta-blockquote-admonitions'; 13 | import remarkEmoji from 'remark-emoji'; 14 | import remarkGithub from 'remark-github'; 15 | import { Memoize } from 'typescript-memoize'; 16 | 17 | import config from './config.js'; 18 | 19 | const DEFAULT_TIMEOUT = 60 * 60 * 1000; 20 | 21 | function quoteStr(str: string) { 22 | return `"${str.replace('"', '\\"')}"`; 23 | } 24 | 25 | export type Issue = { 26 | readonly key: string; 27 | readonly issueTypes: string[]; 28 | readonly priority: string; 29 | readonly status: string; 30 | readonly resolution: string; 31 | readonly summary: string; 32 | readonly assignee: string; 33 | readonly reporter: string; 34 | readonly created: string; 35 | readonly updated: string; 36 | readonly url: string; 37 | }; 38 | 39 | type IssueIndex = { 40 | readonly type: string; 41 | readonly reference: string; 42 | readonly viewUrl?: string; 43 | readonly reportUrl?: string; 44 | }; 45 | 46 | export type Release = { 47 | readonly tagName: string; 48 | readonly name: string; 49 | readonly publishedAt: string; 50 | readonly htmlURL: string; 51 | readonly bodyHTML: string; 52 | }; 53 | 54 | type Dependency = { 55 | readonly name: string; 56 | readonly optional: boolean; 57 | readonly version: number; 58 | }; 59 | 60 | type Developer = { 61 | readonly name: string; 62 | readonly optional: boolean; 63 | readonly version: string; 64 | }; 65 | 66 | export type PluginInfo = { 67 | readonly buildDate: string; 68 | readonly defaultBranch: string; 69 | readonly dependencies: Array; 70 | readonly developers: Array; 71 | readonly excerpt: string; 72 | readonly gav: string; 73 | readonly issueTrackers: Array; 74 | readonly labels: Array; 75 | readonly minimumJavaVersion: string; 76 | readonly name: string; 77 | readonly popularity: number; 78 | readonly previousTimestamp: Date; 79 | readonly previousVersion: number; 80 | readonly releaseTimestamp: Date; 81 | readonly requiredCore: string; 82 | readonly scm: string; 83 | readonly sha1: string; 84 | readonly sha256: string; 85 | readonly size: number; 86 | readonly title: string; 87 | readonly url: string; 88 | readonly version: string; 89 | readonly wiki: string; 90 | }; 91 | 92 | export interface IDB { 93 | getJiraIssues(component: number | string, startAt: number, statuses: Array): Promise; 94 | getGithubIssues(reference: string): Promise; 95 | } 96 | 97 | export function processMarkdown(content: string, baseUrl: string) { 98 | const schema = Object.assign(defaultSchema, { }); 99 | if (schema.attributes) { 100 | schema.attributes['*']?.push('className'); 101 | } 102 | 103 | const admonitionConfig = { 104 | classNameMaps: { 105 | block: (title: string) => `admonition admonition-${title.toLowerCase()}`, 106 | title: (title: string) => `admonition-title admonition-title-${title.toLowerCase()}`, 107 | }, 108 | }; 109 | return remark() 110 | .use(remarkEmoji) 111 | .use(remarkGfm) 112 | .use(remarkBreaks) 113 | .use(remarkAdmonitions, admonitionConfig) 114 | .use(remarkGithub, { 115 | repository: baseUrl, 116 | }) 117 | .use(remarkHtml, { sanitize: schema }) 118 | .process(content.replaceAll(//g, '').trim()) 119 | .then(r => r.toString().trim()); 120 | } 121 | 122 | export class DB implements IDB { 123 | @Memoize({ tags: ['db'], expiring: DEFAULT_TIMEOUT }) 124 | async getIssuesForPlugin(pluginName: string) : Promise | null> { 125 | const pluginIssuesIndex = await axios.get('https://reports.jenkins.io/issues.index.json') 126 | .then((response) => response.data || {}); 127 | if (pluginIssuesIndex && Object.prototype.hasOwnProperty.call(pluginIssuesIndex, pluginName)) { 128 | return pluginIssuesIndex[pluginName]; 129 | } 130 | return null; 131 | } 132 | 133 | 134 | @Memoize({ tags: ['db'], expiring: DEFAULT_TIMEOUT }) 135 | async getPluginInfo(pluginName: string): Promise { 136 | const updateJson = await axios.get('https://updates.jenkins.io/current/update-center.actual.json') 137 | .then((response) => response?.data?.plugins || {}); 138 | if (updateJson && Object.prototype.hasOwnProperty.call(updateJson, pluginName)) { 139 | return updateJson[pluginName]; 140 | } 141 | return null; 142 | } 143 | 144 | @Memoize({ 145 | tags: ['db'], 146 | expiring: DEFAULT_TIMEOUT, 147 | hashFunction: (component, startAt, statues) => JSON.stringify([component, startAt, statues]), 148 | }) 149 | async getJiraIssues(component: number | string, startAt = 0, statuses = ['Open', 'In Progress', 'Reopened']): Promise { 150 | const maxResults = 1000; 151 | 152 | const parsedUrl = new URL(config.jira.url); 153 | const jira = new JiraApi({ 154 | protocol: parsedUrl.protocol, 155 | host: parsedUrl.host, 156 | port: parsedUrl.port, 157 | base: parsedUrl.pathname.replace(/^\/+/g, ''), 158 | }); 159 | 160 | const response = await jira.searchJira( 161 | `project=JENKINS AND status in (${statuses.map(quoteStr).join(',')}) AND component=${component}`, { 162 | startAt, 163 | maxResults, 164 | fields: ['key', 'components', 'summary', 'assignee', 'reporter', 'priority', 'status', 'resolution', 'created', 'updated'], 165 | }, 166 | ); 167 | 168 | const issues = response.issues.map((issue: any) => ({ 169 | key: issue.key, 170 | issueTypes: [issue?.fields?.issuetype?.name], 171 | priority: issue?.fields?.priority?.name, 172 | status: issue?.fields?.status?.status, 173 | resolution: issue?.fields?.resolution?.name, 174 | summary: issue?.fields?.summary, 175 | assignee: issue?.fields?.assignee?.displayName, 176 | reporter: issue?.fields?.reporter?.displayName, 177 | created: issue?.fields?.created, 178 | updated: issue?.fields?.updated, 179 | url: `${config.jira.url.replace(/\/+$/, '')}/browse/${issue.key}`, 180 | })); 181 | if (response.startAt + response.issues.length < response.total) { 182 | issues.push(...await this.getJiraIssues(component, startAt + maxResults, statuses)); 183 | } 184 | return issues; 185 | } 186 | 187 | private async getRestClient() { 188 | const { data: installations } = await createAppAuth({ 189 | appId: config.github.appId, 190 | privateKey: config.github.privateKey, 191 | }).hook(githubRequest.defaults({ 192 | baseUrl: config.github.server, 193 | }), 'GET /app/installations'); 194 | 195 | return new Octokit({ 196 | baseUrl: config.github.server, 197 | authStrategy: createAppAuth, 198 | auth: { 199 | appId: config.github.appId, 200 | privateKey: config.github.privateKey, 201 | installationId: installations[0].id, 202 | }, 203 | }); 204 | } 205 | 206 | @Memoize({ tags: ['db'], expiring: DEFAULT_TIMEOUT }) 207 | async getGithubIssues(reference: string): Promise { 208 | const [owner, repo] = reference.split('/'); 209 | 210 | const octokit = await this.getRestClient(); 211 | const iterator = octokit.paginate.iterator(octokit.rest.issues.listForRepo, { 212 | per_page: 100, 213 | owner, 214 | repo, 215 | state: 'open', 216 | }); 217 | 218 | const returnedIssues: Array = []; 219 | for await (const { data: issues } of iterator) { 220 | for (const issue of issues) { 221 | let labels: string[] = []; 222 | if (issue.labels && Array.isArray(issue.labels) && issue.labels.length > 0) { 223 | labels = issue.labels.map((n: any) => { 224 | if (typeof n === 'string') { 225 | return n; 226 | } 227 | 228 | return n.name || ''; 229 | }); 230 | } 231 | returnedIssues.push({ 232 | key: `#${issue.number}`, 233 | issueTypes: labels, 234 | priority: '', 235 | resolution: issue.state, 236 | status: issue.state, 237 | summary: issue.title, 238 | assignee: issue.assignees?.map((n: any) => n?.login || '').join(', ') || '', 239 | reporter: issue.user?.login || '', 240 | created: issue.created_at, 241 | updated: issue.updated_at, 242 | url: issue.html_url, 243 | }); 244 | } 245 | } 246 | return returnedIssues; 247 | } 248 | 249 | @Memoize({ tags: ['db'], expiring: DEFAULT_TIMEOUT }) 250 | async getGithubReleases(reference: string): Promise { 251 | const [owner, repo] = reference.split('/'); 252 | 253 | const octokit = await this.getRestClient(); 254 | const releases = await octokit.rest.repos.listReleases({ 255 | per_page: 10, 256 | owner, 257 | repo, 258 | }); 259 | 260 | if (!releases) {return null;} 261 | 262 | const ret: Array = []; 263 | for (const release of releases.data) { 264 | 265 | const baseUrl = normalizeUrl(release.html_url + '/../../../issues'); 266 | ret.push({ 267 | tagName: release.tag_name, 268 | name: release.name || release.tag_name, 269 | publishedAt: release.published_at || (new Date().getTime()).toString(), 270 | htmlURL: release.html_url, 271 | bodyHTML: await processMarkdown(release.body || '', baseUrl), 272 | }); 273 | } 274 | 275 | return ret; 276 | } 277 | } 278 | -------------------------------------------------------------------------------- /src/__mocks__/github-configuration-as-code-issues.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1821", 4 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 5 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1821/labels{/name}", 6 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1821/comments", 7 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1821/events", 8 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1821", 9 | "id": 1089446485, 10 | "node_id": "PR_kwDOBmsEgc4wUHIX", 11 | "number": 1821, 12 | "title": "Bump plugin from 4.29 to 4.32", 13 | "user": { 14 | "login": "dependabot[bot]", 15 | "id": 49699333, 16 | "node_id": "MDM6Qm90NDk2OTkzMzM=", 17 | "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", 18 | "gravatar_id": "", 19 | "url": "https://api.github.com/users/dependabot%5Bbot%5D", 20 | "html_url": "https://github.com/apps/dependabot", 21 | "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", 22 | "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", 23 | "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", 24 | "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", 25 | "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", 26 | "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", 27 | "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", 28 | "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", 29 | "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", 30 | "type": "Bot", 31 | "site_admin": false 32 | }, 33 | "labels": [ 34 | { 35 | "id": 1517270860, 36 | "node_id": "MDU6TGFiZWwxNTE3MjcwODYw", 37 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/dependencies", 38 | "name": "dependencies", 39 | "color": "0366d6", 40 | "default": false, 41 | "description": "A PR that updates dependencies - used by Release Drafter" 42 | } 43 | ], 44 | "state": "open", 45 | "locked": false, 46 | "assignee": null, 47 | "assignees": [], 48 | "milestone": null, 49 | "comments": 0, 50 | "created_at": "2021-12-27T20:03:32Z", 51 | "updated_at": "2021-12-27T20:03:36Z", 52 | "closed_at": null, 53 | "author_association": "CONTRIBUTOR", 54 | "active_lock_reason": null, 55 | "draft": false, 56 | "pull_request": { 57 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/pulls/1821", 58 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1821", 59 | "diff_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1821.diff", 60 | "patch_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1821.patch", 61 | "merged_at": null 62 | }, 63 | "body": "Bumps [plugin](https://github.com/jenkinsci/plugin-pom) from 4.29 to 4.32.n
nRelease notesn

", 64 | "reactions": { 65 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1821/reactions", 66 | "total_count": 0, 67 | "+1": 0, 68 | "-1": 0, 69 | "laugh": 0, 70 | "hooray": 0, 71 | "confused": 0, 72 | "heart": 0, 73 | "rocket": 0, 74 | "eyes": 0 75 | }, 76 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1821/timeline", 77 | "performed_via_github_app": null 78 | }, 79 | { 80 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1820", 81 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 82 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1820/labels{/name}", 83 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1820/comments", 84 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1820/events", 85 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1820", 86 | "id": 1085758274, 87 | "node_id": "PR_kwDOBmsEgc4wIQfO", 88 | "number": 1820, 89 | "title": "Bump gitlab-plugin from 1.5.20 to 1.5.25", 90 | "user": { 91 | "login": "dependabot[bot]", 92 | "id": 49699333, 93 | "node_id": "MDM6Qm90NDk2OTkzMzM=", 94 | "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", 95 | "gravatar_id": "", 96 | "url": "https://api.github.com/users/dependabot%5Bbot%5D", 97 | "html_url": "https://github.com/apps/dependabot", 98 | "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", 99 | "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", 100 | "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", 101 | "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", 102 | "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", 103 | "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", 104 | "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", 105 | "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", 106 | "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", 107 | "type": "Bot", 108 | "site_admin": false 109 | }, 110 | "labels": [ 111 | { 112 | "id": 1517270860, 113 | "node_id": "MDU6TGFiZWwxNTE3MjcwODYw", 114 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/dependencies", 115 | "name": "dependencies", 116 | "color": "0366d6", 117 | "default": false, 118 | "description": "A PR that updates dependencies - used by Release Drafter" 119 | } 120 | ], 121 | "state": "open", 122 | "locked": false, 123 | "assignee": null, 124 | "assignees": [], 125 | "milestone": null, 126 | "comments": 0, 127 | "created_at": "2021-12-21T12:00:16Z", 128 | "updated_at": "2021-12-21T12:00:22Z", 129 | "closed_at": null, 130 | "author_association": "CONTRIBUTOR", 131 | "active_lock_reason": null, 132 | "draft": false, 133 | "pull_request": { 134 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/pulls/1820", 135 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1820", 136 | "diff_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1820.diff", 137 | "patch_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1820.patch", 138 | "merged_at": null 139 | }, 140 | "body": "Bumps [gitlab-plugin](https://github.com/jenkinsci/gitlab-plugin) from 1.5.20 to 1.5.25.n
nRelease notesn

Sourced from ng any edits that have been made to itn- `@dependabot merge` will merge this PR after your CI passes on itn- `@dependabot squash and merge` will squash and merge this PR after your CI passes on itn- `@dependabot cancel merge` will cancel a previously requested merge and block automergingn- `@dependabot reopen` will reopen this PR if it is closedn- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manuallyn- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)nnn

", 141 | "reactions": { 142 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1820/reactions", 143 | "total_count": 0, 144 | "+1": 0, 145 | "-1": 0, 146 | "laugh": 0, 147 | "hooray": 0, 148 | "confused": 0, 149 | "heart": 0, 150 | "rocket": 0, 151 | "eyes": 0 152 | }, 153 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1820/timeline", 154 | "performed_via_github_app": null 155 | }, 156 | { 157 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1819", 158 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 159 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1819/labels{/name}", 160 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1819/comments", 161 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1819/events", 162 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1819", 163 | "id": 1085758245, 164 | "node_id": "PR_kwDOBmsEgc4wIQez", 165 | "number": 1819, 166 | "title": "Bump jackson.version from 2.12.4 to 2.13.1", 167 | "user": { 168 | "login": "dependabot[bot]", 169 | "id": 49699333, 170 | "node_id": "MDM6Qm90NDk2OTkzMzM=", 171 | "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", 172 | "gravatar_id": "", 173 | "url": "https://api.github.com/users/dependabot%5Bbot%5D", 174 | "html_url": "https://github.com/apps/dependabot", 175 | "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", 176 | "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", 177 | "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", 178 | "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", 179 | "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", 180 | "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", 181 | "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", 182 | "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", 183 | "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", 184 | "type": "Bot", 185 | "site_admin": false 186 | }, 187 | "labels": [ 188 | { 189 | "id": 1517270860, 190 | "node_id": "MDU6TGFiZWwxNTE3MjcwODYw", 191 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/dependencies", 192 | "name": "dependencies", 193 | "color": "0366d6", 194 | "default": false, 195 | "description": "A PR that updates dependencies - used by Release Drafter" 196 | } 197 | ], 198 | "state": "open", 199 | "locked": false, 200 | "assignee": null, 201 | "assignees": [], 202 | "milestone": null, 203 | "comments": 0, 204 | "created_at": "2021-12-21T12:00:15Z", 205 | "updated_at": "2021-12-21T12:00:19Z", 206 | "closed_at": null, 207 | "author_association": "CONTRIBUTOR", 208 | "active_lock_reason": null, 209 | "draft": false, 210 | "pull_request": { 211 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/pulls/1819", 212 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1819", 213 | "diff_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1819.diff", 214 | "patch_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1819.patch", 215 | "merged_at": null 216 | }, 217 | "body": "Bumps `jackson.version` from 2.12.4 to 2.13.1.nUpdates `jackson-core` from 2.12.4 to 2.13.1n
nCommitsn
    n
  • squash and merge this PR after your CI passes on itn- `@dependabot cancel merge` will cancel a previously requested merge and block automergingn- `@dependabot reopen` will reopen this PR if it is closedn- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manuallyn- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)nnn
", 218 | "reactions": { 219 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1819/reactions", 220 | "total_count": 0, 221 | "+1": 0, 222 | "-1": 0, 223 | "laugh": 0, 224 | "hooray": 0, 225 | "confused": 0, 226 | "heart": 0, 227 | "rocket": 0, 228 | "eyes": 0 229 | }, 230 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1819/timeline", 231 | "performed_via_github_app": null 232 | }, 233 | { 234 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1818", 235 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 236 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1818/labels{/name}", 237 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1818/comments", 238 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1818/events", 239 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1818", 240 | "id": 1085757886, 241 | "node_id": "PR_kwDOBmsEgc4wIQZy", 242 | "number": 1818, 243 | "title": "Bump artifact-manager-s3 from 1.16 to 1.18", 244 | "user": { 245 | "login": "dependabot[bot]", 246 | "id": 49699333, 247 | "node_id": "MDM6Qm90NDk2OTkzMzM=", 248 | "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", 249 | "gravatar_id": "", 250 | "url": "https://api.github.com/users/dependabot%5Bbot%5D", 251 | "html_url": "https://github.com/apps/dependabot", 252 | "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", 253 | "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", 254 | "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", 255 | "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", 256 | "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", 257 | "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", 258 | "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", 259 | "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", 260 | "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", 261 | "type": "Bot", 262 | "site_admin": false 263 | }, 264 | "labels": [ 265 | { 266 | "id": 1517270860, 267 | "node_id": "MDU6TGFiZWwxNTE3MjcwODYw", 268 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/dependencies", 269 | "name": "dependencies", 270 | "color": "0366d6", 271 | "default": false, 272 | "description": "A PR that updates dependencies - used by Release Drafter" 273 | } 274 | ], 275 | "state": "open", 276 | "locked": false, 277 | "assignee": null, 278 | "assignees": [], 279 | "milestone": null, 280 | "comments": 0, 281 | "created_at": "2021-12-21T11:59:48Z", 282 | "updated_at": "2021-12-21T11:59:49Z", 283 | "closed_at": null, 284 | "author_association": "CONTRIBUTOR", 285 | "active_lock_reason": null, 286 | "draft": false, 287 | "pull_request": { 288 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/pulls/1818", 289 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1818", 290 | "diff_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1818.diff", 291 | "patch_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1818.patch", 292 | "merged_at": null 293 | }, 294 | "body": "Bumps [artifact-manager-s3](https://github.com/jenkinsci/artifact-manager-s3-plugin) from 1.16 to 1.18.n
nRelease notesn

Sourced from `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manuallyn- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)nnn

", 295 | "reactions": { 296 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1818/reactions", 297 | "total_count": 0, 298 | "+1": 0, 299 | "-1": 0, 300 | "laugh": 0, 301 | "hooray": 0, 302 | "confused": 0, 303 | "heart": 0, 304 | "rocket": 0, 305 | "eyes": 0 306 | }, 307 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1818/timeline", 308 | "performed_via_github_app": null 309 | }, 310 | { 311 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1817", 312 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 313 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1817/labels{/name}", 314 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1817/comments", 315 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1817/events", 316 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1817", 317 | "id": 1085156779, 318 | "node_id": "PR_kwDOBmsEgc4wGSJA", 319 | "number": 1817, 320 | "title": "Bump kubernetes from 1.30.4 to 1.31.1", 321 | "user": { 322 | "login": "dependabot[bot]", 323 | "id": 49699333, 324 | "node_id": "MDM6Qm90NDk2OTkzMzM=", 325 | "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", 326 | "gravatar_id": "", 327 | "url": "https://api.github.com/users/dependabot%5Bbot%5D", 328 | "html_url": "https://github.com/apps/dependabot", 329 | "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", 330 | "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", 331 | "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", 332 | "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", 333 | "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", 334 | "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", 335 | "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", 336 | "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", 337 | "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", 338 | "type": "Bot", 339 | "site_admin": false 340 | }, 341 | "labels": [ 342 | { 343 | "id": 1517270860, 344 | "node_id": "MDU6TGFiZWwxNTE3MjcwODYw", 345 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/dependencies", 346 | "name": "dependencies", 347 | "color": "0366d6", 348 | "default": false, 349 | "description": "A PR that updates dependencies - used by Release Drafter" 350 | } 351 | ], 352 | "state": "open", 353 | "locked": false, 354 | "assignee": null, 355 | "assignees": [], 356 | "milestone": null, 357 | "comments": 0, 358 | "created_at": "2021-12-20T20:04:12Z", 359 | "updated_at": "2021-12-20T20:04:16Z", 360 | "closed_at": null, 361 | "author_association": "CONTRIBUTOR", 362 | "active_lock_reason": null, 363 | "draft": false, 364 | "pull_request": { 365 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/pulls/1817", 366 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1817", 367 | "diff_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1817.diff", 368 | "patch_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1817.patch", 369 | "merged_at": null 370 | }, 371 | "body": "Bumps [kubernetes](https://github.com/jenkinsci/kubernetes-plugin) from 1.30.4 to 1.31.1.n
nRelease notesn

Sourced from erge this PR after your CI passes on itn- `@dependabot cancel merge` will cancel a previously requested merge and block automergingn- `@dependabot reopen` will reopen this PR if it is closedn- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manuallyn- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)nnn

", 372 | "reactions": { 373 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1817/reactions", 374 | "total_count": 0, 375 | "+1": 0, 376 | "-1": 0, 377 | "laugh": 0, 378 | "hooray": 0, 379 | "confused": 0, 380 | "heart": 0, 381 | "rocket": 0, 382 | "eyes": 0 383 | }, 384 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1817/timeline", 385 | "performed_via_github_app": null 386 | }, 387 | { 388 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1811", 389 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 390 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1811/labels{/name}", 391 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1811/comments", 392 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1811/events", 393 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1811", 394 | "id": 1078945946, 395 | "node_id": "PR_kwDOBmsEgc4vx_R8", 396 | "number": 1811, 397 | "title": "Bump docker-plugin from 1.2.2 to 1.2.6", 398 | "user": { 399 | "login": "dependabot[bot]", 400 | "id": 49699333, 401 | "node_id": "MDM6Qm90NDk2OTkzMzM=", 402 | "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", 403 | "gravatar_id": "", 404 | "url": "https://api.github.com/users/dependabot%5Bbot%5D", 405 | "html_url": "https://github.com/apps/dependabot", 406 | "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", 407 | "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", 408 | "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", 409 | "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", 410 | "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", 411 | "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", 412 | "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", 413 | "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", 414 | "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", 415 | "type": "Bot", 416 | "site_admin": false 417 | }, 418 | "labels": [ 419 | { 420 | "id": 1517270860, 421 | "node_id": "MDU6TGFiZWwxNTE3MjcwODYw", 422 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/dependencies", 423 | "name": "dependencies", 424 | "color": "0366d6", 425 | "default": false, 426 | "description": "A PR that updates dependencies - used by Release Drafter" 427 | } 428 | ], 429 | "state": "open", 430 | "locked": false, 431 | "assignee": null, 432 | "assignees": [], 433 | "milestone": null, 434 | "comments": 0, 435 | "created_at": "2021-12-13T20:03:37Z", 436 | "updated_at": "2021-12-13T20:03:40Z", 437 | "closed_at": null, 438 | "author_association": "CONTRIBUTOR", 439 | "active_lock_reason": null, 440 | "draft": false, 441 | "pull_request": { 442 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/pulls/1811", 443 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1811", 444 | "diff_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1811.diff", 445 | "patch_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1811.patch", 446 | "merged_at": null 447 | }, 448 | "body": "Bumps [docker-plugin](https://github.com/jenkinsci/docker-plugin) from 1.2.2 to 1.2.6.n
nChangelogn

Sourced from close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manuallyn- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)nnn

", 449 | "reactions": { 450 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1811/reactions", 451 | "total_count": 0, 452 | "+1": 0, 453 | "-1": 0, 454 | "laugh": 0, 455 | "hooray": 0, 456 | "confused": 0, 457 | "heart": 0, 458 | "rocket": 0, 459 | "eyes": 0 460 | }, 461 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1811/timeline", 462 | "performed_via_github_app": null 463 | }, 464 | { 465 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1807", 466 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 467 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1807/labels{/name}", 468 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1807/comments", 469 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1807/events", 470 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1807", 471 | "id": 1076531266, 472 | "node_id": "PR_kwDOBmsEgc4vqaOp", 473 | "number": 1807, 474 | "title": "Bump email-ext from 2.69 to 2.86", 475 | "user": { 476 | "login": "dependabot[bot]", 477 | "id": 49699333, 478 | "node_id": "MDM6Qm90NDk2OTkzMzM=", 479 | "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", 480 | "gravatar_id": "", 481 | "url": "https://api.github.com/users/dependabot%5Bbot%5D", 482 | "html_url": "https://github.com/apps/dependabot", 483 | "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", 484 | "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", 485 | "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", 486 | "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", 487 | "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", 488 | "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", 489 | "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", 490 | "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", 491 | "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", 492 | "type": "Bot", 493 | "site_admin": false 494 | }, 495 | "labels": [ 496 | { 497 | "id": 1517270860, 498 | "node_id": "MDU6TGFiZWwxNTE3MjcwODYw", 499 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/dependencies", 500 | "name": "dependencies", 501 | "color": "0366d6", 502 | "default": false, 503 | "description": "A PR that updates dependencies - used by Release Drafter" 504 | } 505 | ], 506 | "state": "open", 507 | "locked": false, 508 | "assignee": null, 509 | "assignees": [], 510 | "milestone": null, 511 | "comments": 0, 512 | "created_at": "2021-12-10T07:36:45Z", 513 | "updated_at": "2021-12-10T07:36:50Z", 514 | "closed_at": null, 515 | "author_association": "CONTRIBUTOR", 516 | "active_lock_reason": null, 517 | "draft": false, 518 | "pull_request": { 519 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/pulls/1807", 520 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1807", 521 | "diff_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1807.diff", 522 | "patch_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1807.patch", 523 | "merged_at": null 524 | }, 525 | "body": "Bumps [email-ext](https://github.com/jenkinsci/email-ext-plugin) from 2.69 to 2.86.n
nRelease notesn

Sourced from `@dependabot reopen` will reopen this PR if it is closedn- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manuallyn- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)nnn

", 526 | "reactions": { 527 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1807/reactions", 528 | "total_count": 0, 529 | "+1": 0, 530 | "-1": 0, 531 | "laugh": 0, 532 | "hooray": 0, 533 | "confused": 0, 534 | "heart": 0, 535 | "rocket": 0, 536 | "eyes": 0 537 | }, 538 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1807/timeline", 539 | "performed_via_github_app": null 540 | }, 541 | { 542 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1803", 543 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 544 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1803/labels{/name}", 545 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1803/comments", 546 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1803/events", 547 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1803", 548 | "id": 1068906186, 549 | "node_id": "PR_kwDOBmsEgc4vRmiS", 550 | "number": 1803, 551 | "title": "Bump declarative-pipeline.version from 1.9.1 to 1.9.3", 552 | "user": { 553 | "login": "dependabot[bot]", 554 | "id": 49699333, 555 | "node_id": "MDM6Qm90NDk2OTkzMzM=", 556 | "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", 557 | "gravatar_id": "", 558 | "url": "https://api.github.com/users/dependabot%5Bbot%5D", 559 | "html_url": "https://github.com/apps/dependabot", 560 | "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", 561 | "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", 562 | "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", 563 | "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", 564 | "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", 565 | "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", 566 | "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", 567 | "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", 568 | "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", 569 | "type": "Bot", 570 | "site_admin": false 571 | }, 572 | "labels": [ 573 | { 574 | "id": 1517270860, 575 | "node_id": "MDU6TGFiZWwxNTE3MjcwODYw", 576 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/dependencies", 577 | "name": "dependencies", 578 | "color": "0366d6", 579 | "default": false, 580 | "description": "A PR that updates dependencies - used by Release Drafter" 581 | } 582 | ], 583 | "state": "open", 584 | "locked": false, 585 | "assignee": null, 586 | "assignees": [], 587 | "milestone": null, 588 | "comments": 0, 589 | "created_at": "2021-12-01T21:54:59Z", 590 | "updated_at": "2021-12-01T21:55:03Z", 591 | "closed_at": null, 592 | "author_association": "CONTRIBUTOR", 593 | "active_lock_reason": null, 594 | "draft": false, 595 | "pull_request": { 596 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/pulls/1803", 597 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1803", 598 | "diff_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1803.diff", 599 | "patch_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1803.patch", 600 | "merged_at": null 601 | }, 602 | "body": "Bumps `declarative-pipeline.version` from 1.9.1 to 1.9.3.nUpdates `pipeline-model-extensions` from 1.9.1 to 1.9.3n
nRelease notesn

Sourced from passes on itn- `@dependabot cancel merge` will cancel a previously requested merge and block automergingn- `@dependabot reopen` will reopen this PR if it is closedn- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manuallyn- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)nnn

", 603 | "reactions": { 604 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1803/reactions", 605 | "total_count": 0, 606 | "+1": 0, 607 | "-1": 0, 608 | "laugh": 0, 609 | "hooray": 0, 610 | "confused": 0, 611 | "heart": 0, 612 | "rocket": 0, 613 | "eyes": 0 614 | }, 615 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1803/timeline", 616 | "performed_via_github_app": null 617 | }, 618 | { 619 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1795", 620 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 621 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1795/labels{/name}", 622 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1795/comments", 623 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1795/events", 624 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1795", 625 | "id": 1060543614, 626 | "node_id": "PR_kwDOBmsEgc4u3zDN", 627 | "number": 1795, 628 | "title": "Bump maven-plugin-api from 3.8.1 to 3.8.4", 629 | "user": { 630 | "login": "dependabot[bot]", 631 | "id": 49699333, 632 | "node_id": "MDM6Qm90NDk2OTkzMzM=", 633 | "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", 634 | "gravatar_id": "", 635 | "url": "https://api.github.com/users/dependabot%5Bbot%5D", 636 | "html_url": "https://github.com/apps/dependabot", 637 | "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", 638 | "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", 639 | "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", 640 | "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", 641 | "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", 642 | "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", 643 | "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", 644 | "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", 645 | "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", 646 | "type": "Bot", 647 | "site_admin": false 648 | }, 649 | "labels": [ 650 | { 651 | "id": 1517270860, 652 | "node_id": "MDU6TGFiZWwxNTE3MjcwODYw", 653 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/dependencies", 654 | "name": "dependencies", 655 | "color": "0366d6", 656 | "default": false, 657 | "description": "A PR that updates dependencies - used by Release Drafter" 658 | } 659 | ], 660 | "state": "open", 661 | "locked": false, 662 | "assignee": null, 663 | "assignees": [], 664 | "milestone": null, 665 | "comments": 0, 666 | "created_at": "2021-11-22T20:03:52Z", 667 | "updated_at": "2021-11-22T20:03:56Z", 668 | "closed_at": null, 669 | "author_association": "CONTRIBUTOR", 670 | "active_lock_reason": null, 671 | "draft": false, 672 | "pull_request": { 673 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/pulls/1795", 674 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1795", 675 | "diff_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1795.diff", 676 | "patch_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1795.patch", 677 | "merged_at": null 678 | }, 679 | "body": "Bumps [maven-plugin-api](https://github.com/apache/maven) from 3.8.1 to 3.8.4.n
nCommitsn
    n
  • merge` will squash and merge this PR after your CI passes on itn- `@dependabot cancel merge` will cancel a previously requested merge and block automergingn- `@dependabot reopen` will reopen this PR if it is closedn- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manuallyn- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)nnn
", 680 | "reactions": { 681 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1795/reactions", 682 | "total_count": 0, 683 | "+1": 0, 684 | "-1": 0, 685 | "laugh": 0, 686 | "hooray": 0, 687 | "confused": 0, 688 | "heart": 0, 689 | "rocket": 0, 690 | "eyes": 0 691 | }, 692 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1795/timeline", 693 | "performed_via_github_app": null 694 | }, 695 | { 696 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1793", 697 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 698 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1793/labels{/name}", 699 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1793/comments", 700 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1793/events", 701 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/issues/1793", 702 | "id": 1058289086, 703 | "node_id": "I_kwDOBmsEgc4_FDW-", 704 | "number": 1793, 705 | "title": "Add ability to mark nodes as offline/disconnected.", 706 | "user": { 707 | "login": "timbrown5", 708 | "id": 4447764, 709 | "node_id": "MDQ6VXNlcjQ0NDc3NjQ=", 710 | "avatar_url": "https://avatars.githubusercontent.com/u/4447764?v=4", 711 | "gravatar_id": "", 712 | "url": "https://api.github.com/users/timbrown5", 713 | "html_url": "https://github.com/timbrown5", 714 | "followers_url": "https://api.github.com/users/timbrown5/followers", 715 | "following_url": "https://api.github.com/users/timbrown5/following{/other_user}", 716 | "gists_url": "https://api.github.com/users/timbrown5/gists{/gist_id}", 717 | "starred_url": "https://api.github.com/users/timbrown5/starred{/owner}{/repo}", 718 | "subscriptions_url": "https://api.github.com/users/timbrown5/subscriptions", 719 | "organizations_url": "https://api.github.com/users/timbrown5/orgs", 720 | "repos_url": "https://api.github.com/users/timbrown5/repos", 721 | "events_url": "https://api.github.com/users/timbrown5/events{/privacy}", 722 | "received_events_url": "https://api.github.com/users/timbrown5/received_events", 723 | "type": "User", 724 | "site_admin": false 725 | }, 726 | "labels": [ 727 | { 728 | "id": 1286814097, 729 | "node_id": "MDU6TGFiZWwxMjg2ODE0MDk3", 730 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/feature", 731 | "name": "feature", 732 | "color": "1d00ff", 733 | "default": false, 734 | "description": "A PR that adds a feature - used by Release Drafter" 735 | } 736 | ], 737 | "state": "open", 738 | "locked": false, 739 | "assignee": null, 740 | "assignees": [], 741 | "milestone": null, 742 | "comments": 0, 743 | "created_at": "2021-11-19T08:51:35Z", 744 | "updated_at": "2021-11-19T08:54:35Z", 745 | "closed_at": null, 746 | "author_association": "NONE", 747 | "active_lock_reason": null, 748 | "body": "In our infrastructure we share a Jenkins config between local, dev and production environments. When we add a node we generally want it to only run in production (but we might want to connect to another environement for development and testing).rnrnIt would be nice if we could have a flag in JCasC to signify if a node should be marked as disconnected on Jenkins start-up. This would prevent a lot of needless SSH connection attempts (we set invalid credentials at to avoid multiple Jenkins instances running jobs at once).rnrnA more general usecase would be if a node is broken, or needs investigation, it would be nice to store this state in JCasC code, rather than relying on people disconnecting through the UI (and Jenkins not reinitiating connection).", 749 | "reactions": { 750 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1793/reactions", 751 | "total_count": 1, 752 | "+1": 1, 753 | "-1": 0, 754 | "laugh": 0, 755 | "hooray": 0, 756 | "confused": 0, 757 | "heart": 0, 758 | "rocket": 0, 759 | "eyes": 0 760 | }, 761 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1793/timeline", 762 | "performed_via_github_app": null 763 | }, 764 | { 765 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1792", 766 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 767 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1792/labels{/name}", 768 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1792/comments", 769 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1792/events", 770 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/issues/1792", 771 | "id": 1057628745, 772 | "node_id": "I_kwDOBmsEgc4_CiJJ", 773 | "number": 1792, 774 | "title": "Include plugin own settings into the downloaded yaml", 775 | "user": { 776 | "login": "proski", 777 | "id": 1317472, 778 | "node_id": "MDQ6VXNlcjEzMTc0NzI=", 779 | "avatar_url": "https://avatars.githubusercontent.com/u/1317472?v=4", 780 | "gravatar_id": "", 781 | "url": "https://api.github.com/users/proski", 782 | "html_url": "https://github.com/proski", 783 | "followers_url": "https://api.github.com/users/proski/followers", 784 | "following_url": "https://api.github.com/users/proski/following{/other_user}", 785 | "gists_url": "https://api.github.com/users/proski/gists{/gist_id}", 786 | "starred_url": "https://api.github.com/users/proski/starred{/owner}{/repo}", 787 | "subscriptions_url": "https://api.github.com/users/proski/subscriptions", 788 | "organizations_url": "https://api.github.com/users/proski/orgs", 789 | "repos_url": "https://api.github.com/users/proski/repos", 790 | "events_url": "https://api.github.com/users/proski/events{/privacy}", 791 | "received_events_url": "https://api.github.com/users/proski/received_events", 792 | "type": "User", 793 | "site_admin": false 794 | }, 795 | "labels": [ 796 | { 797 | "id": 1286814097, 798 | "node_id": "MDU6TGFiZWwxMjg2ODE0MDk3", 799 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/feature", 800 | "name": "feature", 801 | "color": "1d00ff", 802 | "default": false, 803 | "description": "A PR that adds a feature - used by Release Drafter" 804 | } 805 | ], 806 | "state": "open", 807 | "locked": false, 808 | "assignee": null, 809 | "assignees": [], 810 | "milestone": null, 811 | "comments": 0, 812 | "created_at": "2021-11-18T17:43:05Z", 813 | "updated_at": "2021-11-18T17:43:05Z", 814 | "closed_at": null, 815 | "author_association": "NONE", 816 | "active_lock_reason": null, 817 | "body": "### Your checklist for this issuernings.", 818 | "reactions": { 819 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1792/reactions", 820 | "total_count": 0, 821 | "+1": 0, 822 | "-1": 0, 823 | "laugh": 0, 824 | "hooray": 0, 825 | "confused": 0, 826 | "heart": 0, 827 | "rocket": 0, 828 | "eyes": 0 829 | }, 830 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1792/timeline", 831 | "performed_via_github_app": null 832 | }, 833 | { 834 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1787", 835 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 836 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1787/labels{/name}", 837 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1787/comments", 838 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1787/events", 839 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1787", 840 | "id": 1052417580, 841 | "node_id": "PR_kwDOBmsEgc4uecKu", 842 | "number": 1787, 843 | "title": "Bump azure-keyvault from 123.v1aba71c2d365 to 131.v867845ef6ae9", 844 | "user": { 845 | "login": "dependabot[bot]", 846 | "id": 49699333, 847 | "node_id": "MDM6Qm90NDk2OTkzMzM=", 848 | "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", 849 | "gravatar_id": "", 850 | "url": "https://api.github.com/users/dependabot%5Bbot%5D", 851 | "html_url": "https://github.com/apps/dependabot", 852 | "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", 853 | "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", 854 | "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", 855 | "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", 856 | "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", 857 | "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", 858 | "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", 859 | "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", 860 | "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", 861 | "type": "Bot", 862 | "site_admin": false 863 | }, 864 | "labels": [ 865 | { 866 | "id": 1517270860, 867 | "node_id": "MDU6TGFiZWwxNTE3MjcwODYw", 868 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/dependencies", 869 | "name": "dependencies", 870 | "color": "0366d6", 871 | "default": false, 872 | "description": "A PR that updates dependencies - used by Release Drafter" 873 | } 874 | ], 875 | "state": "open", 876 | "locked": false, 877 | "assignee": null, 878 | "assignees": [], 879 | "milestone": null, 880 | "comments": 0, 881 | "created_at": "2021-11-12T21:23:04Z", 882 | "updated_at": "2021-11-12T21:23:05Z", 883 | "closed_at": null, 884 | "author_association": "CONTRIBUTOR", 885 | "active_lock_reason": null, 886 | "draft": false, 887 | "pull_request": { 888 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/pulls/1787", 889 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1787", 890 | "diff_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1787.diff", 891 | "patch_url": "https://github.com/jenkinsci/configuration-as-code-plugin/pull/1787.patch", 892 | "merged_at": null 893 | }, 894 | "body": "Bumps [azure-keyvault](https://github.com/jenkinsci/azure-keyvault-plugin) from 123.v1aba71c2d365 to 131.v867845ef6ae9.n
nRelease notesn

Sourced from nnn

", 895 | "reactions": { 896 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1787/reactions", 897 | "total_count": 0, 898 | "+1": 0, 899 | "-1": 0, 900 | "laugh": 0, 901 | "hooray": 0, 902 | "confused": 0, 903 | "heart": 0, 904 | "rocket": 0, 905 | "eyes": 0 906 | }, 907 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1787/timeline", 908 | "performed_via_github_app": null 909 | }, 910 | { 911 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1784", 912 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 913 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1784/labels{/name}", 914 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1784/comments", 915 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1784/events", 916 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/issues/1784", 917 | "id": 1050681249, 918 | "node_id": "I_kwDOBmsEgc4-oB-h", 919 | "number": 1784, 920 | "title": "Add ability to configure log levels for plugins.", 921 | "user": { 922 | "login": "timbrown5", 923 | "id": 4447764, 924 | "node_id": "MDQ6VXNlcjQ0NDc3NjQ=", 925 | "avatar_url": "https://avatars.githubusercontent.com/u/4447764?v=4", 926 | "gravatar_id": "", 927 | "url": "https://api.github.com/users/timbrown5", 928 | "html_url": "https://github.com/timbrown5", 929 | "followers_url": "https://api.github.com/users/timbrown5/followers", 930 | "following_url": "https://api.github.com/users/timbrown5/following{/other_user}", 931 | "gists_url": "https://api.github.com/users/timbrown5/gists{/gist_id}", 932 | "starred_url": "https://api.github.com/users/timbrown5/starred{/owner}{/repo}", 933 | "subscriptions_url": "https://api.github.com/users/timbrown5/subscriptions", 934 | "organizations_url": "https://api.github.com/users/timbrown5/orgs", 935 | "repos_url": "https://api.github.com/users/timbrown5/repos", 936 | "events_url": "https://api.github.com/users/timbrown5/events{/privacy}", 937 | "received_events_url": "https://api.github.com/users/timbrown5/received_events", 938 | "type": "User", 939 | "site_admin": false 940 | }, 941 | "labels": [ 942 | { 943 | "id": 1286814097, 944 | "node_id": "MDU6TGFiZWwxMjg2ODE0MDk3", 945 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/feature", 946 | "name": "feature", 947 | "color": "1d00ff", 948 | "default": false, 949 | "description": "A PR that adds a feature - used by Release Drafter" 950 | } 951 | ], 952 | "state": "open", 953 | "locked": false, 954 | "assignee": null, 955 | "assignees": [], 956 | "milestone": null, 957 | "comments": 3, 958 | "created_at": "2021-11-11T08:03:13Z", 959 | "updated_at": "2021-11-14T10:05:12Z", 960 | "closed_at": null, 961 | "author_association": "NONE", 962 | "active_lock_reason": null, 963 | "body": "### Your checklist for this issuernrn🚨 Please review the [guidelines for contributing](../blob/master/docs/CONTRIBUTING.md) to this repository.rnrn- [x] Link to any upstream changes that might be required (for example Jenkins Core pull request)rnrnrnrn### Feature RequestrnrnI have looked (and tried to implement) https://support.cloudbees.com/hc/en-us/articles/115002626172-Configure-Loggers-for-Jenkins?page=42 and couldn't get it to work. I also think adding this to JCasC would offer a better experience:rnrnWe run Jenkins as a container and the above means we need to rebuild (or at least restart) the container if we make a change. Adding this to JCasC would mean we only need to reload the config.", 964 | "reactions": { 965 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1784/reactions", 966 | "total_count": 0, 967 | "+1": 0, 968 | "-1": 0, 969 | "laugh": 0, 970 | "hooray": 0, 971 | "confused": 0, 972 | "heart": 0, 973 | "rocket": 0, 974 | "eyes": 0 975 | }, 976 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1784/timeline", 977 | "performed_via_github_app": null 978 | }, 979 | { 980 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1782", 981 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 982 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1782/labels{/name}", 983 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1782/comments", 984 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1782/events", 985 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/issues/1782", 986 | "id": 1040944841, 987 | "node_id": "I_kwDOBmsEgc4-C47J", 988 | "number": 1782, 989 | "title": "getting 401 error while invoking jcasc reload api after config changes", 990 | "user": { 991 | "login": "rg13567", 992 | "id": 91693790, 993 | "node_id": "U_kgDOBXci3g", 994 | "avatar_url": "https://avatars.githubusercontent.com/u/91693790?v=4", 995 | "gravatar_id": "", 996 | "url": "https://api.github.com/users/rg13567", 997 | "html_url": "https://github.com/rg13567", 998 | "followers_url": "https://api.github.com/users/rg13567/followers", 999 | "following_url": "https://api.github.com/users/rg13567/following{/other_user}", 1000 | "gists_url": "https://api.github.com/users/rg13567/gists{/gist_id}", 1001 | "starred_url": "https://api.github.com/users/rg13567/starred{/owner}{/repo}", 1002 | "subscriptions_url": "https://api.github.com/users/rg13567/subscriptions", 1003 | "organizations_url": "https://api.github.com/users/rg13567/orgs", 1004 | "repos_url": "https://api.github.com/users/rg13567/repos", 1005 | "events_url": "https://api.github.com/users/rg13567/events{/privacy}", 1006 | "received_events_url": "https://api.github.com/users/rg13567/received_events", 1007 | "type": "User", 1008 | "site_admin": false 1009 | }, 1010 | "labels": [ 1011 | { 1012 | "id": 834893439, 1013 | "node_id": "MDU6TGFiZWw4MzQ4OTM0Mzk=", 1014 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/question", 1015 | "name": "question", 1016 | "color": "D876E3", 1017 | "default": true, 1018 | "description": null 1019 | } 1020 | ], 1021 | "state": "open", 1022 | "locked": false, 1023 | "assignee": null, 1024 | "assignees": [], 1025 | "milestone": null, 1026 | "comments": 1, 1027 | "created_at": "2021-11-01T09:11:24Z", 1028 | "updated_at": "2021-11-01T09:34:29Z", 1029 | "closed_at": null, 1030 | "author_association": "NONE", 1031 | "active_lock_reason": null, 1032 | "body": "I am invoking below rest after changing my jenkins.yml and placing it to path as per CASC_JENKINS_CONFIGrnAlso I have set -Dcasc.reload.token as system property in javaOpts in deployment yamlrnI am using the token generated from user->configure->Add new Tokenrnrntried to reload changed config with below two commands but it is giving 401 errorrncurl -v -X POST http://localhost:8080/reload-configuration-as-code/?casc-reload-token=API Token rncurl -v -X POST http://localhost:8080/reload-configuration-as-code/?casc-reload-token=API Token --user user:API TokenrnrnrnError 401 Unauthorizedrnrn

HTTP ERROR 401 Unauthorized

rnrnrnrnrnrn
URI:/reload-configuration-as-code/
STATUS:401
MESSAGE:Unauthorized
SERVLET:Stapler
", 1033 | "reactions": { 1034 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1782/reactions", 1035 | "total_count": 0, 1036 | "+1": 0, 1037 | "-1": 0, 1038 | "laugh": 0, 1039 | "hooray": 0, 1040 | "confused": 0, 1041 | "heart": 0, 1042 | "rocket": 0, 1043 | "eyes": 0 1044 | }, 1045 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1782/timeline", 1046 | "performed_via_github_app": null 1047 | }, 1048 | { 1049 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1781", 1050 | "repository_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin", 1051 | "labels_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1781/labels{/name}", 1052 | "comments_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1781/comments", 1053 | "events_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1781/events", 1054 | "html_url": "https://github.com/jenkinsci/configuration-as-code-plugin/issues/1781", 1055 | "id": 1039495325, 1056 | "node_id": "I_kwDOBmsEgc499XCd", 1057 | "number": 1781, 1058 | "title": "casc reload token to invoke jCasc reload", 1059 | "user": { 1060 | "login": "rg13567", 1061 | "id": 91693790, 1062 | "node_id": "U_kgDOBXci3g", 1063 | "avatar_url": "https://avatars.githubusercontent.com/u/91693790?v=4", 1064 | "gravatar_id": "", 1065 | "url": "https://api.github.com/users/rg13567", 1066 | "html_url": "https://github.com/rg13567", 1067 | "followers_url": "https://api.github.com/users/rg13567/followers", 1068 | "following_url": "https://api.github.com/users/rg13567/following{/other_user}", 1069 | "gists_url": "https://api.github.com/users/rg13567/gists{/gist_id}", 1070 | "starred_url": "https://api.github.com/users/rg13567/starred{/owner}{/repo}", 1071 | "subscriptions_url": "https://api.github.com/users/rg13567/subscriptions", 1072 | "organizations_url": "https://api.github.com/users/rg13567/orgs", 1073 | "repos_url": "https://api.github.com/users/rg13567/repos", 1074 | "events_url": "https://api.github.com/users/rg13567/events{/privacy}", 1075 | "received_events_url": "https://api.github.com/users/rg13567/received_events", 1076 | "type": "User", 1077 | "site_admin": false 1078 | }, 1079 | "labels": [ 1080 | { 1081 | "id": 834893439, 1082 | "node_id": "MDU6TGFiZWw4MzQ4OTM0Mzk=", 1083 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/labels/question", 1084 | "name": "question", 1085 | "color": "D876E3", 1086 | "default": true, 1087 | "description": null 1088 | } 1089 | ], 1090 | "state": "open", 1091 | "locked": false, 1092 | "assignee": null, 1093 | "assignees": [], 1094 | "milestone": null, 1095 | "comments": 0, 1096 | "created_at": "2021-10-29T12:05:32Z", 1097 | "updated_at": "2021-11-01T05:28:44Z", 1098 | "closed_at": null, 1099 | "author_association": "NONE", 1100 | "active_lock_reason": null, 1101 | "body": null, 1102 | "reactions": { 1103 | "url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1781/reactions", 1104 | "total_count": 0, 1105 | "+1": 0, 1106 | "-1": 0, 1107 | "laugh": 0, 1108 | "hooray": 0, 1109 | "confused": 0, 1110 | "heart": 0, 1111 | "rocket": 0, 1112 | "eyes": 0 1113 | }, 1114 | "timeline_url": "https://api.github.com/repos/jenkinsci/configuration-as-code-plugin/issues/1781/timeline", 1115 | "performed_via_github_app": null 1116 | } 1117 | ] -------------------------------------------------------------------------------- /src/__mocks__/github-credentials-releases.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/179465709", 4 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/179465709/assets", 5 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/179465709/assets{?name,label}", 6 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1389.vd7a_b_f5fa_50a_2", 7 | "id": 179465709, 8 | "author": { 9 | "login": "github-actions[bot]", 10 | "id": 41898282, 11 | "node_id": "MDM6Qm90NDE4OTgyODI=", 12 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 13 | "gravatar_id": "", 14 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 15 | "html_url": "https://github.com/apps/github-actions", 16 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 17 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 18 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 19 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 20 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 21 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 22 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 23 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 24 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 25 | "type": "Bot", 26 | "site_admin": false 27 | }, 28 | "node_id": "RE_kwDOADXYQM4Ksm3t", 29 | "tag_name": "1389.vd7a_b_f5fa_50a_2", 30 | "target_commitish": "refs/heads/master", 31 | "name": "1389.vd7a_b_f5fa_50a_2", 32 | "draft": false, 33 | "prerelease": false, 34 | "created_at": "2024-10-11T07:18:17Z", 35 | "published_at": "2024-10-11T07:32:47Z", 36 | "assets": [], 37 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1389.vd7a_b_f5fa_50a_2", 38 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1389.vd7a_b_f5fa_50a_2", 39 | "body": "\n## 🐛 Bug fixes\n\n* Adding credentials should not require a check on CredentialsStore#isDomainsModifiable (#557) @Dohbedoh\n\n## 👻 Maintenance\n\n* Require Java 17 or newer; migrate to EE 9 (#566) @basil\n", 40 | "mentions_count": 2 41 | }, 42 | { 43 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/178008509", 44 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/178008509/assets", 45 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/178008509/assets{?name,label}", 46 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1384.vf0a_2ed06f9c6", 47 | "id": 178008509, 48 | "author": { 49 | "login": "github-actions[bot]", 50 | "id": 41898282, 51 | "node_id": "MDM6Qm90NDE4OTgyODI=", 52 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 53 | "gravatar_id": "", 54 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 55 | "html_url": "https://github.com/apps/github-actions", 56 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 57 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 58 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 59 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 60 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 61 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 62 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 63 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 64 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 65 | "type": "Bot", 66 | "site_admin": false 67 | }, 68 | "node_id": "RE_kwDOADXYQM4KnDG9", 69 | "tag_name": "1384.vf0a_2ed06f9c6", 70 | "target_commitish": "refs/heads/master", 71 | "name": "1384.vf0a_2ed06f9c6", 72 | "draft": false, 73 | "prerelease": false, 74 | "created_at": "2024-10-06T21:58:42Z", 75 | "published_at": "2024-10-06T22:15:25Z", 76 | "assets": [], 77 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1384.vf0a_2ed06f9c6", 78 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1384.vf0a_2ed06f9c6", 79 | "body": "\n## 🚀 New features and improvements\n\n* Update 'Add credentials' dropdown button (#551) @janfaracik\n\n## ✍ Other changes\n\n* Fix typo in name of internal class registering `SecretBytesRedaction` (#562) @daniel-beck\n", 80 | "mentions_count": 2 81 | }, 82 | { 83 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/178006192", 84 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/178006192/assets", 85 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/178006192/assets{?name,label}", 86 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1381.v2c3a_12074da_b_", 87 | "id": 178006192, 88 | "author": { 89 | "login": "daniel-beck", 90 | "id": 1831569, 91 | "node_id": "MDQ6VXNlcjE4MzE1Njk=", 92 | "avatar_url": "https://avatars.githubusercontent.com/u/1831569?v=4", 93 | "gravatar_id": "", 94 | "url": "https://api.github.com/users/daniel-beck", 95 | "html_url": "https://github.com/daniel-beck", 96 | "followers_url": "https://api.github.com/users/daniel-beck/followers", 97 | "following_url": "https://api.github.com/users/daniel-beck/following{/other_user}", 98 | "gists_url": "https://api.github.com/users/daniel-beck/gists{/gist_id}", 99 | "starred_url": "https://api.github.com/users/daniel-beck/starred{/owner}{/repo}", 100 | "subscriptions_url": "https://api.github.com/users/daniel-beck/subscriptions", 101 | "organizations_url": "https://api.github.com/users/daniel-beck/orgs", 102 | "repos_url": "https://api.github.com/users/daniel-beck/repos", 103 | "events_url": "https://api.github.com/users/daniel-beck/events{/privacy}", 104 | "received_events_url": "https://api.github.com/users/daniel-beck/received_events", 105 | "type": "User", 106 | "site_admin": false 107 | }, 108 | "node_id": "RE_kwDOADXYQM4KnCiw", 109 | "tag_name": "1381.v2c3a_12074da_b_", 110 | "target_commitish": "master", 111 | "name": "", 112 | "draft": false, 113 | "prerelease": false, 114 | "created_at": "2024-10-02T08:56:25Z", 115 | "published_at": "2024-10-02T13:47:33Z", 116 | "assets": [], 117 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1381.v2c3a_12074da_b_", 118 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1381.v2c3a_12074da_b_", 119 | "body": "\r\n## 🔒 Security fixes\r\n\r\n* Fix [SECURITY-3373](https://www.jenkins.io/security/advisory/2024-10-02/#SECURITY-3373). This fix requires Jenkins 2.479 or newer, LTS 2.462.3 or newer, to be effective.\r\n" 120 | }, 121 | { 122 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/177893595", 123 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/177893595/assets", 124 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/177893595/assets{?name,label}", 125 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1380.va_435002fa_924", 126 | "id": 177893595, 127 | "author": { 128 | "login": "github-actions[bot]", 129 | "id": 41898282, 130 | "node_id": "MDM6Qm90NDE4OTgyODI=", 131 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 132 | "gravatar_id": "", 133 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 134 | "html_url": "https://github.com/apps/github-actions", 135 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 136 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 137 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 138 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 139 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 140 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 141 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 142 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 143 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 144 | "type": "Bot", 145 | "site_admin": false 146 | }, 147 | "node_id": "RE_kwDOADXYQM4KmnDb", 148 | "tag_name": "1380.va_435002fa_924", 149 | "target_commitish": "refs/heads/master", 150 | "name": "1380.va_435002fa_924", 151 | "draft": false, 152 | "prerelease": false, 153 | "created_at": "2024-10-01T22:18:40Z", 154 | "published_at": "2024-10-01T22:32:08Z", 155 | "assets": [], 156 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1380.va_435002fa_924", 157 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1380.va_435002fa_924", 158 | "body": "\n## 🚀 New features and improvements\n\n* CSP compatibility improvements (#533) @zbynek\n\n## 📦 Dependency updates\n\n* Bump org.jenkins-ci.plugins:plugin from 4.87 to 4.88 (#560) @dependabot\n", 159 | "mentions_count": 2 160 | }, 161 | { 162 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/178006195", 163 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/178006195/assets", 164 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/178006195/assets{?name,label}", 165 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1371.1373.v4eb_fa_b_7161e9", 166 | "id": 178006195, 167 | "author": { 168 | "login": "daniel-beck", 169 | "id": 1831569, 170 | "node_id": "MDQ6VXNlcjE4MzE1Njk=", 171 | "avatar_url": "https://avatars.githubusercontent.com/u/1831569?v=4", 172 | "gravatar_id": "", 173 | "url": "https://api.github.com/users/daniel-beck", 174 | "html_url": "https://github.com/daniel-beck", 175 | "followers_url": "https://api.github.com/users/daniel-beck/followers", 176 | "following_url": "https://api.github.com/users/daniel-beck/following{/other_user}", 177 | "gists_url": "https://api.github.com/users/daniel-beck/gists{/gist_id}", 178 | "starred_url": "https://api.github.com/users/daniel-beck/starred{/owner}{/repo}", 179 | "subscriptions_url": "https://api.github.com/users/daniel-beck/subscriptions", 180 | "organizations_url": "https://api.github.com/users/daniel-beck/orgs", 181 | "repos_url": "https://api.github.com/users/daniel-beck/repos", 182 | "events_url": "https://api.github.com/users/daniel-beck/events{/privacy}", 183 | "received_events_url": "https://api.github.com/users/daniel-beck/received_events", 184 | "type": "User", 185 | "site_admin": false 186 | }, 187 | "node_id": "RE_kwDOADXYQM4KnCiz", 188 | "tag_name": "1371.1373.v4eb_fa_b_7161e9", 189 | "target_commitish": "master", 190 | "name": "", 191 | "draft": false, 192 | "prerelease": false, 193 | "created_at": "2024-09-23T13:59:06Z", 194 | "published_at": "2024-10-02T13:47:34Z", 195 | "assets": [], 196 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1371.1373.v4eb_fa_b_7161e9", 197 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1371.1373.v4eb_fa_b_7161e9", 198 | "body": "\r\n## 🔒 Security fixes\r\n\r\n* Fix [SECURITY-3373](https://www.jenkins.io/security/advisory/2024-10-02/#SECURITY-3373). This fix requires Jenkins 2.479 or newer, LTS 2.462.3 or newer, to be effective. Backport of 1381.v2c3a_12074da_b_ on top of 1371.vfee6b_095f0a_3." 199 | }, 200 | { 201 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/168771492", 202 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/168771492/assets", 203 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/168771492/assets{?name,label}", 204 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1378.v81ef4269d764", 205 | "id": 168771492, 206 | "author": { 207 | "login": "github-actions[bot]", 208 | "id": 41898282, 209 | "node_id": "MDM6Qm90NDE4OTgyODI=", 210 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 211 | "gravatar_id": "", 212 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 213 | "html_url": "https://github.com/apps/github-actions", 214 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 215 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 216 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 217 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 218 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 219 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 220 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 221 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 222 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 223 | "type": "Bot", 224 | "site_admin": false 225 | }, 226 | "node_id": "RE_kwDOADXYQM4KDz-k", 227 | "tag_name": "1378.v81ef4269d764", 228 | "target_commitish": "refs/heads/master", 229 | "name": "1378.v81ef4269d764", 230 | "draft": false, 231 | "prerelease": false, 232 | "created_at": "2024-09-17T08:55:27Z", 233 | "published_at": "2024-09-17T09:11:14Z", 234 | "assets": [], 235 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1378.v81ef4269d764", 236 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1378.v81ef4269d764", 237 | "body": "\n## 💥 Breaking changes\n\n* In FIPS environment password must be at least 14 characters (#558) @olamy\n\n## 🐛 Bug fixes\n\n* In FIPS environment password must be at least 14 characters (#558) @olamy\n\n## ✍ Other changes\n\n* Remove hard-coded java-version in Security Scan (#555) @strangelookingnerd\n* Enable Jenkins Security Scan (#538) @strangelookingnerd\n\n## 📦 Dependency updates\n\n* Bump org.jenkins-ci.plugins:bouncycastle-api from 2.30.1.78.1-246.ve1089fe22055 to 2.30.1.78.1-248.ve27176eb_46cb_ (#548) @dependabot\n* Bump org.antlr:antlr4-maven-plugin from 4.13.1 to 4.13.2 (#554) @dependabot\n* Bump io.jenkins.tools.bom:bom-2.426.x from 2961.v1f472390972e to 3208.vb_21177d4b_cd9 (#552) @dependabot\n* Bump org.jenkins-ci.plugins:plugin from 4.85 to 4.87 (#556) @dependabot\n", 238 | "mentions_count": 3 239 | }, 240 | { 241 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/165211362", 242 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/165211362/assets", 243 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/165211362/assets{?name,label}", 244 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1371.vfee6b_095f0a_3", 245 | "id": 165211362, 246 | "author": { 247 | "login": "github-actions[bot]", 248 | "id": 41898282, 249 | "node_id": "MDM6Qm90NDE4OTgyODI=", 250 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 251 | "gravatar_id": "", 252 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 253 | "html_url": "https://github.com/apps/github-actions", 254 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 255 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 256 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 257 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 258 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 259 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 260 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 261 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 262 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 263 | "type": "Bot", 264 | "site_admin": false 265 | }, 266 | "node_id": "RE_kwDOADXYQM4J2Ozi", 267 | "tag_name": "1371.vfee6b_095f0a_3", 268 | "target_commitish": "refs/heads/master", 269 | "name": "1371.vfee6b_095f0a_3", 270 | "draft": false, 271 | "prerelease": false, 272 | "created_at": "2024-07-12T15:07:36Z", 273 | "published_at": "2024-07-12T15:20:29Z", 274 | "assets": [], 275 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1371.vfee6b_095f0a_3", 276 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1371.vfee6b_095f0a_3", 277 | "body": "\n## 🚀 New features and improvements\n\n* [JENKINS-73335](https://issues.jenkins.io/browse/JENKINS-73335) - add support for PEM encoded certificate (and key) (#543) @jtnord\n", 278 | "mentions_count": 1 279 | }, 280 | { 281 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/163791139", 282 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/163791139/assets", 283 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/163791139/assets{?name,label}", 284 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1361.v56f5ca_35d21c", 285 | "id": 163791139, 286 | "author": { 287 | "login": "github-actions[bot]", 288 | "id": 41898282, 289 | "node_id": "MDM6Qm90NDE4OTgyODI=", 290 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 291 | "gravatar_id": "", 292 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 293 | "html_url": "https://github.com/apps/github-actions", 294 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 295 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 296 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 297 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 298 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 299 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 300 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 301 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 302 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 303 | "type": "Bot", 304 | "site_admin": false 305 | }, 306 | "node_id": "RE_kwDOADXYQM4Jw0Ej", 307 | "tag_name": "1361.v56f5ca_35d21c", 308 | "target_commitish": "refs/heads/master", 309 | "name": "1361.v56f5ca_35d21c", 310 | "draft": false, 311 | "prerelease": false, 312 | "created_at": "2024-07-05T15:59:58Z", 313 | "published_at": "2024-07-05T16:14:46Z", 314 | "assets": [], 315 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1361.v56f5ca_35d21c", 316 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1361.v56f5ca_35d21c", 317 | "body": "\n## 🚀 New features and improvements\n\n* [JENKINS-73334](https://issues.jenkins.io/browse/JENKINS-73334) - make plugin FIPS-140 compliant by blocking PKCS#12 certificates when in FIPS mode (#539) @jtnord\n\n## 📦 Dependency updates\n\n* Bump org.jenkins-ci.plugins:plugin from 4.84 to 4.85 (#546) @dependabot\n", 318 | "mentions_count": 2 319 | }, 320 | { 321 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/163532731", 322 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/163532731/assets", 323 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/163532731/assets{?name,label}", 324 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1355.v46f52a_b_98d64", 325 | "id": 163532731, 326 | "author": { 327 | "login": "github-actions[bot]", 328 | "id": 41898282, 329 | "node_id": "MDM6Qm90NDE4OTgyODI=", 330 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 331 | "gravatar_id": "", 332 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 333 | "html_url": "https://github.com/apps/github-actions", 334 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 335 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 336 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 337 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 338 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 339 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 340 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 341 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 342 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 343 | "type": "Bot", 344 | "site_admin": false 345 | }, 346 | "node_id": "RE_kwDOADXYQM4Jv0-7", 347 | "tag_name": "1355.v46f52a_b_98d64", 348 | "target_commitish": "refs/heads/master", 349 | "name": "1355.v46f52a_b_98d64", 350 | "draft": false, 351 | "prerelease": false, 352 | "created_at": "2024-07-02T10:23:18Z", 353 | "published_at": "2024-07-02T10:34:51Z", 354 | "assets": [], 355 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1355.v46f52a_b_98d64", 356 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1355.v46f52a_b_98d64", 357 | "body": "\n## 🚨 Removed\n\n* Remove FileOnMasterKeyStroreSource and [SECURITY-1322](https://jenkins.io/security/advisories/) - migration (#540) @jtnord\n\n## 👻 Maintenance\n\n* Remove FileOnMasterKeyStroreSource and [SECURITY-1322](https://jenkins.io/security/advisories/) - migration (#540) @jtnord\n\n## 📦 Dependency updates\n\n* Bump org.jenkins-ci.plugins:plugin from 4.83 to 4.84 (#545) @dependabot\n", 358 | "mentions_count": 2 359 | }, 360 | { 361 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/144635380", 362 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/144635380/assets", 363 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/144635380/assets{?name,label}", 364 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1350.v1b_df4d227d1b_", 365 | "id": 144635380, 366 | "author": { 367 | "login": "github-actions[bot]", 368 | "id": 41898282, 369 | "node_id": "MDM6Qm90NDE4OTgyODI=", 370 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 371 | "gravatar_id": "", 372 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 373 | "html_url": "https://github.com/apps/github-actions", 374 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 375 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 376 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 377 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 378 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 379 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 380 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 381 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 382 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 383 | "type": "Bot", 384 | "site_admin": false 385 | }, 386 | "node_id": "RE_kwDOADXYQM4InvX0", 387 | "tag_name": "1350.v1b_df4d227d1b_", 388 | "target_commitish": "refs/heads/master", 389 | "name": "1350.v1b_df4d227d1b_", 390 | "draft": false, 391 | "prerelease": false, 392 | "created_at": "2024-07-01T14:16:29Z", 393 | "published_at": "2024-07-01T14:32:45Z", 394 | "assets": [], 395 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1350.v1b_df4d227d1b_", 396 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1350.v1b_df4d227d1b_", 397 | "body": "\n## 🚨 Removed\n\n* remove deprecated and unused Upload class (#541) @jtnord\n\n## 📦 Dependency updates\n\n* Bump io.jenkins.tools.incrementals:git-changelist-maven-extension from 1.7 to 1.8 (#524) @dependabot\n* Bump org.jenkins-ci.plugins:plugin from 4.80 to 4.83 (#535) @dependabot\n", 398 | "mentions_count": 2 399 | }, 400 | { 401 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/162590845", 402 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/162590845/assets", 403 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/162590845/assets{?name,label}", 404 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1344.v5a_3f65a_1e173", 405 | "id": 162590845, 406 | "author": { 407 | "login": "daniel-beck", 408 | "id": 1831569, 409 | "node_id": "MDQ6VXNlcjE4MzE1Njk=", 410 | "avatar_url": "https://avatars.githubusercontent.com/u/1831569?v=4", 411 | "gravatar_id": "", 412 | "url": "https://api.github.com/users/daniel-beck", 413 | "html_url": "https://github.com/daniel-beck", 414 | "followers_url": "https://api.github.com/users/daniel-beck/followers", 415 | "following_url": "https://api.github.com/users/daniel-beck/following{/other_user}", 416 | "gists_url": "https://api.github.com/users/daniel-beck/gists{/gist_id}", 417 | "starred_url": "https://api.github.com/users/daniel-beck/starred{/owner}{/repo}", 418 | "subscriptions_url": "https://api.github.com/users/daniel-beck/subscriptions", 419 | "organizations_url": "https://api.github.com/users/daniel-beck/orgs", 420 | "repos_url": "https://api.github.com/users/daniel-beck/repos", 421 | "events_url": "https://api.github.com/users/daniel-beck/events{/privacy}", 422 | "received_events_url": "https://api.github.com/users/daniel-beck/received_events", 423 | "type": "User", 424 | "site_admin": false 425 | }, 426 | "node_id": "RE_kwDOADXYQM4JsPB9", 427 | "tag_name": "1344.v5a_3f65a_1e173", 428 | "target_commitish": "master", 429 | "name": "", 430 | "draft": false, 431 | "prerelease": false, 432 | "created_at": "2024-06-19T07:52:02Z", 433 | "published_at": "2024-06-26T16:57:27Z", 434 | "assets": [], 435 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1344.v5a_3f65a_1e173", 436 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1344.v5a_3f65a_1e173", 437 | "body": "## 🔨 Developer\r\n\r\n* Add `SecretBytes#fromRawBytes` to support the SECURITY-2495 fix in Plain Credentials plugin.\r\n\r\n## 📝 Documentation updates\r\n\r\n* Removing `pdfs` profile (#513) @jglick\r\n\r\n## 📦 Dependency updates\r\n\r\n* Bump org.xmlunit:xmlunit-matchers from 2.9.1 to 2.10.0 (#526) @dependabot\r\n* Bump org.jenkins-ci.plugins:plugin from 4.78 to 4.80 (#518) @dependabot\r\n* Bump io.jenkins.tools.bom:bom-2.426.x from 2839.v003b_4d9d24fd to 2961.v1f472390972e (#521) @dependabot\r\n", 438 | "mentions_count": 2 439 | }, 440 | { 441 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/141661887", 442 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/141661887/assets", 443 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/141661887/assets{?name,label}", 444 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1337.v60b_d7b_c7b_c9f", 445 | "id": 141661887, 446 | "author": { 447 | "login": "github-actions[bot]", 448 | "id": 41898282, 449 | "node_id": "MDM6Qm90NDE4OTgyODI=", 450 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 451 | "gravatar_id": "", 452 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 453 | "html_url": "https://github.com/apps/github-actions", 454 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 455 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 456 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 457 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 458 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 459 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 460 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 461 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 462 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 463 | "type": "Bot", 464 | "site_admin": false 465 | }, 466 | "node_id": "RE_kwDOADXYQM4IcZa_", 467 | "tag_name": "1337.v60b_d7b_c7b_c9f", 468 | "target_commitish": "refs/heads/master", 469 | "name": "1337.v60b_d7b_c7b_c9f", 470 | "draft": false, 471 | "prerelease": false, 472 | "created_at": "2024-03-01T17:36:39Z", 473 | "published_at": "2024-03-01T17:55:09Z", 474 | "assets": [], 475 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1337.v60b_d7b_c7b_c9f", 476 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1337.v60b_d7b_c7b_c9f", 477 | "body": "\n## 🚀 New features and improvements\n\n* Use new dialog design for adding credentials (#500) @zbynek\n\n## ✍ Other changes\n\n* [JENKINS-72611](https://issues.jenkins.io/browse/JENKINS-72611) - Forbid updating credentials ID for `IdCredentials` (#506) @yaroslavafenkin\n\n## 📦 Dependency updates\n\n* Bump org.jruby:jruby-complete from 9.4.5.0 to 9.4.6.0 (#512) @dependabot\n* Bump org.asciidoctor:asciidoctor-maven-plugin from 2.2.4 to 3.0.0 (#510) @dependabot\n* Bump org.jenkins-ci.plugins:plugin from 4.77 to 4.78 (#508) @dependabot\n", 478 | "mentions_count": 3 479 | }, 480 | { 481 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/138648941", 482 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/138648941/assets", 483 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/138648941/assets{?name,label}", 484 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1319.v7eb_51b_3a_c97b_", 485 | "id": 138648941, 486 | "author": { 487 | "login": "github-actions[bot]", 488 | "id": 41898282, 489 | "node_id": "MDM6Qm90NDE4OTgyODI=", 490 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 491 | "gravatar_id": "", 492 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 493 | "html_url": "https://github.com/apps/github-actions", 494 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 495 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 496 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 497 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 498 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 499 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 500 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 501 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 502 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 503 | "type": "Bot", 504 | "site_admin": false 505 | }, 506 | "node_id": "RE_kwDOADXYQM4IQ51t", 507 | "tag_name": "1319.v7eb_51b_3a_c97b_", 508 | "target_commitish": "refs/heads/master", 509 | "name": "1319.v7eb_51b_3a_c97b_", 510 | "draft": false, 511 | "prerelease": false, 512 | "created_at": "2024-01-26T10:57:09Z", 513 | "published_at": "2024-01-26T11:22:55Z", 514 | "assets": [], 515 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1319.v7eb_51b_3a_c97b_", 516 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1319.v7eb_51b_3a_c97b_", 517 | "body": "\n## 🐛 Bug fixes\n\n* Revert \"[JENKINS-72611](https://issues.jenkins.io/browse/JENKINS-72611) - Forbid editing credentials ID\" (#503) @jtnord\n", 518 | "mentions_count": 1 519 | }, 520 | { 521 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/138575946", 522 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/138575946/assets", 523 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/138575946/assets{?name,label}", 524 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1317.v0ce519a_92b_3e", 525 | "id": 138575946, 526 | "author": { 527 | "login": "github-actions[bot]", 528 | "id": 41898282, 529 | "node_id": "MDM6Qm90NDE4OTgyODI=", 530 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 531 | "gravatar_id": "", 532 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 533 | "html_url": "https://github.com/apps/github-actions", 534 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 535 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 536 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 537 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 538 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 539 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 540 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 541 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 542 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 543 | "type": "Bot", 544 | "site_admin": false 545 | }, 546 | "node_id": "RE_kwDOADXYQM4IQoBK", 547 | "tag_name": "1317.v0ce519a_92b_3e", 548 | "target_commitish": "refs/heads/master", 549 | "name": "1317.v0ce519a_92b_3e", 550 | "draft": false, 551 | "prerelease": false, 552 | "created_at": "2024-01-25T19:58:34Z", 553 | "published_at": "2024-01-25T20:13:59Z", 554 | "assets": [], 555 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1317.v0ce519a_92b_3e", 556 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1317.v0ce519a_92b_3e", 557 | "body": "\n## 🐛 Bug fixes\n\n* [JENKINS-72611](https://issues.jenkins.io/browse/JENKINS-72611) - Forbid editing credentials ID (#502) @yaroslavafenkin\n\n## 📦 Dependency updates\n\n* Bump org.jruby:jruby-complete from 9.4.3.0 to 9.4.5.0 (#494) @dependabot\n* Bump org.asciidoctor:asciidoctorj-pdf from 2.3.9 to 2.3.10 (#498) @dependabot\n* Bump io.jenkins.tools.bom:bom-2.387.x from 2143.ve4c3c9ec790a to 2483.v3b_22f030990a_ (#486) @dependabot\n* Bump org.asciidoctor:asciidoctorj from 2.5.10 to 2.5.11 (#499) @dependabot\n* Bump org.jenkins-ci.plugins:plugin from 4.74 to 4.77 (#501) @dependabot\n", 558 | "mentions_count": 2 559 | }, 560 | { 561 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/133161693", 562 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/133161693/assets", 563 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/133161693/assets{?name,label}", 564 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1311.vcf0a_900b_37c2", 565 | "id": 133161693, 566 | "author": { 567 | "login": "github-actions[bot]", 568 | "id": 41898282, 569 | "node_id": "MDM6Qm90NDE4OTgyODI=", 570 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 571 | "gravatar_id": "", 572 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 573 | "html_url": "https://github.com/apps/github-actions", 574 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 575 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 576 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 577 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 578 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 579 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 580 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 581 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 582 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 583 | "type": "Bot", 584 | "site_admin": false 585 | }, 586 | "node_id": "RE_kwDOADXYQM4H7-Ld", 587 | "tag_name": "1311.vcf0a_900b_37c2", 588 | "target_commitish": "refs/heads/master", 589 | "name": "1311.vcf0a_900b_37c2", 590 | "draft": false, 591 | "prerelease": false, 592 | "created_at": "2023-12-08T11:11:56Z", 593 | "published_at": "2023-12-08T11:24:37Z", 594 | "assets": [], 595 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1311.vcf0a_900b_37c2", 596 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1311.vcf0a_900b_37c2", 597 | "body": "\n## 🐛 Bug fixes\n\n* [JENKINS-72364](https://issues.jenkins.io/browse/JENKINS-72364) - Close provider dialog window when cancel is clicked (#496) @MarkEWaite\n", 598 | "mentions_count": 1 599 | }, 600 | { 601 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/128684498", 602 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/128684498/assets", 603 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/128684498/assets{?name,label}", 604 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1309.v8835d63eb_d8a_", 605 | "id": 128684498, 606 | "author": { 607 | "login": "github-actions[bot]", 608 | "id": 41898282, 609 | "node_id": "MDM6Qm90NDE4OTgyODI=", 610 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 611 | "gravatar_id": "", 612 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 613 | "html_url": "https://github.com/apps/github-actions", 614 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 615 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 616 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 617 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 618 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 619 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 620 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 621 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 622 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 623 | "type": "Bot", 624 | "site_admin": false 625 | }, 626 | "node_id": "RE_kwDOADXYQM4Hq5HS", 627 | "tag_name": "1309.v8835d63eb_d8a_", 628 | "target_commitish": "refs/heads/master", 629 | "name": "1309.v8835d63eb_d8a_", 630 | "draft": false, 631 | "prerelease": false, 632 | "created_at": "2023-11-09T09:55:50Z", 633 | "published_at": "2023-11-09T10:12:57Z", 634 | "assets": [], 635 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1309.v8835d63eb_d8a_", 636 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1309.v8835d63eb_d8a_", 637 | "body": "\n## 🐛 Bug fixes\n\n* Fix a compatibility error in `CredentialsProvider` (#495) @Vlatombe\n", 638 | "mentions_count": 1 639 | }, 640 | { 641 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/126968296", 642 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/126968296/assets", 643 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/126968296/assets{?name,label}", 644 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1307.v3757c78f17c3", 645 | "id": 126968296, 646 | "author": { 647 | "login": "github-actions[bot]", 648 | "id": 41898282, 649 | "node_id": "MDM6Qm90NDE4OTgyODI=", 650 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 651 | "gravatar_id": "", 652 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 653 | "html_url": "https://github.com/apps/github-actions", 654 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 655 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 656 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 657 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 658 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 659 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 660 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 661 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 662 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 663 | "type": "Bot", 664 | "site_admin": false 665 | }, 666 | "node_id": "RE_kwDOADXYQM4HkWHo", 667 | "tag_name": "1307.v3757c78f17c3", 668 | "target_commitish": "refs/heads/master", 669 | "name": "1307.v3757c78f17c3", 670 | "draft": false, 671 | "prerelease": false, 672 | "created_at": "2023-10-27T15:00:31Z", 673 | "published_at": "2023-10-27T15:17:32Z", 674 | "assets": [], 675 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1307.v3757c78f17c3", 676 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1307.v3757c78f17c3", 677 | "body": "\n## 🐛 Bug fixes\n\n* Compatibility error in `CredentialsProvider` (#492) @jglick\n", 678 | "mentions_count": 1 679 | }, 680 | { 681 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/126940239", 682 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/126940239/assets", 683 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/126940239/assets{?name,label}", 684 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1305.v04f5ec1f3743", 685 | "id": 126940239, 686 | "author": { 687 | "login": "github-actions[bot]", 688 | "id": 41898282, 689 | "node_id": "MDM6Qm90NDE4OTgyODI=", 690 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 691 | "gravatar_id": "", 692 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 693 | "html_url": "https://github.com/apps/github-actions", 694 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 695 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 696 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 697 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 698 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 699 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 700 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 701 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 702 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 703 | "type": "Bot", 704 | "site_admin": false 705 | }, 706 | "node_id": "RE_kwDOADXYQM4HkPRP", 707 | "tag_name": "1305.v04f5ec1f3743", 708 | "target_commitish": "refs/heads/master", 709 | "name": "1305.v04f5ec1f3743", 710 | "draft": false, 711 | "prerelease": false, 712 | "created_at": "2023-10-27T12:25:16Z", 713 | "published_at": "2023-10-27T12:55:19Z", 714 | "assets": [], 715 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1305.v04f5ec1f3743", 716 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1305.v04f5ec1f3743", 717 | "body": "\r\n## 👷 Changes for plugin developers\r\n\r\n* [JEP-227](https://github.com/jenkinsci/jep/tree/master/jep/227) - [JENKINS-39324](https://issues.jenkins.io/browse/JENKINS-39324) - Replace Acegi Security with Spring Security APIs (#490) @Vlatombe\r\n\r\n:warning: Regressions reported, under investigation.", 718 | "mentions_count": 1 719 | }, 720 | { 721 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/126284151", 722 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/126284151/assets", 723 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/126284151/assets{?name,label}", 724 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1304.v5ec13eecef46", 725 | "id": 126284151, 726 | "author": { 727 | "login": "github-actions[bot]", 728 | "id": 41898282, 729 | "node_id": "MDM6Qm90NDE4OTgyODI=", 730 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 731 | "gravatar_id": "", 732 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 733 | "html_url": "https://github.com/apps/github-actions", 734 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 735 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 736 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 737 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 738 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 739 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 740 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 741 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 742 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 743 | "type": "Bot", 744 | "site_admin": false 745 | }, 746 | "node_id": "RE_kwDOADXYQM4HhvF3", 747 | "tag_name": "1304.v5ec13eecef46", 748 | "target_commitish": "refs/heads/master", 749 | "name": "1304.v5ec13eecef46", 750 | "draft": false, 751 | "prerelease": false, 752 | "created_at": "2023-10-26T14:13:34Z", 753 | "published_at": "2023-10-26T15:28:39Z", 754 | "assets": [], 755 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1304.v5ec13eecef46", 756 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1304.v5ec13eecef46", 757 | "body": "\n## 👻 Maintenance\n\n* Prepare for prototype removal (#491) @rsandell\n* Do not use `FormApply#applyResponse` to execute arbitrary javascript (#481) @yaroslavafenkin\n\n## 📦 Dependency updates\n\n* Bump org.antlr:antlr4-maven-plugin from 4.13.0 to 4.13.1 (#482) @dependabot\n", 758 | "mentions_count": 3 759 | }, 760 | { 761 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/123543523", 762 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/123543523/assets", 763 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/123543523/assets{?name,label}", 764 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1293.vff276f713473", 765 | "id": 123543523, 766 | "author": { 767 | "login": "github-actions[bot]", 768 | "id": 41898282, 769 | "node_id": "MDM6Qm90NDE4OTgyODI=", 770 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 771 | "gravatar_id": "", 772 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 773 | "html_url": "https://github.com/apps/github-actions", 774 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 775 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 776 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 777 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 778 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 779 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 780 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 781 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 782 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 783 | "type": "Bot", 784 | "site_admin": false 785 | }, 786 | "node_id": "RE_kwDOADXYQM4HXR_j", 787 | "tag_name": "1293.vff276f713473", 788 | "target_commitish": "refs/heads/master", 789 | "name": "1293.vff276f713473", 790 | "draft": false, 791 | "prerelease": false, 792 | "created_at": "2023-10-03T21:33:31Z", 793 | "published_at": "2023-10-03T21:52:11Z", 794 | "assets": [], 795 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1293.vff276f713473", 796 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1293.vff276f713473", 797 | "body": "\n## 👷 Changes for plugin developers\n\n* Use `Descriptor.bindJSON` to support complex describable fields in custom credentials (#488) @dwnusbaum\n\n## 📦 Dependency updates\n\n* Bump org.jenkins-ci.plugins:plugin from 4.73 to 4.74 (#487) @dependabot\n", 798 | "mentions_count": 2 799 | }, 800 | { 801 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/120964182", 802 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/120964182/assets", 803 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/120964182/assets{?name,label}", 804 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1290.v2e5b_13eb_b_127", 805 | "id": 120964182, 806 | "author": { 807 | "login": "github-actions[bot]", 808 | "id": 41898282, 809 | "node_id": "MDM6Qm90NDE4OTgyODI=", 810 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 811 | "gravatar_id": "", 812 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 813 | "html_url": "https://github.com/apps/github-actions", 814 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 815 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 816 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 817 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 818 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 819 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 820 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 821 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 822 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 823 | "type": "Bot", 824 | "site_admin": false 825 | }, 826 | "node_id": "RE_kwDOADXYQM4HNcRW", 827 | "tag_name": "1290.v2e5b_13eb_b_127", 828 | "target_commitish": "refs/heads/master", 829 | "name": "1290.v2e5b_13eb_b_127", 830 | "draft": false, 831 | "prerelease": false, 832 | "created_at": "2023-10-02T16:57:07Z", 833 | "published_at": "2023-10-02T17:21:42Z", 834 | "assets": [], 835 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1290.v2e5b_13eb_b_127", 836 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1290.v2e5b_13eb_b_127", 837 | "body": "\n## 🚀 New features and improvements\n\n* [JENKINS-52386](https://issues.jenkins.io/browse/JENKINS-52386) - Add preview for markup of a CredentialParameterDefinition (#410) @microscotch\n\n## 👻 Maintenance\n\n* Switch from XML Pull Parser v3 to Streaming API for XML (StAX) on newer cores (#484) @basil\n* Test on Java 21 (#475) @NotMyFault\n\n## 📦 Dependency updates\n\n* Bump asciidoctor-maven-plugin from 2.2.3 to 2.2.4 (#468) @dependabot\n* Bump asciidoctorj from 2.5.8 to 2.5.10 (#467) @dependabot\n* Bump org.jenkins-ci.plugins:plugin from 4.71 to 4.73 (#478) @dependabot\n* Bump metainf-services from 1.9 to 1.11 (#466) @dependabot\n", 838 | "mentions_count": 4 839 | }, 840 | { 841 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/112959405", 842 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/112959405/assets", 843 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/112959405/assets{?name,label}", 844 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1271.v54b_1c2c6388a_", 845 | "id": 112959405, 846 | "author": { 847 | "login": "github-actions[bot]", 848 | "id": 41898282, 849 | "node_id": "MDM6Qm90NDE4OTgyODI=", 850 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 851 | "gravatar_id": "", 852 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 853 | "html_url": "https://github.com/apps/github-actions", 854 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 855 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 856 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 857 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 858 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 859 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 860 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 861 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 862 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 863 | "type": "Bot", 864 | "site_admin": false 865 | }, 866 | "node_id": "RE_kwDOADXYQM4Gu5-t", 867 | "tag_name": "1271.v54b_1c2c6388a_", 868 | "target_commitish": "refs/heads/master", 869 | "name": "1271.v54b_1c2c6388a_", 870 | "draft": false, 871 | "prerelease": false, 872 | "created_at": "2023-07-24T23:33:30Z", 873 | "published_at": "2023-07-24T23:47:06Z", 874 | "assets": [], 875 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1271.v54b_1c2c6388a_", 876 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1271.v54b_1c2c6388a_", 877 | "body": "\n## 👷 Changes for plugin developers\n\n* Remove more usages of Prototype (#470) @basil\n\n## 📦 Dependency updates\n\n* Bump jruby-complete from 9.4.2.0 to 9.4.3.0 (#455) @dependabot\n", 878 | "mentions_count": 2 879 | }, 880 | { 881 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/107746765", 882 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/107746765/assets", 883 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/107746765/assets{?name,label}", 884 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1268.v3f0d043d60e9", 885 | "id": 107746765, 886 | "author": { 887 | "login": "github-actions[bot]", 888 | "id": 41898282, 889 | "node_id": "MDM6Qm90NDE4OTgyODI=", 890 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 891 | "gravatar_id": "", 892 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 893 | "html_url": "https://github.com/apps/github-actions", 894 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 895 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 896 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 897 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 898 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 899 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 900 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 901 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 902 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 903 | "type": "Bot", 904 | "site_admin": false 905 | }, 906 | "node_id": "RE_kwDOADXYQM4GbBXN", 907 | "tag_name": "1268.v3f0d043d60e9", 908 | "target_commitish": "refs/heads/master", 909 | "name": "1268.v3f0d043d60e9", 910 | "draft": false, 911 | "prerelease": false, 912 | "created_at": "2023-07-20T12:09:28Z", 913 | "published_at": "2023-07-20T12:22:38Z", 914 | "assets": [], 915 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1268.v3f0d043d60e9", 916 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1268.v3f0d043d60e9", 917 | "body": "\n## 🐛 Bug fixes\n\n* Replace Prototype.js with native JavaScript (#443) @basil\n\n## 📦 Dependency updates\n\n* Bump asciidoctorj-pdf from 2.3.4 to 2.3.9 (#463) @dependabot\n* Bump antlr4-maven-plugin from 4.11.1 to 4.13.0 (#447) @dependabot\n* Bump git-changelist-maven-extension from 1.4 to 1.7 (#461) @dependabot\n* Bump plugin from 4.66 to 4.71 (#464) @dependabot\n* Upgrade HtmlUnit from 2.x to 3.x (#453) @timja-bot\n", 918 | "mentions_count": 3 919 | }, 920 | { 921 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/101315556", 922 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/101315556/assets", 923 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/101315556/assets{?name,label}", 924 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1254.vb_96f366e7b_a_d", 925 | "id": 101315556, 926 | "author": { 927 | "login": "github-actions[bot]", 928 | "id": 41898282, 929 | "node_id": "MDM6Qm90NDE4OTgyODI=", 930 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 931 | "gravatar_id": "", 932 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 933 | "html_url": "https://github.com/apps/github-actions", 934 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 935 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 936 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 937 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 938 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 939 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 940 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 941 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 942 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 943 | "type": "Bot", 944 | "site_admin": false 945 | }, 946 | "node_id": "RE_kwDOADXYQM4GCfPk", 947 | "tag_name": "1254.vb_96f366e7b_a_d", 948 | "target_commitish": "refs/heads/master", 949 | "name": "1254.vb_96f366e7b_a_d", 950 | "draft": false, 951 | "prerelease": false, 952 | "created_at": "2023-05-08T17:38:52Z", 953 | "published_at": "2023-05-08T17:56:24Z", 954 | "assets": [], 955 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1254.vb_96f366e7b_a_d", 956 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1254.vb_96f366e7b_a_d", 957 | "body": "\n## 👷 Changes for plugin developers\n\n* No longer need `ConfidentialStoreRule` (#444) @jglick\n\n## 👻 Maintenance\n\n* Replace some deprecated APIs (#362) @offa\n\n## 📦 Dependency updates\n\n* Bump jruby-complete from 9.4.1.0 to 9.4.2.0 (#421) @dependabot\n* Bump asciidoctor-maven-plugin from 2.2.2 to 2.2.3 (#437) @dependabot\n* Bump asciidoctorj from 2.5.7 to 2.5.8 (#435) @dependabot\n* Bump plugin from 4.61 to 4.62 (#436) @dependabot\n", 958 | "mentions_count": 3 959 | }, 960 | { 961 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/101306289", 962 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/101306289/assets", 963 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/101306289/assets{?name,label}", 964 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1236.v31e44e6060c0", 965 | "id": 101306289, 966 | "author": { 967 | "login": "github-actions[bot]", 968 | "id": 41898282, 969 | "node_id": "MDM6Qm90NDE4OTgyODI=", 970 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 971 | "gravatar_id": "", 972 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 973 | "html_url": "https://github.com/apps/github-actions", 974 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 975 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 976 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 977 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 978 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 979 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 980 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 981 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 982 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 983 | "type": "Bot", 984 | "site_admin": false 985 | }, 986 | "node_id": "RE_kwDOADXYQM4GCc-x", 987 | "tag_name": "1236.v31e44e6060c0", 988 | "target_commitish": "refs/heads/master", 989 | "name": "1236.v31e44e6060c0", 990 | "draft": false, 991 | "prerelease": false, 992 | "created_at": "2023-04-28T16:13:56Z", 993 | "published_at": "2023-04-28T16:29:34Z", 994 | "assets": [], 995 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1236.v31e44e6060c0", 996 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1236.v31e44e6060c0", 997 | "body": "\n## 🚀 New features and improvements\n\n* Apply upcoming core styling to file upload (#403) @timja\n* Simplify Manage Jenkins items naming + change icons (#417) @janfaracik\n\n## 👻 Maintenance\n\n* Adapt to https://github.com/jenkinsci/jenkins/pull/7293 (#385) @basil\n\n## 📦 Dependency updates\n\n* Bump plugin from 4.55 to 4.61 (#433) @dependabot\n", 998 | "mentions_count": 4 999 | }, 1000 | { 1001 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/84837022", 1002 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/84837022/assets", 1003 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/84837022/assets{?name,label}", 1004 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1224.vc23ca_a_9a_2cb_0", 1005 | "id": 84837022, 1006 | "author": { 1007 | "login": "github-actions[bot]", 1008 | "id": 41898282, 1009 | "node_id": "MDM6Qm90NDE4OTgyODI=", 1010 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 1011 | "gravatar_id": "", 1012 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 1013 | "html_url": "https://github.com/apps/github-actions", 1014 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 1015 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 1016 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 1017 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 1018 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 1019 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 1020 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 1021 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 1022 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 1023 | "type": "Bot", 1024 | "site_admin": false 1025 | }, 1026 | "node_id": "RE_kwDOADXYQM4FDoKe", 1027 | "tag_name": "1224.vc23ca_a_9a_2cb_0", 1028 | "target_commitish": "refs/heads/master", 1029 | "name": "1224.vc23ca_a_9a_2cb_0", 1030 | "draft": false, 1031 | "prerelease": false, 1032 | "created_at": "2023-03-14T15:22:47Z", 1033 | "published_at": "2023-03-14T17:00:49Z", 1034 | "assets": [], 1035 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1224.vc23ca_a_9a_2cb_0", 1036 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1224.vc23ca_a_9a_2cb_0", 1037 | "body": "\n## 🐛 Bug fixes\n\n* [JENKINS-69379](https://issues.jenkins.io/browse/JENKINS-69379) - Removed obsolete styling in the Add button (#422) @julieheard\n\n## 📦 Dependency updates\n\n* Bump jruby-complete from 9.3.9.0 to 9.4.1.0 (#413) @dependabot\n* Bump asciidoctorj-pdf from 2.3.3 to 2.3.4 (#399) @dependabot\n* Bump xmlunit-matchers from 2.9.0 to 2.9.1 (#407) @dependabot\n* Bump bom-2.375.x from 1678.vc1feb_6a_3c0f1 to 1836.vfe602c266c05 (#415) @dependabot\n* Bump plugin from 4.52 to 4.55 (#416) @dependabot\n* Bump plugin from 4.50 to 4.52 (#397) @dependabot\n", 1038 | "mentions_count": 2 1039 | }, 1040 | { 1041 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/80779224", 1042 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/80779224/assets", 1043 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/80779224/assets{?name,label}", 1044 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1214.v1de940103927", 1045 | "id": 80779224, 1046 | "author": { 1047 | "login": "github-actions[bot]", 1048 | "id": 41898282, 1049 | "node_id": "MDM6Qm90NDE4OTgyODI=", 1050 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 1051 | "gravatar_id": "", 1052 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 1053 | "html_url": "https://github.com/apps/github-actions", 1054 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 1055 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 1056 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 1057 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 1058 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 1059 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 1060 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 1061 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 1062 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 1063 | "type": "Bot", 1064 | "site_admin": false 1065 | }, 1066 | "node_id": "RE_kwDOADXYQM4E0JfY", 1067 | "tag_name": "1214.v1de940103927", 1068 | "target_commitish": "refs/heads/master", 1069 | "name": "1214.v1de940103927", 1070 | "draft": false, 1071 | "prerelease": false, 1072 | "created_at": "2022-11-09T19:36:03Z", 1073 | "published_at": "2022-11-09T19:56:46Z", 1074 | "assets": [], 1075 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1214.v1de940103927", 1076 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1214.v1de940103927", 1077 | "body": "\n## 🐛 Bug fixes\n\n* [JENKINS-68791](https://issues.jenkins.io/browse/JENKINS-68791) - Missing icon for global credential store (#377) @ridemountainpig\n\n## 👻 Maintenance\n\n* [JENKINS-69653](https://issues.jenkins.io/browse/JENKINS-69653) - Un-inlining dialog.jelly (#378) @Pldi23\n* Move app-bar to main panel (#366) @timja\n\n## ✍ Other changes\n\n* Add Java 17 to test matrix (#387) @NotMyFault\n* chore: use jenkins infra maven cd reusable workflow (#325) @jetersen\n\n## 📦 Dependency updates\n\n* Bump plugin from 4.49 to 4.50 (#389) @dependabot\n* Bump asciidoctorj from 2.5.5 to 2.5.7 (#381) @dependabot\n* Bump jruby-complete from 9.3.4.0 to 9.3.9.0 (#382) @dependabot\n* Bump asciidoctorj-pdf from 2.3.0 to 2.3.3 (#380) @dependabot\n* Bump plugin from 4.47 to 4.49 (#384) @dependabot\n", 1078 | "mentions_count": 6 1079 | }, 1080 | { 1081 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/77153379", 1082 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/77153379/assets", 1083 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/77153379/assets{?name,label}", 1084 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1189.vf61b_a_5e2f62e", 1085 | "id": 77153379, 1086 | "author": { 1087 | "login": "github-actions[bot]", 1088 | "id": 41898282, 1089 | "node_id": "MDM6Qm90NDE4OTgyODI=", 1090 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 1091 | "gravatar_id": "", 1092 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 1093 | "html_url": "https://github.com/apps/github-actions", 1094 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 1095 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 1096 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 1097 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 1098 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 1099 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 1100 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 1101 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 1102 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 1103 | "type": "Bot", 1104 | "site_admin": false 1105 | }, 1106 | "node_id": "RE_kwDOADXYQM4EmURj", 1107 | "tag_name": "1189.vf61b_a_5e2f62e", 1108 | "target_commitish": "refs/heads/master", 1109 | "name": "1189.vf61b_a_5e2f62e", 1110 | "draft": false, 1111 | "prerelease": false, 1112 | "created_at": "2022-09-20T23:05:41Z", 1113 | "published_at": "2022-09-20T23:26:53Z", 1114 | "assets": [], 1115 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1189.vf61b_a_5e2f62e", 1116 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1189.vf61b_a_5e2f62e", 1117 | "body": "\r\n## 🚀 New features and improvements\r\n\r\n* Modernize UI (#364) @timja\r\n\r\n## 👻 Maintenance\r\n\r\n* Update CD template to recommended version (fixes release) (#375) @timja\r\n\r\n## ✍ Other changes\r\n\r\n* Re-align plugin with LTS line (#360) @NotMyFault\r\n* Move chinese translation to localization-zh-cn-plugin (#331) @yuezhuangshi\r\n* Remove deprecated `java.level` property (#363) @basil\r\n* Prevent type error from loading non element (#312) @timja\r\n* Remove deprecated java.level (#347) @offa\r\n\r\n## 📦 Dependency updates\r\n\r\n* Bump antlr4.version from 4.9.3 to 4.11.1 (#367) @dependabot\r\n* Bump jenkins-infra/jenkins-maven-cd-action from 1.3.1 to 1.3.2 (#371) @dependabot\r\n* Bump git-changelist-maven-extension from 1.3 to 1.4 (#368) @dependabot\r\n* Bump actions/setup-java from 3.4.1 to 3.5.0 (#372) @dependabot\r\n* Bump asciidoctorj-pdf from 1.6.2 to 2.3.0 (#358) @dependabot\r\n* Bump actions/setup-java from 2 to 3.4.1 (#341) @dependabot\r\n* Bump asciidoctorj from 2.5.3 to 2.5.5 (#349) @dependabot\r\n* Bump plugin from 4.40 to 4.47 (#359) @dependabot\r\n* Bump jenkins-infra/jenkins-maven-cd-action from 1.2.0 to 1.3.1 (#324) @dependabot\r\n* Bump jenkins-infra/interesting-category-action from 1.0.0 to 1.2.0 (#323) @dependabot\r\n* Bump jenkins-infra/verify-ci-status-action from 1.2.0 to 1.2.1 (#322) @dependabot\r\n", 1118 | "mentions_count": 6 1119 | }, 1120 | { 1121 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/72791876", 1122 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/72791876/assets", 1123 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/72791876/assets{?name,label}", 1124 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1143.vb_e8b_b_ceee347", 1125 | "id": 72791876, 1126 | "author": { 1127 | "login": "github-actions[bot]", 1128 | "id": 41898282, 1129 | "node_id": "MDM6Qm90NDE4OTgyODI=", 1130 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 1131 | "gravatar_id": "", 1132 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 1133 | "html_url": "https://github.com/apps/github-actions", 1134 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 1135 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 1136 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 1137 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 1138 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 1139 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 1140 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 1141 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 1142 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 1143 | "type": "Bot", 1144 | "site_admin": false 1145 | }, 1146 | "node_id": "RE_kwDOADXYQM4EVrdE", 1147 | "tag_name": "1143.vb_e8b_b_ceee347", 1148 | "target_commitish": "refs/heads/master", 1149 | "name": "1143.vb_e8b_b_ceee347", 1150 | "draft": false, 1151 | "prerelease": false, 1152 | "created_at": "2022-08-26T23:02:29Z", 1153 | "published_at": "2022-08-30T03:44:15Z", 1154 | "assets": [], 1155 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1143.vb_e8b_b_ceee347", 1156 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1143.vb_e8b_b_ceee347", 1157 | "body": "\n## 👻 Maintenance\n\n* Remove folder-store from array (#346) @NotMyFault\n\n## 📦 Dependency updates\n\n* Bump plugin from 4.40 to 4.46 and accompanying changes (#356) @Pldi23\n", 1158 | "mentions_count": 2 1159 | }, 1160 | { 1161 | "url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/68821876", 1162 | "assets_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/releases/68821876/assets", 1163 | "upload_url": "https://uploads.github.com/repos/jenkinsci/credentials-plugin/releases/68821876/assets{?name,label}", 1164 | "html_url": "https://github.com/jenkinsci/credentials-plugin/releases/tag/1139.veb_9579fca_33b_", 1165 | "id": 68821876, 1166 | "author": { 1167 | "login": "github-actions[bot]", 1168 | "id": 41898282, 1169 | "node_id": "MDM6Qm90NDE4OTgyODI=", 1170 | "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", 1171 | "gravatar_id": "", 1172 | "url": "https://api.github.com/users/github-actions%5Bbot%5D", 1173 | "html_url": "https://github.com/apps/github-actions", 1174 | "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", 1175 | "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", 1176 | "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", 1177 | "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", 1178 | "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", 1179 | "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", 1180 | "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", 1181 | "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", 1182 | "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", 1183 | "type": "Bot", 1184 | "site_admin": false 1185 | }, 1186 | "node_id": "RE_kwDOADXYQM4EGiN0", 1187 | "tag_name": "1139.veb_9579fca_33b_", 1188 | "target_commitish": "refs/heads/master", 1189 | "name": "1139.veb_9579fca_33b_", 1190 | "draft": false, 1191 | "prerelease": false, 1192 | "created_at": "2022-07-01T18:23:03Z", 1193 | "published_at": "2022-07-01T18:50:58Z", 1194 | "assets": [], 1195 | "tarball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/tarball/1139.veb_9579fca_33b_", 1196 | "zipball_url": "https://api.github.com/repos/jenkinsci/credentials-plugin/zipball/1139.veb_9579fca_33b_", 1197 | "body": "\n## 🐛 Bug fixes\n\n* Add snapshot taker for special `StandardUsernamePasswordCredentials` impls (#327) @jamesrobson-secondmind\n\n## 📝 Documentation updates\n\n* error: annotated nested classes must be static (#333) @timja\n* Reword sentence (#332) @timja\n\n## 👻 Maintenance\n\n* [JENKINS-68674](https://issues.jenkins.io/browse/JENKINS-68674) - Clean up unused icon (#321) @twasyl\n", 1198 | "mentions_count": 3 1199 | } 1200 | ] 1201 | --------------------------------------------------------------------------------