Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
ae81488
feat(yarn-plugin-release): upload yarn runtime release asset
TorinAsakura Jun 18, 2026
482aa56
feat(yarn-cli): distribute runtime through release asset
TorinAsakura Jun 18, 2026
610f586
chore(yarn-cli): rebuild bundled runtime
TorinAsakura Jun 18, 2026
f98c1fd
fix(github): materialize runtime bootstrap after release
TorinAsakura Jun 18, 2026
cf7d05a
fix(yarn-cli): embed runtime manifest in bootstrap
TorinAsakura Jun 18, 2026
a512c95
fix(yarn-cli): keep legacy runtime bootstrap path
TorinAsakura Jun 18, 2026
d459d95
fix(yarn-cli): resolve runtime asset download url
TorinAsakura Jun 18, 2026
c83d815
chore(yarn-cli): rebuild bundled runtime
TorinAsakura Jun 18, 2026
50620fb
fix(yarn-cli): launch runtime directly from bootstrap
TorinAsakura Jun 18, 2026
64be312
fix(yarn-cli): honor proxies in runtime bootstrap
TorinAsakura Jun 18, 2026
26b608b
fix(yarn-pack-utils): copy runtime cache into image payloads
TorinAsakura Jun 18, 2026
2444f85
chore(yarn-cli): rebuild bundled runtime
TorinAsakura Jun 18, 2026
d10c6dc
fix(yarn-pack-utils): fail image pack on runtime prewarm errors
TorinAsakura Jun 18, 2026
98fdc37
fix(github): run releases with built yarn runtime
TorinAsakura Jun 18, 2026
8dcdff3
fix(yarn-cli): wait for runtime download close
TorinAsakura Jun 18, 2026
02d8255
fix(github): bypass yarnPath for release runtime
TorinAsakura Jun 18, 2026
d57039e
fix(yarn-cli): embed resolved runtime asset url
TorinAsakura Jun 18, 2026
c1266b3
fix(yarn-cli): honor yarn proxy config in bootstrap
TorinAsakura Jun 18, 2026
31c4f53
fix(github): format with built yarn runtime
TorinAsakura Jun 18, 2026
0d192c7
fix(yarn-cli): keep legacy runtime self-contained
TorinAsakura Jun 18, 2026
c42c223
fix(yarn-cli): honor bootstrap CA config
TorinAsakura Jun 18, 2026
91a04cd
fix(yarn-cli): preserve legacy runtime bundle
TorinAsakura Jun 18, 2026
edb3272
fix(yarn-pack-utils): prewarm native yarn path
TorinAsakura Jun 18, 2026
1b61fbc
chore(yarn-cli): rebuild runtime bundles
TorinAsakura Jun 18, 2026
1cfa1f1
fix(yarn-cli): preserve scoped network settings
TorinAsakura Jun 18, 2026
be25d8c
fix(yarn-cli): read user network config
TorinAsakura Jun 18, 2026
3c11a32
fix(yarn-cli): honor matching network settings
TorinAsakura Jun 18, 2026
ff86bb4
fix(yarn-plugin-release): verify existing runtime assets
TorinAsakura Jun 18, 2026
fc7c955
fix(yarn-cli): strip yarn network comments
TorinAsakura Jun 18, 2026
8c64df8
fix(yarn-cli): expand yarn network placeholders
TorinAsakura Jun 18, 2026
0a153b4
chore(yarn-cli): rebuild bundled runtime
TorinAsakura Jun 18, 2026
5aded94
fix(yarn-cli): refresh legacy runtime bundle
TorinAsakura Jun 18, 2026
b33cdbe
fix(yarn-cli): expand yarn fallback placeholders
TorinAsakura Jun 18, 2026
ee7993d
fix(yarn-cli): honor yarn CA env override
TorinAsakura Jun 18, 2026
7788324
fix(yarn-cli): accept yaml network indentation
TorinAsakura Jun 18, 2026
4729358
fix(yarn-cli): move runtime update behind yarn
TorinAsakura Jun 18, 2026
690b969
chore(yarn-cli): rebuild runtime bundles
TorinAsakura Jun 18, 2026
0ea11ea
fix(yarn-cli): remove raw runtime artifact
TorinAsakura Jun 18, 2026
eb020f6
fix(yarn-cli): use yarn in release actions
TorinAsakura Jun 18, 2026
eaa3abc
fix(yarn-cli): keep managed actions out of raijin pr
TorinAsakura Jun 18, 2026
213105d
Merge remote-tracking branch 'origin/master' into feat/release-asset-…
TorinAsakura Jun 18, 2026
7a9b7de
fix(yarn-plugin-essentials): install runtime asset as mjs
TorinAsakura Jun 18, 2026
49be751
Merge remote-tracking branch 'origin/master' into feat/release-asset-…
TorinAsakura Jun 18, 2026
cef6a6e
fix(yarn-plugin-release): materialize runtime manifest during release
TorinAsakura Jun 18, 2026
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
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,11 @@ node_modules
# This is the Yarn install state cache, it can be rebuilt anytime
/.yarn/install-state.gz
/.yarn/sdks
/.yarn/raijin

dist/
!yarn/cli/dist
!yarn/cli/dist/
yarn/cli/dist/*
Comment thread
TorinAsakura marked this conversation as resolved.
yarn/plugin-*/bundles/
!yarn/plugin-badges/bundles/
!yarn/plugin-badges/bundles/**
Expand Down
1,719 changes: 860 additions & 859 deletions .yarn/releases/yarn.mjs

Large diffs are not rendered by default.

7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,14 @@ Raijin — это подход к работе в едином инженерн
### Новый проект

```bash
yarn set version https://raw.githubusercontent.com/atls/raijin/master/yarn/cli/dist/yarn.mjs
yarn set version https://raw.githubusercontent.com/atls/raijin/master/.yarn/releases/yarn.mjs
yarn set version atls
```

Ожидаемый результат:

- В проекте появляется/обновляется `.yarn/releases/yarn.mjs`
- В проекте появляется/обновляется полный файл первичного подключения `.yarn/releases/yarn.mjs`
- `yarn set version atls` обновляет бандл через вложение релиза GitHub штатным механизмом Yarn
- Команды `raijin` становятся доступны через `yarn`

### Обновление
Expand All @@ -53,7 +54,7 @@ yarn set version atls

Ожидаемый результат:

- Подтягивается актуальная версия бандла
- Бандл обновляется до последней доступной версии штатным механизмом Yarn

### Проверка

Expand Down
7 changes: 4 additions & 3 deletions README_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,14 @@ It aligns teams on strict standards and strong contracts to increase delivery pr
### New project

```bash
yarn set version https://raw.githubusercontent.com/atls/raijin/master/yarn/cli/dist/yarn.mjs
yarn set version https://raw.githubusercontent.com/atls/raijin/master/.yarn/releases/yarn.mjs
yarn set version atls
```

Expected result:

- `.yarn/releases/yarn.mjs` is added or updated in the project
- A full initial `.yarn/releases/yarn.mjs` entry file is added or updated
- `yarn set version atls` updates the bundle from a GitHub Release asset through Yarn
- Raijin commands are available via `yarn`

### Upgrade
Expand All @@ -53,7 +54,7 @@ yarn set version atls

Expected result:

- The latest bundle version is installed
- The bundle is upgraded to the latest available version through Yarn

### Verify

Expand Down
84 changes: 82 additions & 2 deletions code/code-github/src/release.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,35 @@ interface CreateOptions {
repo: string
}

interface GitHubRelease {
id: number
assets: Array<{
browser_download_url: string
name: string
}>
}

interface GetByTagOptions {
owner: string
repo: string
tag_name: string
}

interface UploadAssetOptions {
content_type: string
data: string
name: string
owner: string
size: number
release_id: number
repo: string
}

interface GitHubReleaseAsset {
browser_download_url: string
name: string
}

interface GenerateNotesOptions {
tag_name: string
target_commitish?: string
Expand All @@ -34,7 +63,7 @@ export class Release {
})
}

async create(options: CreateOptions): Promise<number> {
async create(options: CreateOptions): Promise<GitHubRelease> {
const {
owner,
repo,
Expand All @@ -57,7 +86,58 @@ export class Release {
body,
})

return result.status
return {
id: result.data.id,
assets: result.data.assets.map((asset) => ({
browser_download_url: asset.browser_download_url,
name: asset.name,
})),
}
}

async getByTag(options: GetByTagOptions): Promise<GitHubRelease> {
const { owner, repo, tag_name: tagName } = options
const result = await this.client.repos.getReleaseByTag({
owner,
repo,
tag: tagName,
})

return {
id: result.data.id,
assets: result.data.assets.map((asset) => ({
browser_download_url: asset.browser_download_url,
name: asset.name,
})),
}
}

async uploadAsset(options: UploadAssetOptions): Promise<GitHubReleaseAsset> {
const {
owner,
repo,
release_id: releaseId,
name,
data,
size,
content_type: contentType,
} = options
const result = await this.client.repos.uploadReleaseAsset({
owner,
repo,
release_id: releaseId,
name,
data,
headers: {
'content-length': size,
'content-type': contentType,
},
})

return {
browser_download_url: result.data.browser_download_url,
name: result.data.name,
}
}

async generateNotes(options: GenerateNotesOptions): Promise<string> {
Expand Down
5 changes: 3 additions & 2 deletions docs/raijin/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,14 @@ Expected result:
## 2. New project: install the bundle

```bash
yarn set version https://raw.githubusercontent.com/atls/raijin/master/yarn/cli/dist/yarn.mjs
yarn set version https://raw.githubusercontent.com/atls/raijin/master/.yarn/releases/yarn.mjs
yarn set version atls
```

Expected result:

- `.yarn/releases/` contains the current Raijin `yarn.mjs`
- `.yarn/releases/yarn.mjs` contains the full initial Raijin entry file
- `yarn set version atls` updates the bundle from a GitHub Release asset through Yarn
- Bundle commands (`check`, `files changed list`, etc.) become available

<!-- sync:bundle-upgrade -->
Expand Down
5 changes: 3 additions & 2 deletions docs/raijin/quickstart.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,14 @@
## 2. Новый проект: подключение бандла

```bash
yarn set version https://raw.githubusercontent.com/atls/raijin/master/yarn/cli/dist/yarn.mjs
yarn set version https://raw.githubusercontent.com/atls/raijin/master/.yarn/releases/yarn.mjs
yarn set version atls
```

Ожидаемый результат:

- В `.yarn/releases/` появляется актуальный `yarn.mjs` из Raijin
- В `.yarn/releases/yarn.mjs` появляется полный файл первичного подключения Raijin
- `yarn set version atls` обновляет бандл через вложение релиза GitHub штатным механизмом Yarn
- Команды из бандла (`check`, `files changed list` и другие) становятся доступны

<!-- sync:bundle-upgrade -->
Expand Down
22 changes: 15 additions & 7 deletions scripts/raijin/generate-artifacts.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -339,14 +339,17 @@ const renderRootReadme = (language) => {
isRu ? '### Новый проект' : '### New project',
'',
'```bash',
'yarn set version https://raw.githubusercontent.com/atls/raijin/master/yarn/cli/dist/yarn.mjs',
'yarn set version https://raw.githubusercontent.com/atls/raijin/master/.yarn/releases/yarn.mjs',
'yarn set version atls',
'```',
'',
isRu ? 'Ожидаемый результат:' : 'Expected result:',
isRu
? '- В проекте появляется/обновляется `.yarn/releases/yarn.mjs`'
: '- `.yarn/releases/yarn.mjs` is added or updated in the project',
? '- В проекте появляется/обновляется полный файл первичного подключения `.yarn/releases/yarn.mjs`'
: '- A full initial `.yarn/releases/yarn.mjs` entry file is added or updated',
isRu
? '- `yarn set version atls` обновляет бандл через вложение релиза GitHub штатным механизмом Yarn'
: '- `yarn set version atls` updates the bundle from a GitHub Release asset through Yarn',
isRu
? '- Команды `raijin` становятся доступны через `yarn`'
: '- Raijin commands are available via `yarn`',
Expand All @@ -358,7 +361,9 @@ const renderRootReadme = (language) => {
'```',
'',
isRu ? 'Ожидаемый результат:' : 'Expected result:',
isRu ? '- Подтягивается актуальная версия бандла' : '- The latest bundle version is installed',
isRu
? '- Бандл обновляется до последней доступной версии штатным механизмом Yarn'
: '- The bundle is upgraded to the latest available version through Yarn',
'',
isRu ? '### Проверка' : '### Verify',
'',
Expand Down Expand Up @@ -565,14 +570,17 @@ const renderQuickstart = (language) => {
isRu ? '## 2. Новый проект: подключение бандла' : '## 2. New project: install the bundle',
'',
'```bash',
'yarn set version https://raw.githubusercontent.com/atls/raijin/master/yarn/cli/dist/yarn.mjs',
'yarn set version https://raw.githubusercontent.com/atls/raijin/master/.yarn/releases/yarn.mjs',
'yarn set version atls',
'```',
'',
isRu ? 'Ожидаемый результат:' : 'Expected result:',
isRu
? '- В `.yarn/releases/` появляется актуальный `yarn.mjs` из Raijin'
: '- `.yarn/releases/` contains the current Raijin `yarn.mjs`',
? '- В `.yarn/releases/yarn.mjs` появляется полный файл первичного подключения Raijin'
: '- `.yarn/releases/yarn.mjs` contains the full initial Raijin entry file',
isRu
? '- `yarn set version atls` обновляет бандл через вложение релиза GitHub штатным механизмом Yarn'
: '- `yarn set version atls` updates the bundle from a GitHub Release asset through Yarn',
isRu
? '- Команды из бандла (`check`, `files changed list` и другие) становятся доступны'
: '- Bundle commands (`check`, `files changed list`, etc.) become available',
Expand Down
3,863 changes: 0 additions & 3,863 deletions yarn/cli/dist/yarn.mjs

This file was deleted.

4 changes: 2 additions & 2 deletions yarn/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
"scripts": {
"build": "yarn run build:schemaic && yarn run build:clean && yarn run build:version && yarn run build:bundle && yarn run build:fix && yarn run build:dist && yarn run build:version",
"build:bundle": "builder build bundle --no-git-hash && mv bundles/yarn.js bundles/yarn.mjs",
"build:clean": "rm -rf dist",
"build:dist": "mv bundles dist",
"build:clean": "rm -rf dist/runtime",
"build:dist": "mkdir -p dist/runtime && mv bundles/yarn.mjs dist/runtime/yarn.mjs",
Comment thread
TorinAsakura marked this conversation as resolved.
Comment thread
TorinAsakura marked this conversation as resolved.
"build:fix": "yarn node patches/cli.patch.mjs",
"build:schemaic": "yarn workspace @atls/code-schematics prepack",
"build:version": "yarn node patches/version-postfix-toggle.mjs",
Expand Down
74 changes: 74 additions & 0 deletions yarn/pack-utils/src/pack.utils.test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
import type { Project } from '@yarnpkg/core'
import type { Report } from '@yarnpkg/core'

import assert from 'node:assert/strict'
import { mkdir } from 'node:fs/promises'
import { writeFile } from 'node:fs/promises'
import { arch } from 'node:os'
import test from 'node:test'

import { npath } from '@yarnpkg/fslib'
import { ppath } from '@yarnpkg/fslib'
import { xfs } from '@yarnpkg/fslib'

import { IMAGE_PACK_NODE_LINKER } from './pack.utils.js'
import { copyYarnRelease } from './copy.utils.js'
import { resolveSupportedArchitectures } from './pack.utils.js'

test('should materialize image pack runtime with PnP linker', () => {
Expand Down Expand Up @@ -41,3 +51,67 @@ test('should normalize Docker platform aliases before Yarn install', () => {
])
)
})

test('should copy yarn release without runtime cache side effects', async () => {
await xfs.mktempPromise(async (source) => {
await xfs.mktempPromise(async (destination) => {
const yarnPath = ppath.join(source, '.yarn/releases/yarn.mjs')
const yarnNativePath = npath.fromPortablePath(yarnPath)

await mkdir(npath.dirname(yarnNativePath), { recursive: true })
await writeFile(yarnNativePath, '#!/usr/bin/env node\n', { mode: 0o755 })

await copyYarnRelease(
{
cwd: source,
configuration: {
get: (name: string) => (name === 'yarnPath' ? yarnPath : undefined),
},
} as unknown as Project,
destination,
{ reportInfo: () => undefined } as unknown as Report
)

assert.equal(
await xfs.existsPromise(ppath.join(destination, '.yarn/releases/yarn.mjs')),
true
)
})
})
})

test('should copy yarn release from native yarn path', async (context) => {
await xfs.mktempPromise(async (source) => {
await xfs.mktempPromise(async (destination) => {
const yarnPath = ppath.join(source, '.yarn/releases/yarn.mjs')
const yarnNativePath = npath.fromPortablePath(yarnPath)

await mkdir(npath.dirname(yarnNativePath), { recursive: true })
await writeFile(yarnNativePath, '#!/usr/bin/env node\n', { mode: 0o755 })

context.mock.method(npath, 'fromPortablePath', (path: string) => {
if (path === yarnPath) {
return yarnNativePath
}

return path
})

await copyYarnRelease(
{
cwd: source,
configuration: {
get: (name: string) => (name === 'yarnPath' ? yarnPath : undefined),
},
} as unknown as Project,
destination,
{ reportInfo: () => undefined } as unknown as Report
)

assert.equal(
await xfs.existsPromise(ppath.join(destination, '.yarn/releases/yarn.mjs')),
true
)
})
})
})
Loading
Loading