forked from 1b-agent/fieldcraft-upstream
repo: move to github.com/tangency-labs/fieldcraft (URLs, updater, Pages)
The updater's release endpoint, docs, README, release notes and the Pages URL point at the tangency-labs org. App IDs (io.github.jyviko.fieldcraft) stay unchanged so installed copies keep their identity and settings. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
1 parent
b74d15e44d
commit
a079e51f9d
18 files changed
+55
-55
No files matched your search
@@ -1,9 +1,9 @@
|
|||||||
FieldCraft is open-source CAE pre-processing in Rust: it turns geometry into analysis-ready
|
FieldCraft is open-source CAE pre-processing in Rust: it turns geometry into analysis-ready
|
||||||
finite element models, writes Abaqus, Nastran and LS-DYNA decks, and solves linear static and
|
finite element models, writes Abaqus, Nastran and LS-DYNA decks, and solves linear static and
|
||||||
modal problems with its own solver. AI agents can drive it over MCP (`fieldcraft-cli mcp`).
|
modal problems with its own solver. AI agents can drive it over MCP (`fieldcraft-cli mcp`).
|
||||||
[README](https://github.com/jyviko/fieldcraft#readme) ·
|
[README](https://github.com/tangency-labs/fieldcraft#readme) ·
|
||||||
[roadmap](https://github.com/jyviko/fieldcraft/blob/main/ROADMAP.md) ·
|
[roadmap](https://github.com/tangency-labs/fieldcraft/blob/main/ROADMAP.md) ·
|
||||||
[issues](https://github.com/jyviko/fieldcraft/issues)
|
[issues](https://github.com/tangency-labs/fieldcraft/issues)
|
||||||
|
|
||||||
**Which file?**
|
**Which file?**
|
||||||
- **macOS 11+** (Apple silicon and Intel): open `fieldcraft-{version}-macos-universal.dmg` and
|
- **macOS 11+** (Apple silicon and Intel): open `fieldcraft-{version}-macos-universal.dmg` and
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# The web app (apps/fieldcraft-web, docs/web.md) on GitHub Pages: https://jyviko.github.io/fieldcraft/
|
# The web app (apps/fieldcraft-web, docs/web.md) on GitHub Pages: https://tangency-labs.github.io/fieldcraft/
|
||||||
# After SolidCraft's pages.yml (MIT OR Apache-2.0; see ATTRIBUTION.md).
|
# After SolidCraft's pages.yml (MIT OR Apache-2.0; see ATTRIBUTION.md).
|
||||||
#
|
#
|
||||||
# A push to `main` (a release; main holds released code only) builds the app with Trunk (release,
|
# A push to `main` (a release; main holds released code only) builds the app with Trunk (release,
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ People trust FieldCraft with their models; a crash loses their work. **This outr
|
|||||||
heavy tests, nightly, before every release and on demand (`gh workflow run CI --ref <branch>`). Hostile-input tests run commands on sessions with small
|
heavy tests, nightly, before every release and on demand (`gh workflow run CI --ref <branch>`). Hostile-input tests run commands on sessions with small
|
||||||
work caps (`Session::limits`) so refusals are instant; never lower the production caps for a
|
work caps (`Session::limits`) so refusals are instant; never lower the production caps for a
|
||||||
test.
|
test.
|
||||||
- **Publishing**: `origin` is github.com/jyviko/fieldcraft. Changes land through pull requests
|
- **Publishing**: `origin` is github.com/tangency-labs/fieldcraft. Changes land through pull requests
|
||||||
as the workflow above describes; the coordinator reads every merged diff and sends findings
|
as the workflow above describes; the coordinator reads every merged diff and sends findings
|
||||||
back as fix-forward work. Never force-push `develop` or `main`; `main` holds released code and moves only by
|
back as fix-forward work. Never force-push `develop` or `main`; `main` holds released code and moves only by
|
||||||
fast-forward at a release (docs/releasing.md). Never commit `plan/`, `.agent-files/`,
|
fast-forward at a release (docs/releasing.md). Never commit `plan/`, `.agent-files/`,
|
||||||
|
|||||||
+17
-17
@@ -15,7 +15,7 @@ needed most, and how to claim work. The rules every change follows, by a person
|
|||||||
You need stable Rust 1.95 or newer.
|
You need stable Rust 1.95 or newer.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone https://github.com/jyviko/fieldcraft && cd fieldcraft
|
git clone https://github.com/tangency-labs/fieldcraft && cd fieldcraft
|
||||||
cargo run --release -p fieldcraft -- --sample cantilever # the desktop app on a sample model
|
cargo run --release -p fieldcraft -- --sample cantilever # the desktop app on a sample model
|
||||||
cargo run -p fieldcraft-cli -- commands # every command and its parameters
|
cargo run -p fieldcraft-cli -- commands # every command and its parameters
|
||||||
cargo test -p fieldcraft-solver # the tests of one crate
|
cargo test -p fieldcraft-solver # the tests of one crate
|
||||||
@@ -28,32 +28,32 @@ cargo xtask oracle --quick # the verification ca
|
|||||||
|
|
||||||
## Where help is wanted most
|
## Where help is wanted most
|
||||||
|
|
||||||
See the [`help wanted`](https://github.com/jyviko/fieldcraft/labels/help%20wanted) and
|
See the [`help wanted`](https://github.com/tangency-labs/fieldcraft/labels/help%20wanted) and
|
||||||
[`good first issue`](https://github.com/jyviko/fieldcraft/labels/good%20first%20issue) labels, and
|
[`good first issue`](https://github.com/tangency-labs/fieldcraft/labels/good%20first%20issue) labels, and
|
||||||
the `area:` labels for your field. In order of how much they would help users:
|
the `area:` labels for your field. In order of how much they would help users:
|
||||||
|
|
||||||
1. **Reproducible meshes** ([#115](https://github.com/jyviko/fieldcraft/issues/115)). The same part
|
1. **Reproducible meshes** ([#115](https://github.com/tangency-labs/fieldcraft/issues/115)). The same part
|
||||||
must give the same tet mesh on every platform and every run, as the solvers already do.
|
must give the same tet mesh on every platform and every run, as the solvers already do.
|
||||||
2. **All-hex meshing of thin and curved parts** ([#85](https://github.com/jyviko/fieldcraft/issues/85)).
|
2. **All-hex meshing of thin and curved parts** ([#85](https://github.com/tangency-labs/fieldcraft/issues/85)).
|
||||||
The octree mesher over-refines thin walls; concave transition templates and an up-front depth
|
The octree mesher over-refines thin walls; concave transition templates and an up-front depth
|
||||||
are next. Hex meshing is the centre of gravity of the project.
|
are next. Hex meshing is the centre of gravity of the project.
|
||||||
3. **Getting results in and out**: ParaView export ([#90](https://github.com/jyviko/fieldcraft/issues/90)),
|
3. **Getting results in and out**: ParaView export ([#90](https://github.com/tangency-labs/fieldcraft/issues/90)),
|
||||||
Gmsh import ([#91](https://github.com/jyviko/fieldcraft/issues/91)), Abaqus deck reading
|
Gmsh import ([#91](https://github.com/tangency-labs/fieldcraft/issues/91)), Abaqus deck reading
|
||||||
([#98](https://github.com/jyviko/fieldcraft/issues/98)), CSV and STL
|
([#98](https://github.com/tangency-labs/fieldcraft/issues/98)), CSV and STL
|
||||||
([#92](https://github.com/jyviko/fieldcraft/issues/92), [#93](https://github.com/jyviko/fieldcraft/issues/93)).
|
([#92](https://github.com/tangency-labs/fieldcraft/issues/92), [#93](https://github.com/tangency-labs/fieldcraft/issues/93)).
|
||||||
4. **Verification benchmarks** ([#97](https://github.com/jyviko/fieldcraft/issues/97),
|
4. **Verification benchmarks** ([#97](https://github.com/tangency-labs/fieldcraft/issues/97),
|
||||||
[#106](https://github.com/jyviko/fieldcraft/issues/106)). An engineer with a published benchmark
|
[#106](https://github.com/tangency-labs/fieldcraft/issues/106)). An engineer with a published benchmark
|
||||||
can add it as an oracle case without touching solver code.
|
can add it as an oracle case without touching solver code.
|
||||||
5. **Nonlinear elements and materials**: incompatible modes at finite strain
|
5. **Nonlinear elements and materials**: incompatible modes at finite strain
|
||||||
([#82](https://github.com/jyviko/fieldcraft/issues/82)), kinematic hardening
|
([#82](https://github.com/tangency-labs/fieldcraft/issues/82)), kinematic hardening
|
||||||
([#81](https://github.com/jyviko/fieldcraft/issues/81)), and the material library
|
([#81](https://github.com/tangency-labs/fieldcraft/issues/81)), and the material library
|
||||||
([#99](https://github.com/jyviko/fieldcraft/issues/99)).
|
([#99](https://github.com/tangency-labs/fieldcraft/issues/99)).
|
||||||
6. **The app**: typed command forms ([#112](https://github.com/jyviko/fieldcraft/issues/112)), XY and
|
6. **The app**: typed command forms ([#112](https://github.com/tangency-labs/fieldcraft/issues/112)), XY and
|
||||||
path plots ([#94](https://github.com/jyviko/fieldcraft/issues/94), [#95](https://github.com/jyviko/fieldcraft/issues/95)).
|
path plots ([#94](https://github.com/tangency-labs/fieldcraft/issues/94), [#95](https://github.com/tangency-labs/fieldcraft/issues/95)).
|
||||||
|
|
||||||
Bigger areas on the [roadmap](ROADMAP.md) — contact, dynamics, composites, coupled fields, wave
|
Bigger areas on the [roadmap](ROADMAP.md) — contact, dynamics, composites, coupled fields, wave
|
||||||
propagation, turbulence — are open to anyone who wants to own one: start a thread in
|
propagation, turbulence — are open to anyone who wants to own one: start a thread in
|
||||||
[Discussions](https://github.com/jyviko/fieldcraft/discussions).
|
[Discussions](https://github.com/tangency-labs/fieldcraft/discussions).
|
||||||
|
|
||||||
## Before you start: claim an issue
|
## Before you start: claim an issue
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ edition = "2024"
|
|||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
rust-version = "1.95"
|
rust-version = "1.95"
|
||||||
authors = ["FieldCraft contributors"]
|
authors = ["FieldCraft contributors"]
|
||||||
repository = "https://github.com/jyviko/fieldcraft"
|
repository = "https://github.com/tangency-labs/fieldcraft"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
# internal
|
# internal
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ see the results — with a nonlinear implicit solver (large deformation, plastic
|
|||||||
in place. Hex meshing is the centre of gravity. Next: buckling and arc-length, contact, then
|
in place. Hex meshing is the centre of gravity. Next: buckling and arc-length, contact, then
|
||||||
the wider material and multiphysics library. See [ROADMAP.md](ROADMAP.md).
|
the wider material and multiphysics library. See [ROADMAP.md](ROADMAP.md).
|
||||||
**Want to help?** Pick an issue labelled
|
**Want to help?** Pick an issue labelled
|
||||||
[good first issue](https://github.com/jyviko/fieldcraft/labels/good%20first%20issue) or
|
[good first issue](https://github.com/tangency-labs/fieldcraft/labels/good%20first%20issue) or
|
||||||
[help wanted](https://github.com/jyviko/fieldcraft/labels/help%20wanted) and read
|
[help wanted](https://github.com/tangency-labs/fieldcraft/labels/help%20wanted) and read
|
||||||
[CONTRIBUTING.md](CONTRIBUTING.md).
|
[CONTRIBUTING.md](CONTRIBUTING.md).
|
||||||
|
|
||||||

|

|
||||||
@@ -28,15 +28,15 @@ theory with shear 0.177 mm).
|
|||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
[](https://github.com/jyviko/fieldcraft/releases/latest)
|
[](https://github.com/tangency-labs/fieldcraft/releases/latest)
|
||||||
[](https://github.com/jyviko/fieldcraft/releases/latest)
|
[](https://github.com/tangency-labs/fieldcraft/releases/latest)
|
||||||
[](https://github.com/jyviko/fieldcraft/releases/latest)
|
[](https://github.com/tangency-labs/fieldcraft/releases/latest)
|
||||||
[](https://jyviko.github.io/fieldcraft/)
|
[](https://tangency-labs.github.io/fieldcraft/)
|
||||||
|
|
||||||
- **macOS:** open the `.dmg` and drag FieldCraft into Applications (Apple silicon and Intel).
|
- **macOS:** open the `.dmg` and drag FieldCraft into Applications (Apple silicon and Intel).
|
||||||
- **Windows:** unzip and run `fieldcraft.exe`.
|
- **Windows:** unzip and run `fieldcraft.exe`.
|
||||||
- **Linux:** the `.AppImage` (allow it to run as a program), or the `.tar.gz`.
|
- **Linux:** the `.AppImage` (allow it to run as a program), or the `.tar.gz`.
|
||||||
- **Browser:** [try it at jyviko.github.io/fieldcraft](https://jyviko.github.io/fieldcraft/), no install.
|
- **Browser:** [try it at tangency-labs.github.io/fieldcraft](https://tangency-labs.github.io/fieldcraft/), no install.
|
||||||
- **Command line:** `fieldcraft-cli` ships in every package; AI agents connect to it over MCP
|
- **Command line:** `fieldcraft-cli` ships in every package; AI agents connect to it over MCP
|
||||||
([docs/mcp.md](docs/mcp.md)).
|
([docs/mcp.md](docs/mcp.md)).
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
FieldCraft is young; only `main` and the latest release get fixes.
|
FieldCraft is young; only `main` and the latest release get fixes.
|
||||||
|
|
||||||
Please **don't open a public issue** for a security problem. Report it privately through the
|
Please **don't open a public issue** for a security problem. Report it privately through the
|
||||||
repository's [Security tab](https://github.com/jyviko/fieldcraft/security/advisories/new) with
|
repository's [Security tab](https://github.com/tangency-labs/fieldcraft/security/advisories/new) with
|
||||||
what you found, how to reproduce it (a model, deck or script), the version and platform, and the
|
what you found, how to reproduce it (a model, deck or script), the version and platform, and the
|
||||||
impact you expect.
|
impact you expect.
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ fn cli(host: &str, args: &[&str]) -> std::process::Output {
|
|||||||
#[test]
|
#[test]
|
||||||
fn update_check_reports_the_latest_release() {
|
fn update_check_reports_the_latest_release() {
|
||||||
let server = Server::start().unwrap();
|
let server = Server::start().unwrap();
|
||||||
server.release("latest", &json!({"tag_name": "v99.0.0", "html_url": "https://github.com/jyviko/fieldcraft/releases/tag/v99.0.0", "assets": []}));
|
server.release("latest", &json!({"tag_name": "v99.0.0", "html_url": "https://github.com/tangency-labs/fieldcraft/releases/tag/v99.0.0", "assets": []}));
|
||||||
let out = cli(&server.url(), &["update", "--check"]);
|
let out = cli(&server.url(), &["update", "--check"]);
|
||||||
assert!(out.status.success(), "{out:?}");
|
assert!(out.status.success(), "{out:?}");
|
||||||
let report: Value = serde_json::from_slice(&out.stdout).unwrap();
|
let report: Value = serde_json::from_slice(&out.stdout).unwrap();
|
||||||
|
|||||||
@@ -9,15 +9,15 @@
|
|||||||
<meta property="og:site_name" content="FieldCraft">
|
<meta property="og:site_name" content="FieldCraft">
|
||||||
<meta property="og:title" content="FieldCraft">
|
<meta property="og:title" content="FieldCraft">
|
||||||
<meta property="og:description" content="Open-source CAE built in Rust: structures, heat, fluids, and MCP for AI agents.">
|
<meta property="og:description" content="Open-source CAE built in Rust: structures, heat, fluids, and MCP for AI agents.">
|
||||||
<meta property="og:url" content="https://jyviko.github.io/fieldcraft/">
|
<meta property="og:url" content="https://tangency-labs.github.io/fieldcraft/">
|
||||||
<meta property="og:image" content="https://jyviko.github.io/fieldcraft/og.png">
|
<meta property="og:image" content="https://tangency-labs.github.io/fieldcraft/og.png">
|
||||||
<meta property="og:image:width" content="1280">
|
<meta property="og:image:width" content="1280">
|
||||||
<meta property="og:image:height" content="640">
|
<meta property="og:image:height" content="640">
|
||||||
<meta property="og:image:alt" content="FieldCraft: Open-source CAE built in Rust">
|
<meta property="og:image:alt" content="FieldCraft: Open-source CAE built in Rust">
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<meta name="twitter:title" content="FieldCraft">
|
<meta name="twitter:title" content="FieldCraft">
|
||||||
<meta name="twitter:description" content="Open-source CAE built in Rust: structures, heat, fluids, and MCP for AI agents.">
|
<meta name="twitter:description" content="Open-source CAE built in Rust: structures, heat, fluids, and MCP for AI agents.">
|
||||||
<meta name="twitter:image" content="https://jyviko.github.io/fieldcraft/og.png">
|
<meta name="twitter:image" content="https://tangency-labs.github.io/fieldcraft/og.png">
|
||||||
<link data-trunk rel="rust" data-bin="fieldcraft-web" data-wasm-opt="z" data-weak-refs />
|
<link data-trunk rel="rust" data-bin="fieldcraft-web" data-wasm-opt="z" data-weak-refs />
|
||||||
<link data-trunk rel="icon" type="image/svg+xml" href="../../assets/app-icon/icon-small.svg" />
|
<link data-trunk rel="icon" type="image/svg+xml" href="../../assets/app-icon/icon-small.svg" />
|
||||||
<link data-trunk rel="copy-file" href="../../assets/app-icon/icon.iconset/[email protected]" data-target-path="icons" />
|
<link data-trunk rel="copy-file" href="../../assets/app-icon/icon.iconset/[email protected]" data-target-path="icons" />
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ assets = [
|
|||||||
[package.metadata.generate-rpm]
|
[package.metadata.generate-rpm]
|
||||||
name = "fieldcraft"
|
name = "fieldcraft"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
url = "https://github.com/jyviko/fieldcraft"
|
url = "https://github.com/tangency-labs/fieldcraft"
|
||||||
assets = [
|
assets = [
|
||||||
{ source = "target/release/fieldcraft", dest = "/usr/bin/fieldcraft", mode = "755" },
|
{ source = "target/release/fieldcraft", dest = "/usr/bin/fieldcraft", mode = "755" },
|
||||||
{ source = "target/release/fieldcraft-cli", dest = "/usr/bin/fieldcraft-cli", mode = "755" },
|
{ source = "target/release/fieldcraft-cli", dest = "/usr/bin/fieldcraft-cli", mode = "755" },
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ use serde_json::{Value, json};
|
|||||||
use crate::crash::without_home;
|
use crate::crash::without_home;
|
||||||
|
|
||||||
/// The issue form.
|
/// The issue form.
|
||||||
pub const ISSUE_URL: &str = "https://github.com/jyviko/fieldcraft/issues/new";
|
pub const ISSUE_URL: &str = "https://github.com/tangency-labs/fieldcraft/issues/new";
|
||||||
/// The longest link a draft opens: GitHub refuses new-issue links much past 8 KB.
|
/// The longest link a draft opens: GitHub refuses new-issue links much past 8 KB.
|
||||||
pub const MAX_URL: usize = 7000;
|
pub const MAX_URL: usize = 7000;
|
||||||
/// The session file a draft attaches.
|
/// The session file a draft attaches.
|
||||||
@@ -329,7 +329,7 @@ mod tests {
|
|||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let d = draft(&input, "v1.2.3, testos x");
|
let d = draft(&input, "v1.2.3, testos x");
|
||||||
assert!(d.url.starts_with("https://github.com/jyviko/fieldcraft/issues/new?template=bug.yml&title="), "{}", d.url);
|
assert!(d.url.starts_with("https://github.com/tangency-labs/fieldcraft/issues/new?template=bug.yml&title="), "{}", d.url);
|
||||||
assert!(d.attachments.is_empty() && d.clipboard.is_none(), "nothing attached without Share my session");
|
assert!(d.attachments.is_empty() && d.clipboard.is_none(), "nothing attached without Share my session");
|
||||||
let all = format!("{} {:?} {}", d.title, d.fields, decode(&d.url));
|
let all = format!("{} {:?} {}", d.title, d.fields, decode(&d.url));
|
||||||
assert!(!all.contains(&home()), "no home folder: {all}");
|
assert!(!all.contains(&home()), "no home folder: {all}");
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ use crate::ModelApp;
|
|||||||
use crate::files::Prompt;
|
use crate::files::Prompt;
|
||||||
|
|
||||||
/// What is sent, event by event.
|
/// What is sent, event by event.
|
||||||
pub const PRIVACY_URL: &str = "https://github.com/jyviko/fieldcraft/blob/main/docs/privacy.md";
|
pub const PRIVACY_URL: &str = "https://github.com/tangency-labs/fieldcraft/blob/main/docs/privacy.md";
|
||||||
/// The question, as the first run asks it.
|
/// The question, as the first run asks it.
|
||||||
pub const QUESTION: &str = "Help improve FieldCraft by sharing anonymous usage: which tools you use, nothing from your models.";
|
pub const QUESTION: &str = "Help improve FieldCraft by sharing anonymous usage: which tools you use, nothing from your models.";
|
||||||
const DETAIL: &str = "Counted: the commands you run (their names, how long they took, whether they failed), the steps from a design to results, \
|
const DETAIL: &str = "Counted: the commands you run (their names, how long they took, whether they failed), the steps from a design to results, \
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ pub use release::{Asset, Check, Release};
|
|||||||
pub use version::Version;
|
pub use version::Version;
|
||||||
|
|
||||||
/// The repository releases come from.
|
/// The repository releases come from.
|
||||||
pub const REPO: &str = "jyviko/fieldcraft";
|
pub const REPO: &str = "tangency-labs/fieldcraft";
|
||||||
/// The GitHub API.
|
/// The GitHub API.
|
||||||
pub const DEFAULT_HOST: &str = "https://api.github.com";
|
pub const DEFAULT_HOST: &str = "https://api.github.com";
|
||||||
/// Replaces [`DEFAULT_HOST`] (and allows plain `http`), for tests against a local server only.
|
/// Replaces [`DEFAULT_HOST`] (and allows plain `http`), for tests against a local server only.
|
||||||
|
|||||||
@@ -164,9 +164,9 @@ mod tests {
|
|||||||
// Errors are messages, never panics.
|
// Errors are messages, never panics.
|
||||||
let missing = Client::new(&server.url()).release(&Which::Version(Version::parse("1.2.3").unwrap())).unwrap_err();
|
let missing = Client::new(&server.url()).release(&Which::Version(Version::parse("1.2.3").unwrap())).unwrap_err();
|
||||||
assert!(missing.to_string().contains("no published release of FieldCraft 1.2.3"), "{missing}");
|
assert!(missing.to_string().contains("no published release of FieldCraft 1.2.3"), "{missing}");
|
||||||
server.route("/repos/jyviko/fieldcraft/releases/latest", 200, b"not json".to_vec());
|
server.route("/repos/tangency-labs/fieldcraft/releases/latest", 200, b"not json".to_vec());
|
||||||
assert!(matches!(Client::new(&server.url()).check(), Err(Error::Release(_))));
|
assert!(matches!(Client::new(&server.url()).check(), Err(Error::Release(_))));
|
||||||
server.route("/repos/jyviko/fieldcraft/releases/latest", 403, b"{}".to_vec());
|
server.route("/repos/tangency-labs/fieldcraft/releases/latest", 403, b"{}".to_vec());
|
||||||
assert!(matches!(Client::new(&server.url()).check(), Err(Error::Network(_))));
|
assert!(matches!(Client::new(&server.url()).check(), Err(Error::Network(_))));
|
||||||
assert!(matches!(Client::new("http://127.0.0.1:1").check(), Err(Error::Network(_))));
|
assert!(matches!(Client::new("http://127.0.0.1:1").check(), Err(Error::Network(_))));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ mod tests {
|
|||||||
pub(crate) fn github(tag: &str) -> Value {
|
pub(crate) fn github(tag: &str) -> Value {
|
||||||
json!({
|
json!({
|
||||||
"tag_name": tag,
|
"tag_name": tag,
|
||||||
"html_url": format!("https://github.com/jyviko/fieldcraft/releases/tag/{tag}"),
|
"html_url": format!("https://github.com/tangency-labs/fieldcraft/releases/tag/{tag}"),
|
||||||
"body": "## What's new\n- updates",
|
"body": "## What's new\n- updates",
|
||||||
"draft": false,
|
"draft": false,
|
||||||
"prerelease": false,
|
"prerelease": false,
|
||||||
|
|||||||
+10
-10
@@ -56,7 +56,7 @@ about it, and the release notes say which of the two the draft contains.
|
|||||||
| `APPLE_TEAM_ID` | The 10-character team id of the Developer ID |
|
| `APPLE_TEAM_ID` | The 10-character team id of the Developer ID |
|
||||||
|
|
||||||
Add them to the `release` environment ([Where the secrets live](#where-the-secrets-live)) with
|
Add them to the `release` environment ([Where the secrets live](#where-the-secrets-live)) with
|
||||||
`gh secret set <NAME> --env release -R jyviko/fieldcraft`. With the certificate but without the
|
`gh secret set <NAME> --env release -R tangency-labs/fieldcraft`. With the certificate but without the
|
||||||
three notarization secrets the app is signed and not notarized. A dmg made locally with
|
three notarization secrets the app is signed and not notarized. A dmg made locally with
|
||||||
`packaging/macos/package.sh` is ad-hoc signed unless `MACOS_SIGN_IDENTITY` names an identity
|
`packaging/macos/package.sh` is ad-hoc signed unless `MACOS_SIGN_IDENTITY` names an identity
|
||||||
in the keychain.
|
in the keychain.
|
||||||
@@ -84,7 +84,7 @@ Setting it up, once:
|
|||||||
```sh
|
```sh
|
||||||
cargo install --locked rsign2 --version 0.6.7
|
cargo install --locked rsign2 --version 0.6.7
|
||||||
rsign generate -W -p fieldcraft-release.pub -s fieldcraft-release.key # -W: no password
|
rsign generate -W -p fieldcraft-release.pub -s fieldcraft-release.key # -W: no password
|
||||||
gh secret set FIELDCRAFT_SIGNING_KEY --env release -R jyviko/fieldcraft < fieldcraft-release.key
|
gh secret set FIELDCRAFT_SIGNING_KEY --env release -R tangency-labs/fieldcraft < fieldcraft-release.key
|
||||||
```
|
```
|
||||||
|
|
||||||
Keep an offline copy of the secret key file (a password manager, an encrypted backup) and
|
Keep an offline copy of the secret key file (a password manager, an encrypted backup) and
|
||||||
@@ -130,19 +130,19 @@ never the shell history):
|
|||||||
```sh
|
```sh
|
||||||
for n in APPLE_CERTIFICATE APPLE_CERTIFICATE_PASSWORD KEYCHAIN_PASSWORD APPLE_ID APPLE_PASSWORD \
|
for n in APPLE_CERTIFICATE APPLE_CERTIFICATE_PASSWORD KEYCHAIN_PASSWORD APPLE_ID APPLE_PASSWORD \
|
||||||
APPLE_TEAM_ID FIELDCRAFT_SIGNING_KEY POSTHOG_KEY; do
|
APPLE_TEAM_ID FIELDCRAFT_SIGNING_KEY POSTHOG_KEY; do
|
||||||
gh secret set "$n" --env release -R jyviko/fieldcraft < "$n.txt"
|
gh secret set "$n" --env release -R tangency-labs/fieldcraft < "$n.txt"
|
||||||
done
|
done
|
||||||
gh secret list --env release -R jyviko/fieldcraft # all eight listed
|
gh secret list --env release -R tangency-labs/fieldcraft # all eight listed
|
||||||
# After a release run on main has signed with them:
|
# After a release run on main has signed with them:
|
||||||
for n in APPLE_CERTIFICATE APPLE_CERTIFICATE_PASSWORD KEYCHAIN_PASSWORD APPLE_ID APPLE_PASSWORD \
|
for n in APPLE_CERTIFICATE APPLE_CERTIFICATE_PASSWORD KEYCHAIN_PASSWORD APPLE_ID APPLE_PASSWORD \
|
||||||
APPLE_TEAM_ID FIELDCRAFT_SIGNING_KEY POSTHOG_KEY; do
|
APPLE_TEAM_ID FIELDCRAFT_SIGNING_KEY POSTHOG_KEY; do
|
||||||
gh secret delete "$n" -R jyviko/fieldcraft
|
gh secret delete "$n" -R tangency-labs/fieldcraft
|
||||||
done
|
done
|
||||||
```
|
```
|
||||||
|
|
||||||
## Choose and prepare the version
|
## Choose and prepare the version
|
||||||
|
|
||||||
1. Look at the previous published release (`gh release list -R jyviko/fieldcraft`) and the
|
1. Look at the previous published release (`gh release list -R tangency-labs/fieldcraft`) and the
|
||||||
changes since it, and choose one version for the batch: a patch for compatible fixes; a minor
|
changes since it, and choose one version for the batch: a patch for compatible fixes; a minor
|
||||||
for new capabilities, and while on `0.x` also for breaking changes (say what breaks in the
|
for new capabilities, and while on `0.x` also for breaking changes (say what breaks in the
|
||||||
notes); `-rc.N` for a release candidate. `1.0` is the owner's decision.
|
notes); `-rc.N` for a release candidate. `1.0` is the owner's decision.
|
||||||
@@ -189,8 +189,8 @@ commit needs: `cargo xtask affected --base <sha>^ --head <sha>`. A file outside
|
|||||||
Publishing is a maintainer's call; an agent preparing a release stops at the draft.
|
Publishing is a maintainer's call; an agent preparing a release stops at the draft.
|
||||||
|
|
||||||
1. Check the run succeeded for the intended commit and the draft targets it
|
1. Check the run succeeded for the intended commit and the draft targets it
|
||||||
(`gh release view v<version> -R jyviko/fieldcraft`).
|
(`gh release view v<version> -R tangency-labs/fieldcraft`).
|
||||||
2. Download the assets into an empty folder (`gh release download v<version> -R jyviko/fieldcraft`),
|
2. Download the assets into an empty folder (`gh release download v<version> -R tangency-labs/fieldcraft`),
|
||||||
run `shasum -a 256 -c SHA256SUMS.txt`, check the signature
|
run `shasum -a 256 -c SHA256SUMS.txt`, check the signature
|
||||||
(`minisign -Vm SHA256SUMS.txt -P <the public key above>`, or `rsign verify -P …`), and check
|
(`minisign -Vm SHA256SUMS.txt -P <the public key above>`, or `rsign verify -P …`), and check
|
||||||
every platform's files are there.
|
every platform's files are there.
|
||||||
@@ -201,13 +201,13 @@ Publishing is a maintainer's call; an agent preparing a release stops at the dra
|
|||||||
platforms you could not try (each job checks its own package).
|
platforms you could not try (each job checks its own package).
|
||||||
4. Edit the notes: what is new, fixes, breaking changes, known limitations. Keep the install and
|
4. Edit the notes: what is new, fixes, breaking changes, known limitations. Keep the install and
|
||||||
signing paragraphs; never claim signing the notes don't state.
|
signing paragraphs; never claim signing the notes don't state.
|
||||||
5. Publish: `gh release edit v<version> -R jyviko/fieldcraft --draft=false --latest`
|
5. Publish: `gh release edit v<version> -R tangency-labs/fieldcraft --draft=false --latest`
|
||||||
(a release candidate: `--draft=false --prerelease --latest=false`). Publishing creates the tag
|
(a release candidate: `--draft=false --prerelease --latest=false`). Publishing creates the tag
|
||||||
at the draft's commit; never push release tags by hand.
|
at the draft's commit; never push release tags by hand.
|
||||||
|
|
||||||
## Dry runs
|
## Dry runs
|
||||||
|
|
||||||
`gh workflow run release.yml -R jyviko/fieldcraft --ref <branch>` runs the verify jobs and builds every package in parallel, and
|
`gh workflow run release.yml -R tangency-labs/fieldcraft --ref <branch>` runs the verify jobs and builds every package in parallel, and
|
||||||
uploads them with the notes as the `release-assets` artifact of the run, without creating a
|
uploads them with the notes as the `release-assets` artifact of the run, without creating a
|
||||||
release. `-f draft=true` creates or updates the draft, and is accepted on `main` only.
|
release. `-f draft=true` creates or updates the draft, and is accepted on `main` only.
|
||||||
Locally, `packaging/macos/package.sh --arch aarch64` (or `x86_64`, `universal`) and
|
Locally, `packaging/macos/package.sh --arch aarch64` (or `x86_64`, `universal`) and
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ each step. The code is `crates/update` (`fieldcraft-update`); the window's side
|
|||||||
## Checking
|
## Checking
|
||||||
|
|
||||||
The app asks the GitHub Releases API for the latest published release
|
The app asks the GitHub Releases API for the latest published release
|
||||||
(`GET https://api.github.com/repos/jyviko/fieldcraft/releases/latest`; drafts and pre-releases
|
(`GET https://api.github.com/repos/tangency-labs/fieldcraft/releases/latest`; drafts and pre-releases
|
||||||
are never offered) and compares its version with the running one (Semantic Versioning order).
|
are never offered) and compares its version with the running one (Semantic Versioning order).
|
||||||
|
|
||||||
- **At start-up**, at most once a day, when **Check for updates automatically** is on (the
|
- **At start-up**, at most once a day, when **Check for updates automatically** is on (the
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ page through eframe's web runner, drawing with WebGPU where the browser has it a
|
|||||||
otherwise. The engine, the meshers and the solvers are the same code, compiled to
|
otherwise. The engine, the meshers and the solvers are the same code, compiled to
|
||||||
`wasm32-unknown-unknown`.
|
`wasm32-unknown-unknown`.
|
||||||
|
|
||||||
Live: <https://jyviko.github.io/fieldcraft/>, deployed from each release (a push to `main`,
|
Live: <https://tangency-labs.github.io/fieldcraft/>, deployed from each release (a push to `main`,
|
||||||
`.github/workflows/pages.yml`).
|
`.github/workflows/pages.yml`).
|
||||||
|
|
||||||
## Run it locally
|
## Run it locally
|
||||||
|
|||||||
Reference in new issue
Block a user