19 Commits

Author SHA1 Message Date
Justin Poehnelt ecddf2ec86 ci: add cargo-deny for license, advisory, and source auditing (#653)
* ci: add cargo-deny configuration for supply chain auditing

* Update deny.toml

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Update deny.toml

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Update deny.toml

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Update deny.toml

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Update deny.toml

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* ci: add cargo-deny to workflow

Integrates cargo-deny into the main CI pipeline using the official
EmbarkStudios action. This will automatically block PRs that introduce
banned licenses, insecure crates, or unallowed registries.

* ci: explicitly deny unmaintained, yanked, and unlicensed crates per review

* ci: remove deprecated cargo-deny keys and restore valid config

---------

Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-31 12:09:56 -06:00
jpoehnelt-bot 674d53a65a fix(ci): add setup-uv step to Lint Skills job
The Lint Skills job uses uvx to run agentskills validate, but uv
is not pre-installed on GitHub Actions runners. Add astral-sh/setup-uv
action and a skills path filter to the changes detection.
2026-03-26 09:59:40 -06:00
Yannik Tausch b45cdf862a ci: add skills-ref lint step for SKILL.md validation (#626) 2026-03-25 09:44:54 -06:00
Justin Poehnelt 029e5def2b feat: extract google-workspace library crate (cargo workspace) (#613)
* feat: extract google-workspace library crate and restructure as cargo workspace

- Create crates/google-workspace/ with public modules: discovery, error, services, validate, client
- Move CLI binary to crates/cli/ (package: google-workspace-cli, binary: gws)
- Root Cargo.toml is now workspace-only
- Binary modules use thin re-exports from library (zero behavioral changes)
- Discovery fetch_discovery_document accepts cache_dir parameter for library consumers
- Break output.rs / error.rs circular dep by moving char detection to library validate module
- Update CI workflows for workspace (--workspace flags, path filters)
- Update dist-workspace.toml and policy.yml for new crate locations

Closes #386

* refactor: rename crates/cli to crates/google-workspace-cli

* chore: sync CLI version to 0.20.1 and regenerate skills

* chore: update labeler paths for workspace crate layout

* fix: update flake.nix to read version from CLI crate Cargo.toml

* fix: use tokio::fs for non-blocking I/O in library discovery cache

* docs: update AGENTS.md source layout for workspace structure

* docs: add crate-level READMEs for crates.io

---------

Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
2026-03-24 14:40:03 -06:00
Justin Poehnelt b0f159eea0 ci: run smoketest immediately after linux build, gate other builds on it (#349)
Split x86_64-unknown-linux-gnu out of the build matrix into a dedicated
build-linux job. The smoketest now depends only on build-linux, running
as soon as that single build completes. The remaining cross-platform
builds (macOS, Windows, aarch64-linux) depend on the smoketest, so they
are skipped entirely if the smoketest fails — saving CI minutes.

Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
2026-03-09 16:04:44 -06:00
Justin Poehnelt 5872dbe474 fix(credential_store): stop persisting encryption key file when keyring is available (#345)
Previously, get_or_create_key() unconditionally wrote the encryption key
to ~/.config/gws/.encryption_key on first run, even when the OS keyring
was available. This left the key material on disk as a plain file,
making credentials portable by copying the config directory.

Changes:
- Extract save_key_file() helper to deduplicate file-writing logic
- On keyring read success: delete stale .encryption_key (migration)
- On NoEntry + existing file: migrate key into keyring, then delete file
- On NoEntry + new key: try keyring first, only write file as fallback

Fixes #344

Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
2026-03-09 15:51:05 -06:00
Justin Poehnelt 00adb5cb23 ci: make sccache setup resilient to cache API outages (#346)
Remove RUSTC_WRAPPER from global env and set it per-job only after the
sccache-action succeeds. When GitHub's cache API is unavailable, CI now
falls through to a plain (uncached) cargo build instead of failing.

Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
2026-03-09 15:00:10 -06:00
Justin Poehnelt d5d77d96d0 ci: pin all actions to a sha (#341) 2026-03-09 13:52:49 -06:00
Justin Poehnelt 5836d1527a ci: ignore sccache errors when GitHub down (#339) 2026-03-09 12:54:05 -06:00
Justin Poehnelt ba472602f6 build(ci): optimize nix and windows cache layers (#331) 2026-03-09 11:54:14 -06:00
Justin Poehnelt 4b2702e539 ci: add path filtering to skip expensive jobs on non-Rust changes (#216)
- Add dorny/paths-filter to detect .rs, Cargo.toml/Lock, flake.nix/lock changes
- Gate test, lint, nix, skills, and build jobs behind change detection
- Remove duplicate coverage job (already in coverage.yml with Codecov upload)
- Main pushes always run all jobs unconditionally

Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
2026-03-05 14:28:17 -08:00
Justin Poehnelt 62d6ddbfa9 chore: steps to reduce contributor friction (#185)
* chore: steps to reduce contributor friction

* Update CLAUDE.md

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-05 09:08:50 -08:00
Steve Bazyl 37ab483840 feat: Add nix flake (#94) 2026-03-04 22:21:36 -07:00
Justin Poehnelt b3669e04a5 feat: Implement hourly cron and manual trigger for the generate-skills workflow to auto-sync skills via pull requests and downgrade CI drift check to a warning. (#63)
* feat: Implement hourly cron and manual trigger for the generate-skills workflow to auto-sync skills via pull requests and downgrade CI drift check to a warning.

* chore: regenerate skills [skip ci]

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 12:57:20 -08:00
Justin Poehnelt 214fc18d4f ci: skip smoketest on fork pull requests (#47) 2026-03-04 00:24:13 -07:00
Justin Poehnelt 4d4cabeb16 ci: add concurrency controls to cancel stale PR runs 2026-03-03 10:13:44 -07:00
Justin Poehnelt 8ab58d670f ci: disable Windows Defender for cargo dirs 2026-03-03 10:10:40 -07:00
Justin Poehnelt a0ad08950d ci: speed up builds with rust-cache, sccache, and artifact reuse (#3) 2026-03-03 09:01:42 -08:00
Justin Poehnelt f75bf6dcf7 feat: implement cli (#1) 2026-03-02 17:26:21 -07:00