Skip to main content

automated-release-setup

Use this skill whenever the user asks to "set up automated release", "configure release automation", "add automated release workflow", or any variation of setting up the automated release workflow for a SonarSource analyzer project. This skill gathers project details, creates workflow files, updates existing release workflows, and sets up vault permissions.

설치로 이동

소스 정보

저장소
SonarSource/release-github-actions
최근 소스 활동
2026년 8월 31일 12:50
감지된 SKILL.md 언어
영어
스타
7
포크
1

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
automated-release-setup
description
Use this skill whenever the user asks to "set up automated release", "configure release automation", "add automated release workflow", or any variation of setting up the automated release workflow for a SonarSource analyzer project. This skill gathers project details, creates workflow files, updates existing release workflows, and sets up vault permissions.
# Setup Automated Release Workflow Help the user set up the automated release workflow by gathering required information and creating the necessary workflow files. ### Step 1: Gather Required Information Ask the user for the following details using AskUserQuestion: 1. **Project Name**: Display name (e.g., "SonarCOBOL", "SonarApex") 2. **Plugin Name**: Short identifier used in secrets (e.g., "cobol", "apex") 3. **Jira Project Key**: Jira project key (e.g., "SONARCOBOL", "SONARAPEX") 4. **PM Email**: Product Manager email address 5. **Slack Channel**: Check the existing `release.yml` for `slackChannel` value first - reuse it if present, otherwise ask the user 6. **Build System**: Maven (pom.xml) or Gradle (gradle.properties) 7. **SonarQube for IDE Integration**: Whether to create integration tickets for SonarQube for IDE: - **SLVS** (SonarQube for Visual Studio) - **SLVSCODE** (SonarQube for VS Code) - **SLCORE** (SonarLint Core) - **SLE** (SonarQube for Eclipse) - **SLI** (SonarQube for IntelliJ) 8. **CLI Integration**: Whether to create an integration ticket for the SonarQube CLI scanner. 9. **Version Bump**: Whether the automated release workflow should bump the project version after the release (i.e., prepare the next development iteration). If yes, also ask: - **Bump Version PR Labels**: Optional comma-separated list of labels to apply to the version bump pull request (e.g., `update-next-dev,skip-qa`). Leave empty if no labels are needed. ### Step 1b: Check Existing release.yml Before asking for all information, read the existing `.github/workflows/release.yml` file to extract: - **slackChannel**: Reuse the existing Slack channel configuration for the automated release workflow This ensures consistency between the release and automated-release workflows. ### Step 1c: Detect Workflow File Extension Before creating any workflow files, check whether the existing workflows in `.github/workflows/` use `.yml` or `.yaml` as the file extension: ```bash ls .github/workflows/ ``` - If most existing files use `.yml`, create new workflow files with the `.yml` extension. - If most existing files use `.yaml`, create new workflow files with the `.yaml` extension. - If there is a mix, prefer `.yml` (GitHub Actions default). Apply this detected extension consistently when naming all new workflow files (e.g., `automated-release.yml` or `automated-release.yaml`). ### Step 2: Check Prerequisites Remind the user of these prerequisites and **ask for confirmation** using AskUserQuestion: 1. **Jira Configuration**: - Add `Jira Tech User GitHub` as Administrator on the Jira project - Add the same user to Jira sandbox for dry-run testing (required for `dry-run: true` mode) - **Ask the user to confirm both**: - "Have you added 'Jira Tech User GitHub' as Administrator on the {JIRA_PROJECT_KEY} project?" (Production) - "Have you added 'Jira Tech User GitHub' as Administrator on the {JIRA_PROJECT_KEY} project in the Jira sandbox?" (For dry-run testing) - The user must verify this manually at: Project settings → People → Administrator role - Sandbox URL: https://sonarsource-sandbox-608.atlassian.net/ 2. **Vault Permissions** (re-terraform-aws-vault): - Create a PR to add the `release-automation` secret to the repository's config in the squad config file - File: `orders/{squad}.yaml` (e.g., `orders/analysis-jvm-squad.yaml`) - This creates secret `sonar-{plugin-name}-release-automation` - Example PR: https://github.com/SonarSource/re-terraform-aws-vault/pull/8406 - **Important**: The skill should create this PR automatically (see Step 5b) 3. **Release Workflow**: - Ensure `release.yml` supports `workflow_dispatch` with inputs: `version`, `releaseId`, `dryRun` ### Step 3: Create Workflow Files Create only the `automated-release` workflow file (using the detected extension from Step 1c). **Do not create a separate `bump-versions` workflow** — version bumping is handled directly by the reusable workflow when `bump-version: true` is passed. #### 3.1 Create `automated-release{EXT}` (standard, no SonarQube for IDE integration, no version bump) ```yaml name: Automated Release on: workflow_dispatch: inputs: short-description: description: "Short description for the REL ticket" required: true type: string sqc-integration: description: "Integrate into SQC" type: boolean default: true sqs-integration: description: "Integrate into SQS" type: boolean default: true branch: description: "Branch from which to do the release" required: true default: "master" type: string new-version: description: "Next Jira version to create after the release (e.g. 2.2), NOT the version being released; if left empty, the current Jira version's last component is incremented (e.g. 2.1 -> 2.2)" required: false type: string rule-props-changed: description: > "@RuleProperty" changed? See SC-4654 type: boolean default: false verbose: description: "Enable verbose logging" type: boolean default: false dry-run: description: "Test mode: uses Jira sandbox and creates draft GitHub release" type: boolean default: false jobs: release: name: Release uses: SonarSource/release-github-actions/.github/workflows/automated-release.yml@v1 permissions: statuses: read id-token: write contents: write actions: write pull-requests: write with: project-name: "${PROJECT_NAME}" plugin-name: "${PLUGIN_NAME}" jira-project-key: "${JIRA_PROJECT_KEY}" rule-props-changed: ${{ github.event.inputs.rule-props-changed }} short-description: ${{ github.event.inputs.short-description }} new-version: ${{ github.event.inputs.new-version }} sqc-integration: ${{ github.event.inputs.sqc-integration == 'true' }} sqs-integration: ${{ github.event.inputs.sqs-integration == 'true' }} branch: ${{ github.event.inputs.branch }} pm-email: "${PM_EMAIL}" slack-channel: "${SLACK_CHANNEL}" verbose: ${{ github.event.inputs.verbose == 'true' }} use-jira-sandbox: ${{ github.event.inputs.dry-run == 'true' }} is-draft-release: ${{ github.event.inputs.dry-run == 'true' }} ``` #### 3.2 Create `automated-release{EXT}` (standard, no SonarQube for IDE integration, **with version bump**) When the user wants version bumping, add `bump-version: true` (and optionally `bump-version-pr-labels`) to the `with:` block: ```yaml name: Automated Release on: workflow_dispatch: inputs: short-description: description: "Short description for the REL ticket" required: true type: string sqc-integration: description: "Integrate into SQC" type: boolean default: true sqs-integration: description: "Integrate into SQS" type: boolean default: true branch: description: "Branch from which to do the release" required: true default: "master" type: string new-version: description: "Next Jira version to create after the release (e.g. 2.2), NOT the version being released; if left empty, the current Jira version's last component is incremented (e.g. 2.1 -> 2.2)" required: false type: string rule-props-changed: description: > "@RuleProperty" changed? See SC-4654 type: boolean default: false verbose: description: "Enable verbose logging" type: boolean default: false dry-run: description: "Test mode: uses Jira sandbox and creates draft GitHub release" type: boolean default: false jobs: release: name: Release uses: SonarSource/release-github-actions/.github/workflows/automated-release.yml@v1 permissions: statuses: read id-token: write contents: write actions: write pull-requests: write with: project-name: "${PROJECT_NAME}" plugin-name: "${PLUGIN_NAME}" jira-project-key: "${JIRA_PROJECT_KEY}" rule-props-changed: ${{ github.event.inputs.rule-props-changed }} short-description: ${{ github.event.inputs.short-description }} new-version: ${{ github.event.inputs.new-version }} sqc-integration: ${{ github.event.inputs.sqc-integration == 'true' }} sqs-integration: ${{ github.event.inputs.sqs-integration == 'true' }} branch: ${{ github.event.inputs.branch }} pm-email: "${PM_EMAIL}" slack-channel: "${SLACK_CHANNEL}" verbose: ${{ github.event.inputs.verbose == 'true' }} use-jira-sandbox: ${{ github.event.inputs.dry-run == 'true' }} is-draft-release: ${{ github.event.inputs.dry-run == 'true' }} bump-version: true bump-version-pr-labels: "${BUMP_VERSION_PR_LABELS}" # omit this line if no labels ``` #### 3.3 Create `automated-release{EXT}` (with SonarQube for IDE integration, no version bump) ```yaml name: Automated Release on: workflow_dispatch: inputs: short-description: description: "Short description for the REL ticket" required: true type: string sq-ide-short-description: description: "Short description for the SonarQube for IDE tickets (leave empty to skip IDE tickets)" required: false type: string sqc-integration: description: "Integrate into SQC" type: boolean default: true sqs-integration: description: "Integrate into SQS" type: boolean default: true slvs-integration: description: "Create SLVS ticket (SonarQube for Visual Studio)" type: boolean default: false slvscode-integration: description: "Create SLVSCODE ticket (SonarQube for VS Code)" type: boolean default: false slcore-integration: description: "Create SLCORE ticket (SonarLint Core)" type: boolean default: false sle-integration: description: "Create SLE ticket (SonarQube for Eclipse)" type: boolean default: false sli-integration: description: "Create SLI ticket (SonarQube for IntelliJ)" type: boolean default: false branch: description: "Branch from which to do the release" required: true default: "master" type: string new-version: description: "Next Jira version to create after the release (e.g. 2.2), NOT the version being released; if left empty, the current Jira version's last component is incremented (e.g. 2.1 -> 2.2)" required: false type: string rule-props-changed: description: > "@RuleProperty" changed? See SC-4654 type: boolean default: false verbose: description: "Enable verbose logging" type: boolean default: false dry-run: description: "Test mode: uses Jira sandbox and creates draft GitHub release" type: boolean default: false jobs: release: name: Release uses: SonarSource/release-github-actions/.github/workflows/automated-release.yml@v1 permissions: statuses: read id-token: write contents: write actions: write pull-requests: write with: project-name: "${PROJECT_NAME}" plugin-name: "${PLUGIN_NAME}" jira-project-key: "${JIRA_PROJECT_KEY}" rule-props-changed: ${{ github.event.inputs.rule-props-changed }} short-description: ${{ github.event.inputs.short-description }} new-version: ${{ github.event.inputs.new-version }} sqc-integration: ${{ github.event.inputs.sqc-integration == 'true' }} sqs-integration: ${{ github.event.inputs.sqs-integration == 'true' }} create-slvs-ticket: ${{ github.event.inputs.slvs-integration == 'true' }} create-slvscode-ticket: ${{ github.event.inputs.slvscode-integration == 'true' }} create-slcore-ticket: ${{ github.event.inputs.slcore-integration == 'true' }} create-sle-ticket: ${{ github.event.inputs.sle-integration == 'true' }} create-sli-ticket: ${{ github.event.inputs.sli-integration == 'true' }} sq-ide-short-description: ${{ github.event.inputs.sq-ide-short-description }} branch: ${{ github.event.inputs.branch }} pm-email: "${PM_EMAIL}" slack-channel: "${SLACK_CHANNEL}" verbose: ${{ github.event.inputs.verbose == 'true' }} use-jira-sandbox: ${{ github.event.inputs.dry-run == 'true' }} is-draft-release: ${{ github.event.inputs.dry-run == 'true' }} ``` #### 3.4 Create `automated-release{EXT}` (with SonarQube for IDE integration **and** version bump) Add `bump-version: true` (and optionally `bump-version-pr-labels`) to the SonarQube for IDE variant's `with:` block, same as in 3.2. #### 3.5 Create `automated-release{EXT}` (with SQ-CLI integration, no version bump, no SonarQube for IDE integration) ```yaml name: Automated Release on: workflow_dispatch: inputs: short-description: description: "Short description for the REL ticket" required: true type: string cli-integration: description: "Create CLI ticket (SonarQube CLI scanner)" type: boolean default: false sq-cli-short-description: description: "Short description for the CLI ticket (leave empty to use the main short-description)" required: false type: string sqc-integration: description: "Integrate into SQC" type: boolean default: true sqs-integration: description: "Integrate into SQS" type: boolean default: true branch: description: "Branch from which to do the release" required: true default: "master" type: string new-version: description: "Next Jira version to create after the release (e.g. 2.2), NOT the version being released; if left empty, the current Jira version's last component is incremented (e.g. 2.1 -> 2.2)" required: false type: string rule-props-changed: description: > "@RuleProperty" changed? See SC-4654 type: boolean default: false verbose: description: "Enable verbose logging" type: boolean default: false
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기