Migrate To Teamcity
JetBrains/teamcity-cli
Migrating CI/CD pipelines to TeamCity. An agent skill from JetBrains/teamcity-cli.
Runs a full end-to-end test of sfdx-hardis promotion branches and backpromote against real Salesforce orgs and a throwaway repository, then writes a report.
$ npx skills add hardisgroupcom/sfdx-hardis --skill promotion-branches-e2e -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis promotion-branches-e2e --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/promotion-branches-e2e .claude/skills/promotion-branches-e2e && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "promotion-branches-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/promotion-branches-e2e into .claude/skills/promotion-branches-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promotion-branches-e2e", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/promotion-branches-e2eType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add hardisgroupcom/sfdx-hardis --skill promotion-branches-e2e -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis promotion-branches-e2e --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/promotion-branches-e2e .agents/skills/promotion-branches-e2e && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "promotion-branches-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/promotion-branches-e2e into .agents/skills/promotion-branches-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promotion-branches-e2e", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hardisgroupcom/sfdx-hardis --skill promotion-branches-e2e -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis promotion-branches-e2e --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/promotion-branches-e2e .cursor/skills/promotion-branches-e2e && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "promotion-branches-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/promotion-branches-e2e into .cursor/skills/promotion-branches-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promotion-branches-e2e", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/hardisgroupcom/sfdx-hardis.git --path .claude/skills/promotion-branches-e2e--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add hardisgroupcom/sfdx-hardis --skill promotion-branches-e2e -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis promotion-branches-e2e --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/promotion-branches-e2e .gemini/skills/promotion-branches-e2e && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "promotion-branches-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/promotion-branches-e2e into .gemini/skills/promotion-branches-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promotion-branches-e2e", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install hardisgroupcom/sfdx-hardis promotion-branches-e2eInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add hardisgroupcom/sfdx-hardis --skill promotion-branches-e2e -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/promotion-branches-e2e .github/skills/promotion-branches-e2e && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "promotion-branches-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/promotion-branches-e2e into .github/skills/promotion-branches-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promotion-branches-e2e", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hardisgroupcom/sfdx-hardis --skill promotion-branches-e2e -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis promotion-branches-e2e --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/promotion-branches-e2e .opencode/skills/promotion-branches-e2e && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "promotion-branches-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/promotion-branches-e2e into .opencode/skills/promotion-branches-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promotion-branches-e2e", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
promotion-branches-e2eRuns a full end-to-end test of sfdx-hardis promotion branches and backpromote against real Salesforce orgs and a throwaway repository, then writes a report.
This is a maintainer's test runbook for the sfdx-hardis project. It rebuilds from nothing a four-level pipeline that exercises every path of the promotion branches feature, and of backpromote while it is in beta, against a real Salesforce org and a throwaway private GitHub, GitLab or Azure DevOps repository. Every job log is asserted and a report is written, in roughly 45 minutes of wall clock time.
It builds on the separate promotion-branches skill, which should be read first. The bundle includes a runbook covering repository layout, six user stories, run order, what to assert in each log, edge cases and traps; shell scripts that build the repo, define the stories and simulate GitHub jobs such as check, deploy, promote and release notes; and a folder of JSON fixtures for backpromote states. It is for when promotion branches or backpromote code changed and must be proven again.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 971ac89. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadGrepGlobEditWriteAskUserQuestionFrom allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
sfghglabyarnnodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, glab and yarn, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
AZURE_PERSONAL_ACCESS_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Promotion Branches E2E Test loads about 4.7k tokens when it runs. Until then it costs about 130 tokens; SKILL.md has 1,821 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
b auth status`, the Azure DevOps PAT in `.env`allowed-tools: Bash, Read, Grep, Glob, Edit, Write, AskUserQuestionAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from hardisgroupcom/sfdx-hardis at commit 971ac89, republished under its AGPL-3.0 licence (© hardisgroupcom). 1,821 words, ~4,696 tokens.
.claude/skills/promotion-branches-e2e/SKILL.md (or your agent's skills folder). This skill also uses 79 other files; get the full folder from GitHub.Rebuild, from nothing, a four level pipeline that exercises every path of the promotion branches feature against a real Salesforce org, assert every job log, then write the report. Roughly 45 minutes of wall clock.
The design of the feature itself is in the promotion-branches skill: read it first if you have
not already, so you know what each assertion is protecting.
| File | Use |
|---|---|
reference/runbook.md | The full procedure: repository layout, the six User Stories, the run order, what to assert in each log, the edge cases, the traps. Read it before starting. |
scripts/build-repo.sh | Writes the base project, the four major branches and the config. Provider agnostic. |
scripts/stories.sh | story_branch and story_actions: the six User Stories and the action files that travel with them. Provider agnostic. |
scripts/e2e-lib.sh | GitHub job simulators: e2e_check, e2e_deploy, e2e_promote, e2e_release_notes, e2e_grep. Source it. |
scripts/e2e-lib-gitlab.sh | The same for GitLab, plus gl_mr_create, gl_mr_merge and the merge-ref wait GitLab needs. |
scripts/check-pipeline.cjs | Drives the extension's own PipelineDataProvider against the test repository and asserts what the DevOps Pipeline shows at a point of the run. |
scripts/check-diagram.cjs | Feeds the extension's compiled helpers with the real Pull Requests and asserts the "single place in the diagram" rule. |
scripts/check-diagram-gitlab.cjs | The same, reading merge requests from the GitLab API. |
scripts/check-backpromote-plan.cjs | Asserts a hardis:work:backpromote ... --json document (plan version 3: plan, prepare, run, confirm, reset) against the expectations of reference/backpromote/*.json (section 6bis). |
scripts/check-backpromote-comments.cjs | Asserts the "Backpromotes" Pull Request comments of a dump_pr_comments dump: one comment per Pull Request, its sandbox rows and action rows (section 6bis, C1 to C4). |
scripts/check-backpromote-identical.cjs | Asserts the identical actions of a backpromote --plan --json document or run result: identicalTo, one key per action, the outcome of each key (section 6sexies). |
scripts/promotion-provider.sh | Provider neutral job names (p_check, p_deploy, p_promote, p_open, p_merge...) over the GitHub or GitLab library, picked with PROVIDER. |
scripts/promotion-run.sh | Sections 3, 4 and 4bis scripted: the six stories, the four promotions, the release notes, the retrofit, an assertion per job log and a pipeline check per step. |
scripts/promotion-edge.sh | Section 6 scripted in five groups (g1 to g5) that build on each other, run after promotion-run.sh. |
scripts/deployment-actions-run.sh | Section 6quater scripted: the manual action gate of validations, a failed action retried with action:run, set-status (also ahead in the next branch), the promotion forecast and the developer org runs. After promotion-run.sh. |
scripts/identical-actions-run.sh | Section 6sexies: an action shared by several stories runs once in the promotion to uat; a repeat inside one story, another phase, a reused id, a copy after a failure, the forecast, the re-run, the branch config, the validation job, the backpromote. After promotion-run.sh. |
scripts/section-lib.sh | The assertion helpers of the section scripts (record, assert_log, job, cli, status_check, open_story). Sourced by deployment-actions-run.sh and identical-actions-run.sh. |
scripts/check-action-status.cjs | Asserts an action:list --with-status [--forecast] [--with-backpromotes] --json document: statuses, notes, forecasts and the identical action of a copy, the promotion carried, Backpromotes rows. |
scripts/ci-workflows-prepare.cjs | The GitHub Actions workflows of the CI section: the sfdx-hardis templates plus a step that links the branch under test and SFDX_AUTH_URL_<BRANCH> logins. |
scripts/ci-workflows-run.sh | Section 6quinquies: the gate, the checkbox, a real draft, the deployment, the promotion and its forecast, the same action in two stories, run by REAL GitHub Actions jobs in a repository of its own. |
scripts/timing-report.cjs | Performance tables of a run: timings.tsv (every job and backpromote call) and the backpromote progress files, median and worst per step, slowest calls. |
scripts/ab-run.sh | Runs the same CI jobs with a given CLI checkout and stores the logs. |
scripts/ab-run-gitlab.sh | The same on GitLab. |
scripts/ab-run-azure.sh | The same on Azure DevOps. |
scripts/ab-run-bitbucket.sh | The same on Bitbucket Cloud. |
scripts/audit-pr-comments.cjs | The Pull Request comment audit, shared by the four providers. Fed by the dump_pr_comments of each library. |
scripts/ab-diff.py | Normalises two log folders and diffs them: the flag-off regression proof. |
Ask the user only for what you cannot find yourself:
<gh login>/sfdx-hardis-promo-e2e-<n>, incrementing <n> past the ones that already exist;
on GitLab, <user>/sfdx-hardis-promo-e2e-gl-<n>; on Azure DevOps,
sfdx-hardis-promo-e2e-az-<n> inside an existing team project;Check yourself: gh auth status, glab auth status, the Azure DevOps PAT in .env
(AZURE_PERSONAL_ACCESS_TOKEN), sf org list, the sfdx-hardis branch under test, and whether the vscode-sfdx-hardis working copy is on the matching branch and compiled
(yarn compile), which the diagram check needs.
Never reuse a previous test repository. Each run starts from a fresh private repository, so a failure cannot be an artefact of the previous run's state.
Read reference/runbook.md in full. It holds the decisions that make the run meaningful
(development branch named integration so stories arrive through a child branch,
hardis-report/ deliberately not gitignored, one static resource per story, never squash).
Set the environment and source the library:
export ORG="..." REPO="..." WORK="/c/tmp/promo-e2e" LOGS="/c/tmp/promo-e2e-logs"
export DEV="C:/git/sfdx-hardis/bin/dev.js"
source .claude/skills/promotion-branches-e2e/scripts/e2e-lib.shBuild the repository and the stories (runbook sections 2 and 3).
Run the pipeline (runbook section 4), asserting each log as you go with e2e_grep. Do not
batch the assertions to the end: a wrong scope early makes every later log meaningless.
Run the edge cases (runbook section 6). These are where the defects have been.
5bis. Audit the Pull Request comments (runbook section 5bis). The job logs say what the command
decided; the audit says what the reviewer reads. Four of the defects of 2026-09-08 came from it,
and none of them was visible in a job log.
5ter. Check the DevOps Pipeline before and after every promotion operation
(runbook section 4bis): pipeline_check <label> <expectations.json>. The job logs and the Pull
Request comments say nothing about the view the release manager actually reads.
5bis-bis. Run the deployment actions section (runbook section 6quater): deployment-actions-run.sh,
after promotion-run.sh. It turns failValidationOnPendingManualActions on (off by default),
checks that a pre-deployment manual action stops the validation (not on a draft), the retry of
a failed action, set-status here and ahead in the next branch, the forecast of the next promotion, and, with DEV_ORG, the runs in a developer org.
5bis-ter. Run the same features through real CI (runbook section 6quinquies):
ci-workflows-run.sh, with its own REPO, WORK and LOGS. The simulators prove the CLI; this
proves the workflows a project really runs, with the branch linked by sf plugins link.
5bis-quater. Run the identical actions section (runbook section 6sexies): identical-actions-run.sh,
after promotion-run.sh. Eight stories promoted together to uat: the action they share runs once
(the counter file says how many times it really ran), an action written twice in one story runs
twice, a reused id runs for each story, and a copy met after a failure is recorded as done. Then
the backpromote of that window, the same action in the branch config and in a story, and the
validation job running an action with context all.
5quater. Run backpromote (Beta) (runbook section 6bis): backpromote-setup.sh then
backpromote-steps.sh, against scratch orgs created from the Dev Hub. Steps B0 to B16: no git
provider token, refused orgs (major branch org, production), refused parent branch, the first plan
with no history and its progress file, the run from S1 with the deployment actions and the
"Backpromotes" comments, up to date and a manual action confirmed, the default start after a new
story, a file that differs overwritten, the org version kept then offered again, the agent protocol
(waitingForMerges, solve, run again, branch pushed), the panel protocol (--prepare, refused
while markers remain, run), a deletion skipped then applied, an excluded item that comes back, a
dirty working tree stashed, a refreshed sandbox (same name, other org id), the scan limit and the
reset. Assert each JSON document with backpromote_check and the comments with
backpromote_comments_check (C1 to C4).
Check the diagram rule: node scripts/check-diagram.cjs <owner>/<repo> integration,uat,preprod,main
(check-diagram-gitlab.cjs / check-diagram-azure.cjs for the other two providers).
Run the flag-off A/B regression check (runbook section 7ter). TOTAL DIFFERING LINES: 0,
or 1 when a merged branch is named promotion/....
Write the report in this skill's reports/ folder, one per provider:
.claude/skills/promotion-branches-e2e/reports/promotion-branches-e2e-report-github.md,
…-gitlab.md, …-azure.md and …-bitbucket.md. Never write them at the repository root.
Pipeline under test, the stories, the promotions performed, a table per test group with expected
versus result (backpromote steps B0 to B9 included), what the run found, what it did not cover,
and the suite counts. Overwrite the previous reports.
State them again in the report unless you close them:
--json documents the run asserts, and its command builder, greying rules and marker watch
are unit tested. The terminal prompts of step B17 are only covered when someone answers them by
hand. The retry of a comment read after a dropped connection only runs when the provider drops one.IA_RUN=2), and W9 ran it through real GitHub Actions. Identical copies of custom
function actions with outputs, and of actions with a customUsername, are unit tested only.scripts/promotion-provider.sh covers GitHub and GitLab only: Azure DevOps and Bitbucket still
run sections 4 and 6 by hand with their own libraries.$ARGUMENTS
© hardisgroupcom, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 79 other files (scripts) in .claude/skills/promotion-branches-e2e of hardisgroupcom/sfdx-hardis.
Open the folder on GitHubat commit 971ac89
Promotion Branches E2E Test next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Promotion Branches E2E Test this skillhardisgroupcom/sfdx-hardis | 400 | — | ~4.7k | Automated safety check: Notes | AGPL-3.0 | |
| Migrate To TeamcityJetBrains/teamcity-cli | 125 | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Authoring GitHub Workflowsdotnet/skills | 5.6k | 1 repos | ~2.3k | Automated safety check: Pass | MIT | |
| Playwright E2Eforcedotcom/salesforcedx-vscode | 1k | — | ~3k | Automated safety check: Pass | BSD-3-Clause | |
| Appbuilder Cicd PipelineNeverSight/learn-skills.dev | 216 | 1 repos | ~1.8k | Automated safety check: Notes | Apache-2.0 | |
| Azure Pipelines Log Downloaderansible/ansible | 71k | — | ~825 | Automated safety check: Pass | GPL-3.0 |
JetBrains/teamcity-cli
Migrating CI/CD pipelines to TeamCity. An agent skill from JetBrains/teamcity-cli.
dotnet/skills
Author and review GitHub Actions workflow YAML safely so syntactically-valid YAML can't ship a workflow that GitHub Actions refuses to run.
forcedotcom/salesforcedx-vscode
writing, running, and debugging Playwright tests; creating and recreating scratch orgs (Dreamhouse, minimal, non-tracking); working with their output from github actions
NeverSight/learn-skills.dev
Set up CI/CD pipelines for Adobe App Builder projects. An agent skill from NeverSight/learn-skills.dev.
ansible/ansible
Downloads Azure Pipelines CI logs for an Ansible pull request or build so the agent can analyze test failures, after asking you first.
zebbern/claude-code-guide
Production-ready CI/CD configurations for Playwright — GitHub Actions, GitLab CI, CircleCI, Azure DevOps, Jenkins, Docker, parallel sharding, reporting, code coverage, and global setup/teardown.
hardisgroupcom/sfdx-hardis
Walks the sfdx-hardis training course end to end as a learner would, against a real Developer Edition org and fork, fixing broken steps and screenshots that no longer match.
hardisgroupcom/sfdx-hardis
Explains how the sfdx-hardis Salesforce CLI plugin is built: its TypeScript and Oclif stack, command layout, agent-mode flag and provider classes for git, notifications and AI.
hardisgroupcom/sfdx-hardis
Style rules for adding CHANGELOG.md entries: short, user-facing bullets grouped by command under the beta section, each linking the command's docs page.
hardisgroupcom/sfdx-hardis
Documentation standards for sfdx-hardis commands (description format with Command Behavior and Technical explanations sections, MkDocs site, build:doc).
hardisgroupcom/sfdx-hardis
Decision framework for fixing jscpd (copy-paste detector) errors.
hardisgroupcom/sfdx-hardis
Code examples and patterns for using i18n translations in sfdx-hardis source code (uxLog, uxLogTable, prompts, markers).
Categories
Runs a full end-to-end test of sfdx-hardis promotion branches and backpromote against real Salesforce orgs and a throwaway repository, then writes a report. This is a maintainer's test runbook for the sfdx-hardis project. It rebuilds from nothing a four-level pipeline that exercises every path of the promotion branches feature, and of backpromote while it is in beta, against a real Salesforce org and a throwaway private GitHub, GitLab or Azure DevOps repository.
Promotion Branches E2E Test fits situations like: re-proving promotion branches after changing the feature; re-testing backpromote after changes to the command or the VS Code panel; producing an end-to-end test report against real Salesforce orgs.
Run `npx skills add hardisgroupcom/sfdx-hardis --skill promotion-branches-e2e -a claude-code`. Or copy the skill folder (.claude/skills/promotion-branches-e2e in hardisgroupcom/sfdx-hardis) into .claude/skills/promotion-branches-e2e in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hardisgroupcom/sfdx-hardis --skill promotion-branches-e2e -a codex`. Or copy the skill folder (.claude/skills/promotion-branches-e2e in hardisgroupcom/sfdx-hardis) into .agents/skills/promotion-branches-e2e in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add hardisgroupcom/sfdx-hardis --skill promotion-branches-e2e -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/promotion-branches-e2e, .gemini/skills/promotion-branches-e2e, .github/skills/promotion-branches-e2e and .opencode/skills/promotion-branches-e2e in your project.
Going by SKILL.md and its folder, Promotion Branches E2E Test needs the command-line tools its instructions call (sf, gh, glab, yarn and node) and credentials named AZURE_PERSONAL_ACCESS_TOKEN. Our summary lists: Access to real Salesforce orgs; A throwaway private GitHub, GitLab or Azure DevOps repository; Bash for the helper scripts. Its frontmatter pre-approves these tools: Bash, Read, Grep, Glob, Edit, Write, AskUserQuestion.
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file; pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Promotion Branches E2E Test is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.7k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Promotion Branches E2E Test: Migrate To Teamcity (JetBrains/teamcity-cli, 125 stars), Authoring GitHub Workflows (dotnet/skills, 5.6k stars), Playwright E2E (forcedotcom/salesforcedx-vscode, 1k stars) and Appbuilder Cicd Pipeline (NeverSight/learn-skills.dev, 216 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
hardisgroupcom (a GitHub organization) maintains it in hardisgroupcom/sfdx-hardis, which has 400 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 7, 2026.
Source: hardisgroupcom/sfdx-hardis on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.