ci(jira): automate the ticket lifecycle and publish GitHub releases - #1106
Open
yasin-ce wants to merge 3 commits into
Open
ci(jira): automate the ticket lifecycle and publish GitHub releases#1106yasin-ce wants to merge 3 commits into
yasin-ce wants to merge 3 commits into
Conversation
yasin-ce
marked this pull request as ready for review
July 31, 2026 07:32
wjbeau
approved these changes
Jul 31, 2026
yasin-ce
force-pushed
the
yasince/ci/jira-status-automation
branch
from
July 31, 2026 09:22
a18a41e to
96d02ea
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Automates the PERA ticket lifecycle and publishes GitHub Releases, both driven from GitHub Actions.
Bitrise builds; GitHub automates. No Jira credential is copied into Bitrise. "A release shipped" is read from the check run Bitrise's GitHub integration already posts, so the Jira rules live in one place and a Bitrise config change can't silently stop moving tickets.
main-alpha.N) shipped green-rc.N) shipped greenvX.Y.Z) shipped greenAlso publishes a GitHub Release per release tag (the repo has 50+ tags and no releases;
workflow_dispatchdoubles as a backfill), and adds aCI Lintjob runningactionlint,shellcheckand the new shell test suites.Full write-up:
docs/CI_AUTOMATION.md.Related Issues
Checklist
Additional Notes
This writes to a live tracker, so the safety rules are the substance of the review, not the plumbing:
*Input Needed, Cancelled, Duplicate) are treated as deliberate parking and left alone.jira-drift.ymlexists precisely because that choice is otherwise silent: a rotated token would just stop moving tickets, so a weekly read-only report fails loudly when git and Jira disagree.DRY_RUN=1makes any stage read and report while withholding every write. Worth using for the first run.pull_request_targetinjira-sync.ymlis deliberate and worth a reviewer's eye: this repo is public, and apull_requestrun from a fork gets no secrets, so the sync would silently never happen. It is safe here because no PR code is checked out or executed — the checkout is the base ref, and the PR title/branch reach the script throughenv, never interpolated into a shell command. Fork PRs are additionally excluded by the jobif, so nobody can move an arbitrary ticket by naming it in a PR title.Known rough edges, left as-is:
api()merges stderr into the response body, so a connection failure makes the warning readHTTP curl: (6) Could not resolve host…. It still fails correctly, just prints oddly.jira-release-sync.ymlusesmapfile(bash 4+) whiletools/lib/jira-api.shdocuments bash 3.2 compatibility. Fine on runners; only bites if run on stock macOS bash.check_run: completedqueues the release-sync workflow for every check run in the repo. The job-levelifmeans no runner starts, so it's cheap, but the event volume is high.CI Lintrunsshellcheck --severity=erroronly. The pre-existing warnings are real, but two are intools/generate-config.shon the production config path and deserve their own change with a test.Verification: 5 shell suites / 57 assertions pass against a stubbed Jira (
tools/__tests__/). All workflow YAML parses. The workflows themselves can't be exercised locally — this PR's ownCI Lintrun is the first real check, and the Jira stages only fire on their triggers.