Skip to content

Ship aaa - #9

Merged
BetterAndBetterII merged 4 commits into
mainfrom
feat/gar-6-release-installer
Mar 6, 2026
Merged

Ship aaa#9
BetterAndBetterII merged 4 commits into
mainfrom
feat/gar-6-release-installer

Conversation

@BetterAndBetterII

@BetterAndBetterII BetterAndBetterII commented Mar 6, 2026

Copy link
Copy Markdown
Owner

Context

End users need a packaged Symphony release they can install with curl | sh, run without Elixir/Mix on the target machine, and launch from any directory with an auto-created WORKFLOW.md.

TL;DR

Ship a self-contained Symphony release with a curl installer and first-run WORKFLOW.md bootstrap.

Summary

  • Add GitHub Actions workflows that tag main, package a Linux x86_64 Mix release, and publish GitHub Release assets.
  • Add release packaging and install scripts that install the latest release into user-local bin/data directories with friendly prompts.
  • Update the CLI and embedded default workflow so symphony bootstraps WORKFLOW.md in a clean directory, then start the service.

Alternatives

  • Keep the escript-only distribution, which still requires Erlang tooling on the target host.
  • Publish manual release artifacts without automation, which leaves tagging/install drift to humans.

Test Plan

  • make -C elixir all (passes on CI / clean env; local shell needs tracker env vars unset)
  • cd elixir && env -u GITHUB_PROJECT_OWNER -u GITHUB_PROJECT_NUMBER -u GITHUB_TOKEN -u GH_TOKEN -u GITHUB_ASSIGNEE -u TRACKER_ASSIGNEE -u LINEAR_API_KEY -u LINEAR_ASSIGNEE -u LINEAR_PROJECT_SLUG mix test
  • cd elixir && MIX_ENV=prod mix release symphony --overwrite
  • OUTPUT_DIR=$(mktemp -d) ./scripts/package-release.sh Linux x86_64
  • HOME=$(mktemp -d) XDG_BIN_HOME=$HOME/bin XDG_DATA_HOME=$HOME/share SYMPHONY_RELEASE_BASE_URL=file://... ./scripts/install.sh + timeout 5 $HOME/bin/symphony
  • PATH=<mock uname bin>:$PATH ./scripts/install.sh

Summary:
- Add Section 19 covering release artifacts, curl installer, and WORKFLOW.md
  bootstrap behavior.
- Document suggested milestones and validation for shipping this profile.
- Reference the profile from the implementation checklist extensions.

Rationale:
- Clarify how to ship a "single artifact you can run" without requiring
  language toolchains on the target host.
- Provide a reviewable contract for GitHub Actions tag+release automation and
  first-run UX.

Tests:
- cd elixir && env -u GITHUB_PROJECT_OWNER -u GITHUB_PROJECT_NUMBER \
    -u GITHUB_TOKEN -u GH_TOKEN -u GITHUB_ASSIGNEE -u TRACKER_ASSIGNEE \
    -u LINEAR_API_KEY -u LINEAR_ASSIGNEE -u LINEAR_PROJECT_SLUG mix test

Co-authored-by: Codex <codex@openai.com>
@gemini-code-assist

Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a comprehensive specification for a recommended distribution and installation profile for the Symphony project. The primary goal is to significantly enhance the user experience by enabling the installation and execution of Symphony without requiring users to have specific language toolchains installed. This is achieved through defining self-contained release artifacts, a user-friendly installer script, and automated GitHub release processes, making Symphony more accessible and easier to deploy for end-users.

Highlights

  • New Distribution Profile Specification: Introduced Section 19 in SPEC.md detailing a recommended distribution and installation profile for Symphony, aiming to simplify end-user deployment by providing self-contained release artifacts and a user-level installer script.
  • Release Artifact Contract: Defined the contract for release artifacts, specifying .tar.gz format, naming conventions (-v--.tar.gz), and requiring self-contained runtime directories that include everything needed to run Symphony except specific tokens and the coding-agent executable.
  • Installer Script Contract: Outlined the requirements for a user-level installer script, including single-command execution (curl | sh), installation into user-writable directories, support for version selection, and platform/architecture detection.
  • WORKFLOW.md Bootstrap: Specified the behavior for WORKFLOW.md bootstrapping, where symphony should either use an existing WORKFLOW.md or create a default one if missing, ensuring quick starts with valid YAML front matter and environment-backed tokens.
  • GitHub Release Automation: Described the recommended automation for GitHub-hosted repositories, involving creating Git tags and GitHub Releases on main branch pushes, and uploading built release artifacts for each supported platform.
  • Implementation Milestones and Validation: Provided suggested implementation milestones and validation steps for the distribution profile, covering artifact building, installer creation, WORKFLOW.md bootstrapping, and release automation.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • SPEC.md
    • Added a new Section 19 titled "Distribution and Installation Profile (Recommended)" which details the contracts for release artifacts, installer scripts, WORKFLOW.md bootstrapping, and GitHub Release automation.
    • Updated Section 17 to include a reference to the newly defined recommended distribution profile.
Activity
  • The pull request includes a test plan, with one test (make -C elixir all) currently failing on main due to credo refactor warnings, and another test (cd elixir && env -u ... mix test) passing.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@BetterAndBetterII BetterAndBetterII added the symphony symphony automation label Mar 6, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a well-defined specification for a distribution and installer profile for Symphony. The new Section 19 in SPEC.md is comprehensive, covering release artifacts, an installer script contract, WORKFLOW.md bootstrapping, and release automation. This is a valuable addition that will significantly improve the end-user experience by providing a simple, self-contained installation method. I have one suggestion to further enhance the user-friendliness of the installer script by adding a check for the installation directory in the user's PATH.

Note: Security Review has been skipped due to the limited scope of the PR.

Comment thread SPEC.md
- `curl -fsSL <install-script-url> | sh`
- Installs into user-writable directories (no `sudo`).
- Installs an executable named `symphony` into a directory intended for user binaries.
- Recommended default: `${XDG_BIN_HOME:-$HOME/.local/bin}`

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To improve the user experience, especially for users whose systems don't have $HOME/.local/bin in their PATH by default, it would be beneficial for the installer script to check for this. The specification could recommend that the script prints a warning and provides instructions on how to add the directory to the PATH if it's not already present. This would prevent confusion when the symphony command is not found after installation.

Suggested change
- Recommended default: `${XDG_BIN_HOME:-$HOME/.local/bin}`
- Recommended default: `${XDG_BIN_HOME:-$HOME/.local/bin}`. The script SHOULD also warn the user if this directory is not in their `PATH`.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implemented in scripts/install.sh: the installer now warns when the chosen bin directory is not on PATH, so users get an actionable hint after installation.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[codex] accept: this is already implemented in scripts/install.sh; the installer now warns when the chosen bin directory is not on PATH so users get an actionable follow-up after install.

Comment thread SPEC.md
- Supports selecting a specific version via an environment variable (for example `SYMPHONY_VERSION`),
defaulting to the latest GitHub Release when unset.
- Detects platform + architecture (`uname -s`, `uname -m`) and selects the correct asset name.
- Fails with an actionable error message when the platform is unsupported or download/extract fails.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里如果失败了 要提供清晰的友好的指引

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in this implementation. The installer now fails with explicit Error: messages for unsupported platforms, missing tools, download failures, and broken payloads, and it prints a friendly success/walkthrough message after install.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[codex] accept: handled in this branch. scripts/install.sh now fails with explicit, user-facing Error: guidance for unsupported platforms, missing tools, download failures, and broken payloads.

Comment thread SPEC.md
- Optionally publish a `sha256` checksum file per release and verify downloads in the installer when
`sha256sum` is available.

### 19.3 Default WORKFLOW.md Bootstrap Contract

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

默认 的 WORKFLOW.md 创建 用一个选择与填写的 TUI 交互,用户可以填写自己的 GitHub project等,选择codex的权限。其他部分照搬现在的仓库里的WORKFLOW.md

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I kept this PR focused on the baseline requested in #6: packaged release + install script + automatic WORKFLOW.md bootstrap. The interactive TUI/bootstrap flow is a larger follow-up, so I split it into backlog issue #13 and marked it blocked by #6.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[codex] push back: I am keeping PR #9 scoped to the baseline requirement in #6 (packaged release, installer, automatic WORKFLOW.md bootstrap). The interactive bootstrap/TUI flow is tracked separately in backlog issue #13 because it expands into GitHub project discovery/creation and permissions setup.

BetterAndBetterII and others added 2 commits March 6, 2026 11:59
Summary:
- add GitHub release workflows plus packaging/install scripts for Linux
  x86_64 release artifacts
- switch the CLI to bootstrap a default WORKFLOW.md so `symphony`
  starts from an empty directory
- add release/default-workflow tests and refresh docs for packaged
  installs and source runs

Rationale:
- ship a self-contained Mix release that users can install without
  Elixir or Mix on the target machine
- make the installed `symphony` command work from any directory and
  keep the first-run setup friendly
- keep local validation green after merging the latest WORKFLOW.md
  wording from origin/main

Tests:
- cd elixir && env -u GITHUB_PROJECT_OWNER -u GITHUB_PROJECT_NUMBER -u GITHUB_TOKEN -u GH_TOKEN -u GITHUB_ASSIGNEE -u TRACKER_ASSIGNEE -u LINEAR_API_KEY -u LINEAR_ASSIGNEE -u LINEAR_PROJECT_SLUG mix test
- cd elixir && MIX_ENV=prod mix release symphony --overwrite
- OUTPUT_DIR=$(mktemp -d) ./scripts/package-release.sh Linux x86_64
- HOME=$(mktemp -d) XDG_BIN_HOME=$HOME/bin XDG_DATA_HOME=$HOME/share SYMPHONY_RELEASE_BASE_URL=file://... ./scripts/install.sh + timeout 5 $HOME/bin/symphony
- PATH=<mock uname bin>:$PATH ./scripts/install.sh

Co-authored-by: Codex <codex@openai.com>
Comment thread SPEC.md
- Use conservative defaults for sandboxing/approvals where applicable.
- Include clear inline comments or prompt text that indicates where to customize project-specific
settings (project owner/number, clone URL, etc).

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

添加一个Boostrap步骤,创建默认 Workflow.md 的时候,列出用户的所有 Poroject,支持TUI选择绑定到一个project,并且支持创建一个 Project,创建的时候直接帮用户配置好所有的必要的 status,支持用户命名这个 project。

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same follow-up as #13: project discovery/creation plus status bootstrapping is larger than the non-interactive baseline in #6, so I tracked it separately in backlog issue #13 (blocked by #6) to keep this release/install PR reviewable.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[codex] push back: same scope decision as #13. Project listing/creation plus status bootstrapping is a larger interactive workflow, so I deferred it to backlog issue #13 (blocked by #6) to keep this PR focused on the approved release/install path.

@BetterAndBetterII BetterAndBetterII changed the title Spec: distribution and installer profile Ship installable Symphony release artifacts Mar 6, 2026
Summary:
- split `parse_integer_string/2` into smaller helpers in
  `SymphonyElixir.Config`
- preserve the recursive env-reference parsing behavior while reducing
  nesting and complexity
- unblock Credo so the full `make -C elixir all` gate can pass again

Rationale:
- the release/install work needs green PR checks before moving to review
- the previous implementation tripped Credo's complexity and nesting
  rules after syncing the latest main branch

Tests:
- env -u GITHUB_PROJECT_OWNER -u GITHUB_PROJECT_NUMBER -u GITHUB_TOKEN -u GH_TOKEN -u GITHUB_ASSIGNEE -u TRACKER_ASSIGNEE -u LINEAR_API_KEY -u LINEAR_ASSIGNEE -u LINEAR_PROJECT_SLUG make -C elixir all

Co-authored-by: Codex <codex@openai.com>
@BetterAndBetterII
BetterAndBetterII marked this pull request as ready for review March 6, 2026 04:41
@BetterAndBetterII

Copy link
Copy Markdown
Owner Author

[codex] Review sweep complete on PR #9. Accepted the installer feedback already implemented on this branch, and deferred the interactive GitHub Project bootstrap/TUI expansion to backlog issue #13 to keep #6 aligned with the approved release/install scope. Commits: cb899d9, 1180020. Checks: make-all, validate-pr-description.

@BetterAndBetterII
BetterAndBetterII merged commit e981e20 into main Mar 6, 2026
4 checks passed
@BetterAndBetterII
BetterAndBetterII deleted the feat/gar-6-release-installer branch March 6, 2026 04:52
@BetterAndBetterII BetterAndBetterII changed the title Ship installable Symphony release artifacts Ship aaa Apr 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

symphony symphony automation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant