Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
c126e33
docs(v1): align reference with pilot behavior
Yakwilik Sep 23, 2026
20e96e5
docs(v1): describe pilot-only CLI configuration
Yakwilik Sep 23, 2026
39f6bfc
docs(v1): replace legacy CLI guides and quickstart
Yakwilik Sep 23, 2026
7078035
Document v1 command validation and breaking policies
Yakwilik Sep 23, 2026
5a3ba81
Document v1 vendor, ls-files, and schema-gen commands
Yakwilik Sep 23, 2026
32baf9b
Clarify local and remote multi-module support
Yakwilik Sep 23, 2026
6c598a8
Document commit-pinned multi-module dependencies
Yakwilik Sep 23, 2026
70f66b8
Document automatic untagged module resolution
Yakwilik Sep 23, 2026
78bc7fc
Clarify roots of nested protobuf modules
Yakwilik Sep 23, 2026
f120236
docs(v1): describe easyp get dependency workflow
Yakwilik Sep 23, 2026
74ff4e7
docs(v1): describe recursive config validation
Yakwilik Sep 23, 2026
7b89fed
docs(v1): document YAML expansion and MCP tool
Yakwilik Sep 24, 2026
141bd45
Document v1 plugin sources and add team overview
Yakwilik Sep 24, 2026
ff720fd
docs(v1): align migration, policy and generation guides
Yakwilik Sep 30, 2026
e99c80c
docs(migrate): describe the terminal wizard and explicit consent
Yakwilik Sep 30, 2026
73d9260
docs(v1): clarify import integrity and configuration validation
Yakwilik Sep 30, 2026
13cc0fb
docs: explain safe recovery from cache and Git access errors
Yakwilik Sep 30, 2026
62b6dd0
docs: feat(mod): isolate local replacement graphs from published locks
Yakwilik Sep 30, 2026
5635b50
docs: feat: enforce explicit frozen dependency graphs
Yakwilik Sep 30, 2026
d876ab8
docs(v1): document Go-style module major semantics
Yakwilik Sep 30, 2026
d7c4b70
docs(v1): document Buf registry metadata boundary
Yakwilik Sep 30, 2026
d26241e
docs(policy): document verified shared policy inheritance
Yakwilik Sep 30, 2026
3c92c46
docs(generate): explain exact package selection and import closure
Yakwilik Sep 30, 2026
b80ec50
docs: feat(breaking): implement descriptor-based compatibility profiles
Yakwilik Sep 30, 2026
d877969
docs: feat(mcp): describe module grammar and locked dependencies
Yakwilik Sep 30, 2026
c0578ff
docs: prepare opt-in v1 nightly and update v1 contracts
Yakwilik Oct 5, 2026
5578977
Merge main into feature/v1.0-pilot and preserve release tests
Yakwilik Oct 5, 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
2 changes: 1 addition & 1 deletion components/home/hero.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export function Hero({ version = 'vX.X.X' }: { version?: string }) {
const installOptions: InstallOption[] = [
{ id: 'brew', label: 'brew', fullLabel: 'macOS (homebrew)', cmd: 'brew install easyp-tech/tap/easyp' },
{ id: 'go', label: 'go', fullLabel: 'go Install (any OS)', cmd: 'go install github.com/easyp-tech/easyp/cmd/easyp@latest' },
{ id: 'docker', label: 'docker', fullLabel: 'docker', cmd: 'docker pull easyp/easyp:latest' },
{ id: 'docker', label: 'docker', fullLabel: 'docker', cmd: 'docker pull ghcr.io/easyp-tech/easyp:latest' },
]

const activeOption = installOptions.find((o) => o.id === installMethod) || installOptions[0]
Expand Down
192 changes: 53 additions & 139 deletions content/docs/architecture/mvs-dependency-resolution.mdx

Large diffs are not rendered by default.

194 changes: 54 additions & 140 deletions content/docs/architecture/mvs-dependency-resolution.ru.mdx

Large diffs are not rendered by default.

116 changes: 114 additions & 2 deletions content/docs/ci-cd/github-actions.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,117 @@
---
title: "Github Actions"
title: "GitHub Actions"
description: "Verify v1 dependency locks, lint schemas, compare a Git baseline, and check generated output in CI."
---

## Work in progress
Run dependency verification, linting, breaking checks, and generation as separate steps so failures identify the stage that needs attention.

## Prerequisites and Toolchain

This example assumes a root <code>protobuf.mod</code> and committed <code>protobuf.lock</code>, a root <code>easyp.yaml</code>, schemas in <code>proto</code>, and a root <code>easyp.gen.yaml</code> writing to tracked files under <code>gen</code>.

The workflow uses a prepared self-hosted Linux runner with the custom label <code>easyp-v1</code>. Assign that label only after provisioning your chosen v1-capable EasyP binary and required local plugins on <code>PATH</code>. For a hosted runner, supply your project's pinned toolchain setup before the EasyP steps. The example does not assume a particular published v1 release artifact.

Local and bundled plugins cannot use a YAML <code>version</code> pin; their versions are controlled by the installed executables and EasyP binary. Remote plugins require a separate pinned semantic <code>version</code> in <code>easyp.gen.yaml</code>.

## Pull Request Workflow

~~~yaml
name: protobuf-ci

on:
pull_request:

permissions:
contents: read

jobs:
verify:
runs-on: [self-hosted, linux, x64, easyp-v1]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Verify toolchain
run: easyp --version

- name: Verify locked dependencies
run: easyp mod download

- name: Lint schemas
run: easyp lint --path proto

- name: Check compatibility
env:
BASE_REF: ${{ github.event.pull_request.base.sha }}
run: easyp breaking --path proto --against "$BASE_REF"

- name: Generate code
run: easyp generate --project .

- name: Check committed generated files
run: |
git diff --exit-code -- gen
test -z "$(git ls-files --others --exclude-standard -- gen)"
~~~

The final step detects tracked changes and new untracked files under <code>gen</code>. Adapt the paths for your project; ignored generated files are outside this check. Also run your normal consumer tests after generation.

## Lint and Breaking Policies

A simple root <code>easyp.yaml</code> is:

~~~yaml
version: v1
linters:
default: STANDARD
breaking:
baseline: git:main
categories: [FILE]
ignore_unstable: false
ignore: [proto/experimental]
~~~

The workflow's explicit <code>--against</code> overrides this baseline with the PR base SHA. Use a ref directly, without <code>git-ref=</code> or <code>git:</code> in the flag. Branches, lightweight and annotated tags, full SHAs, and locally resolvable Git revisions are supported; the required refs and objects must exist locally. A bare branch name wins over an identically named tag.

For a release comparison, select an existing release tag explicitly:

~~~bash
easyp breaking --path proto --against refs/tags/v1.2.0
~~~

Choose the intended previous release rather than assuming tag creation order defines compatibility history. Each revision uses its own module manifests, locks, and dependencies, so a breaking check can fetch dependencies beyond those needed by the current checkout.

<code>FILE</code> is the only supported additional category. <code>ignore_unstable</code> works for the supported package suffixes. Ignore paths are relative to the policy file defining the <code>breaking</code> section: here <code>proto/experimental</code> is relative to the root policy. Nested sections replace whole sections; <code>extends</code> explicitly loads a section base from a local file or an existing locked module.

## Selecting Generation Projects

With backend and frontend generator files, use:

~~~bash
easyp generate --project ./backend --project ./frontend
~~~

Use <code>easyp generate --all</code> for explicit recursive selection. A plain <code>easyp generate</code> selects the nearest enclosing generator file. <code>--project</code> and <code>--all</code> cannot be combined.

To split generation into matrix jobs, set the matrix to project directories and pass the selected directory to <code>--project</code>. Each job needs the relevant plugins and output checks; language names alone do not select a generation configuration.

## Dependency Cache and Private Sources

Dependencies belong in <code>protobuf.mod</code>, with resolved commits and hashes in <code>protobuf.lock</code>. <code>easyp mod download</code> verifies that lock without updating it. Do dependency updates in a reviewed change before the verification job.

EasyP storage defaults to <code>~/.easyp</code> and can be relocated with <code>EASYPPATH</code>. If you cache it, include the OS, EasyP toolchain version, and relevant lockfile hashes in the cache key. A restored cache is an optimization; dependency verification still runs.

For private dependencies, provision the Git authentication required by your sources before the dependency step. Keep credentials in the runner's approved secret mechanism and out of logs. A local replacement does not eliminate downloads unless the entire dependency graph is local or already verified in cache; remote plugins still need the network. <code>tidy</code> and <code>update</code> reject active local replacements and are not read-only verification commands.

## Troubleshooting

| Symptom | Check |
| --- | --- |
| Baseline cannot be resolved | Fetch the intended ref and its objects; use full history or an explicit fetch. |
| Unknown policy field or rule | Match configuration to the installed v1 binary and supported schema. |
| Plugin is missing or output differs | Verify the executable selected from PATH and the pinned toolchain. |
| Dependency verification fails | Check the committed manifest, lock, source access, and reported hash mismatch. |
| Generated-output check fails | Regenerate with the same project selection and toolchain, review the diff, and commit intended changes. |

For diagnostics, record <code>easyp --version</code>, the failing command, and the relevant Git ref. See [breaking checks in CI](/docs/guides/breaking-checks-ci) and [build reproducibility](/docs/guides/reproducibility).
Loading
Loading