diff --git a/.github/workflows/chocolatey.yml b/.github/workflows/chocolatey.yml index 47d5097..0bdffb2 100644 --- a/.github/workflows/chocolatey.yml +++ b/.github/workflows/chocolatey.yml @@ -1,19 +1,53 @@ name: chocolatey + on: - push: - tags: ["v*.*.*"] + release: + types: [published] + +permissions: + contents: read jobs: chocolatey: runs-on: windows-latest steps: - - uses: actions/checkout@v4 - - name: Install Chocolatey + - name: Checkout + uses: actions/checkout@v4 + with: + # Pull the repo just so scripts are available + fetch-depth: 1 + + - name: Set VERSION from release tag + shell: pwsh + run: | + $tag = "${{ github.event.release.tag_name }}" + $ver = $tag -replace '^v','' + "VERSION=$ver" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 + Write-Host "Resolved VERSION=$ver" + + # Do NOT install Chocolatey; it already exists on the GitHub Windows runner + + - name: Wait for checksums.txt to be available (max ~90s) + shell: pwsh run: | - Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) - - name: Extract version - run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $env:GITHUB_ENV - - name: Run gen-choco.ps1 - run: .\scripts\gen-choco.ps1 -Version $env:VERSION + $tag = "${{ github.event.release.tag_name }}" + $url = "https://github.com/${{ github.repository }}/releases/download/$tag/checksums.txt" + $ok = $false + for ($i=0; $i -lt 30; $i++) { + try { + $resp = Invoke-WebRequest -Uri $url -UseBasicParsing -Method Head -TimeoutSec 10 + if ($resp.StatusCode -eq 200) { $ok = $true; break } + } catch { Start-Sleep -Seconds 3 } + Start-Sleep -Seconds 3 + } + if (-not $ok) { + Write-Error "checksums.txt not found at $url after waiting." + exit 1 + } + + - name: Generate & push Chocolatey package + shell: pwsh env: CHOCOLATEY_API_KEY: ${{ secrets.CHOCOLATEY_API_KEY }} + run: | + .\scripts\gen-choco.ps1 -Version $env:VERSION diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 2f9ef94..d7fc500 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -1,85 +1,97 @@ version: 2 + project_name: hottgo +before: + hooks: + - go mod tidy + builds: - - id: cli + - id: hottgo main: ./cmd/hottgo + binary: hottgo env: - CGO_ENABLED=0 goos: [linux, windows, darwin] goarch: [amd64, arm64] - binary: hottgo ldflags: - -s -w - - -X github.com/watchthelight/HypergraphGo/internal/version.Version={{.Version}} - - -X github.com/watchthelight/HypergraphGo/internal/version.Commit={{.Commit}} - - -X github.com/watchthelight/HypergraphGo/internal/version.Date={{.Date}} + mod_timestamp: "{{ .CommitDate }}" archives: - - id: tgz - builds: [cli] + - id: unix-tarballs + builds: [hottgo] format: tar.gz + # linux/darwin end up here + wrap_in_directory: false + files: + - LICENSE + - README.md name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" + + - id: windows-zips + builds: [hottgo] + format: zip + # windows ends up here automatically + wrap_in_directory: false files: - LICENSE - README.md + name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" -checksums: - name_template: 'checksums.txt' +checksum: + name_template: "checksums.txt" +changelog: + use: github + sort: asc + filters: + exclude: + - "^ci:" + - "^docs:" + - "^test:" + +release: + draft: false + prerelease: false + +# Generate deb/rpm via nfpm (optional but useful for apt/yum repos) nfpms: - - id: packages - builds: [cli] - formats: - - deb - - rpm - - apk - - archlinux + - id: linux-packages + package_name: hottgo + file_name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Arch }}" + builds: [hottgo] vendor: watchthelight - homepage: https://github.com/watchthelight/HypergraphGo - maintainer: watchthelight - description: HypergraphGo is a tool for working with hypergraphs. + maintainer: "watchthelight " license: MIT - file_name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" + homepage: "https://github.com/watchthelight/HypergraphGo" + description: "Hypergraph & HoTT tooling in Go" + formats: [deb, rpm] + bindir: /usr/bin + +# Homebrew (formula in your tap) +brews: + - name: hottgo + repository: + owner: watchthelight + name: homebrew-hottgo + token: "{{ .Env.TAP_GITHUB_TOKEN }}" + commit_author: + name: watchthelight-bot + email: admin@watchthelight.org + description: "Hypergraph & HoTT tooling in Go" + homepage: "https://github.com/watchthelight/HypergraphGo" + license: "MIT" + install: | + bin.install "hottgo" -publish: +# Upload built artifacts + packages to Cloudsmith +publishers: - name: cloudsmith - ids: [packages] - cloudsmiths: - - organization: watchthelight - repository: hottgo - distributions: - - deb: ubuntu/noble - - deb: ubuntu/jammy - - deb: debian/bookworm - - rpm: el/9 - - rpm: fedora/40 - - alpine: alpine/v3.20 - - name: homebrew - homebrew: - name: hottgo - repository: - owner: watchthelight - name: homebrew-hottgo - cask: true - commit_author: - name: goreleaserbot - email: goreleaser@carlosbecker.com - - name: scoop - scoop: - name: hottgo - repository: - owner: watchthelight - name: scoop-bucket - commit_author: - name: goreleaserbot - email: goreleaser@carlosbecker.com - - name: winget - winget: - name: hottgo - repository: - owner: watchthelight - name: winget-pkgs - commit_author: - name: goreleaserbot - email: goreleaser@carlosbecker.com + # Requires CLOUDSMITH_TOKEN env set in CI + cmd: > + cloudsmith push raw watchthelight/hottgo + --name "{{ .ArtifactName }}" + --version "{{ .Version }}" + "{{ .ArtifactPath }}" + ids: ["all"] diff --git a/README.md b/README.md index f4ab994..8ebb3c0 100644 --- a/README.md +++ b/README.md @@ -1,92 +1,130 @@ -# HypergraphGo - -[![Linux](https://github.com/watchthelight/HypergraphGo/actions/workflows/ci-linux.yml/badge.svg?branch=main)](https://github.com/watchthelight/HypergraphGo/actions/workflows/ci-linux.yml) -[![Windows](https://github.com/watchthelight/HypergraphGo/actions/workflows/ci-windows.yml/badge.svg?branch=main)](https://github.com/watchthelight/HypergraphGo/actions/workflows/ci-windows.yml) -![Go Version](https://img.shields.io/badge/Go-1.22+-00ADD8?logo=go) -![License](https://img.shields.io/badge/License-MIT-informational) - -A work-in-progress implementation of a **native HoTT kernel in Go**. This project began as a hypergraph library and is expanding into a full proof kernel with dependent types. - ---- - -## Project Status - -- ✅ **Phase 1:** Core AST, raw AST, resolver, pretty-printer, ctx + capture-avoiding subst with tests -- ✅ **CI:** Cross-OS matrix (Ubuntu + Windows) running `go vet` and `go test` -- 🚧 **Phase 2:** Definitional equality via NbE; normalization and α-equivalence; tests and golden NFs -- ⏭ Future: inductives, paths, univalence, HITs, elaborator, stdlib - -See [`TODO.txt`](./TODO.txt) for the detailed roadmap. - ---- - -## Repo Layout - -internal/ast/ # Core & Raw AST, printer, resolver, tests -internal/core/ # Definitional equality (Conv) and tests -internal/eval/ # NbE evaluator + tests/bench -internal/util/ # Utilities -kernel/ctx/ # Bindings/ctx utilities + tests -kernel/subst/ # Shift/Subst (de Bruijn) + tests -cmd/hg/ # CLI entry point (WIP) -docs/ # DESIGN.md, CONTRIBUTING.md - ---- - -## Screenshots - -*Placeholder for demo screenshots of the HoTT kernel in action, CLI output, etc.* - ---- - -## Install - -**Option A: Go users** -```bash -go install github.com/watchthelight/HypergraphGo/cmd/hg@latest -hottgo -version -``` - -**Option B: Download a release** -Grab the latest binaries from the [Releases](https://github.com/watchthelight/HypergraphGo/releases) page. Each archive includes a checksum and SBOM. - -**Versioning:** we use SemVer. Pre-1.0 versions may contain breaking changes in minor bumps. - ---- - -## Building & Testing - -You’ll need **Go 1.22+**. - -```bash -git clone https://github.com/watchthelight/HypergraphGo.git -cd HypergraphGo -go test ./... -``` - -Useful variants: - -```bash -# Vet + test with coverage output -go vet ./... && go test ./... -count=1 -v -coverprofile=coverage.out -go tool cover -func=coverage.out # show totals -go tool cover -html=coverage.out # open HTML report -``` - -CI publishes `coverage.out` as a build artifact for each run. +

+ GoReleaser Logo +

GoReleaser

+

Deliver Go binaries as fast and easily as possible.

+

--- -## Contributing - -Keep the kernel (`internal/*`, `kernel/*`) panic-free and minimal. +GoReleaser builds Go binaries for several platforms, creates a GitHub release and then +pushes a Homebrew formula to a tap repository. All that wrapped in your favorite CI. -Any sugar/tactics live outside and are checked again at the kernel boundary. - -See [`docs/CONTRIBUTING.md`](docs/CONTRIBUTING.md) for invariants and hygiene. +![](https://raw.githubusercontent.com/goreleaser/example-simple/main/goreleaser.gif) --- -## License - -MIT. See LICENSE. +## Get GoReleaser + +- [On your machine](https://goreleaser.com/install/); +- [On CI/CD systems](https://goreleaser.com/ci/). + +## Documentation + +Documentation is hosted live at https://goreleaser.com + +## Community + +You have questions, need support and or just want to talk about GoReleaser? + +Here are ways to get in touch with the GoReleaser community: + +[![Join Discord](https://img.shields.io/badge/Join_our_Discord_server-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/RGEBtg8vQ6) +[![Follow Twitter](https://img.shields.io/badge/follow_on_twitter-1DA1F2?style=for-the-badge&logo=twitter&logoColor=white)](https://twitter.com/goreleaser) +[![GitHub Discussions](https://img.shields.io/badge/GITHUB_DISCUSSION-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/goreleaser/goreleaser/discussions) + +You can find the links above and all others [here](https://goreleaser.com/links/). + +### Code of Conduct + +This project adheres to the Contributor Covenant [code of conduct](https://github.com/goreleaser/.github/blob/main/CODE_OF_CONDUCT.md). +By participating, you are expected to uphold this code. +We appreciate your contribution. +Please refer to our [contributing guidelines](CONTRIBUTING.md) for further information. + +## Badges + +[![Release](https://img.shields.io/github/release/goreleaser/goreleaser.svg?style=for-the-badge)](https://github.com/goreleaser/goreleaser/releases/latest) +[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=for-the-badge)](/LICENSE.md) +[![Build status](https://img.shields.io/github/actions/workflow/status/goreleaser/goreleaser/build.yml?style=for-the-badge&branch=main)](https://github.com/goreleaser/goreleaser/actions?workflow=build) +[![Codecov branch](https://img.shields.io/codecov/c/github/goreleaser/goreleaser/main.svg?style=for-the-badge)](https://codecov.io/gh/goreleaser/goreleaser) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/goreleaser&style=for-the-badge)](https://artifacthub.io/packages/search?repo=goreleaser) +[![Go Doc](https://img.shields.io/badge/godoc-reference-blue.svg?style=for-the-badge)](http://godoc.org/github.com/goreleaser/goreleaser) +[![Powered By: GoReleaser](https://img.shields.io/badge/powered%20by-goreleaser-green.svg?style=for-the-badge)](https://github.com/goreleaser) +[![Backers on Open Collective](https://opencollective.com/goreleaser/backers/badge.svg?style=for-the-badge)](https://opencollective.com/goreleaser/backers/) +[![Sponsors on Open Collective](https://opencollective.com/goreleaser/sponsors/badge.svg?style=for-the-badge)](https://opencollective.com/goreleaser/sponsors/) +[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?style=for-the-badge)](https://conventionalcommits.org) +[![CII Best Practices](https://img.shields.io/cii/summary/5420?label=openssf%20best%20practices&style=for-the-badge)](https://bestpractices.coreinfrastructure.org/projects/5420) + +## GitHub Sponsors + +High-tier sponsors of [@caarlos0](https://github.com/sponsors/caarlos0/) on GitHub: + + + +## OpenCollective + +### Sponsors + +Does your company use goreleaser? Help keep the project bug-free and feature rich by [sponsoring the project](https://opencollective.com/goreleaser#sponsor). + + + + + + + + + + + + + + + + + + + +### Backers + +Love our work and community? [Become a backer](https://opencollective.com/goreleaser). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +### Contributors + +This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]. + + +## Stargazers over time + +[![Stargazers over time](https://starchart.cc/goreleaser/goreleaser.svg?variant=adaptive)](https://starchart.cc/goreleaser/goreleaser)