Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 28 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,33 @@ jobs:
# whole way. Checked out beside xchain-documentation, not nested, so the
# generator's '../xchain-indexer' resolution finds it.
#
# Ref: the release branch on a release head (a PR from release/*), the
# pushed/targeted branch otherwise. Matches the ref logic xchain-e2e-test's
# CI already uses for the same sibling. The indexer repo is public, so the
# default token reads it and this repo keeps holding no secrets.
# Ref, in the order the expression tries them:
# 1. a release head (a PR from release/*) reads that same release branch,
# so a train is judged against the code it is shipping;
# 2. anything aimed at master reads the indexer's master, whether it
# arrives as a pull request (github.base_ref) or as the merge landing
# on the branch itself (github.ref);
# 3. everything else reads develop.
#
# Case 2 needs BOTH halves. On a pull_request event github.ref is
# refs/pull/<n>/merge, never refs/heads/master, so the old expression's
# single github.ref test resolved DEVELOP for a PR whose base is master,
# and a master-bound PR was graded against unreleased code. That is a wrong
# verdict rather than a flaky one: the corpus on master documents the
# RELEASED platform, so a page there cites the file layout the release tag
# carries. PR 44 (the v0.19.1 mirror) failed on exactly that: it cites
# xchain-indexer/src/stateHash.js, stake_weighted_quorum.js and
# equivocation_header.js, which exist at indexer master and moved under
# src/consensus/ on indexer develop.
#
# github.base_ref is the empty string on a push event, so it is inert
# there and case 2 still falls through to the github.ref test. Asserted for
# all four cases by test/ci-sibling-ref-expression.test.js, which evaluates
# this literal expression rather than a copy of it.
#
# Matches the ref logic xchain-e2e-test's CI already uses for the same
# sibling. The indexer repo is public, so the default token reads it and
# this repo keeps holding no secrets.
#
# Only ONE sibling is checked out. The suites that read a sibling skip the
# ones that are absent, and the env-var coverage suite applies its fleet
Expand All @@ -88,7 +111,7 @@ jobs:
uses: actions/checkout@v4
with:
repository: XChain-Platform/xchain-indexer
ref: ${{ startsWith(github.head_ref, 'release/') && github.head_ref || (github.ref == 'refs/heads/master' && 'master' || 'develop') }}
ref: ${{ startsWith(github.head_ref, 'release/') && github.head_ref || ((github.base_ref == 'master' || github.ref == 'refs/heads/master') && 'master' || 'develop') }}
path: xchain-indexer

# Node 22 exactly: the platform's suites require it, and on some repos an
Expand Down
37 changes: 37 additions & 0 deletions operations/releases.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,43 @@ Each train tag is GPG-signed with the platform release key. See
[Release Signing](./release-signing.md) to verify a download, and
[Release Process](./release-process.md) for how a train is cut.

## v0.19.1

Released 2026-09-16. [Release notes and artifacts](https://github.com/XChain-Platform/xchain-node/releases/tag/v0.19.1)

A patch train. `xchain-sync` and `xchain-node` move to 0.19.1; every other
component keeps its v0.19.0 pin (or v0.17.0 for `xchain-contracts`).
`xchain-documentation` is not tagged with this train; this page is updated
directly on master.

| Component | Version |
|---|---|
| xchain-node | 0.19.1 |
| xchain-hub | 0.19.0 |
| xchain-indexer | 0.19.0 |
| xchain-sync | 0.19.1 |
| xchain-explorer | 0.19.0 |
| xchain-decoder | 0.19.0 |
| xchain-encoder | 0.19.0 |
| xchain-utxo-tracker | 0.19.0 |
| xchain-sdk | 0.19.0 |
| xchain-e2e-test | 0.19.0 |
| xchain-vm | 0.19.0 |
| xchain-contracts | 0.17.0 (unchanged) |
| xchain-regtest-miner | 0.19.0 |

Two boot-time fixes, both state-neutral. `xchain-sync` moved its database class
into `src/db/` in the code-structure pass and left the DDL directory lookup
pointed at the old location, so the service died at boot with ENOENT resolving
`src/sql/`; the lookup is restored. `xchain-node` moved its bootstrap service
into `src/services/bootstrap_service/` in the same pass and left the pinned
bootstrap signing public key path pointed at the old location, so a
signed-bootstrap restore refused as unsigned and fell back to syncing from
genesis instead of verifying; the path is restored, and the release manifest
repins `xchain-sync` to v0.19.1 alongside it. No activation height moves: the
`trainActivation` block still arms rule set 0.19.0 on testnet at Bitcoin height
152787, and mainnet stays at the sentinel.

## v0.19.0

Released 2026-09-16. [Release notes and artifacts](https://github.com/XChain-Platform/xchain-node/releases/tag/v0.19.0)
Expand Down
Loading
Loading