* feat: add security logging and fix framework regressions This commit implements comprehensive security event logging and resolves critical regressions in the core framework. Security Logging: - Enhanced `pkg/log` with a `Security` level and helper. - Added `log.Username()` to consistently identify the executing user. - Instrumented GitHub CLI auth, Agentic configuration, filesystem sandbox, MCP handlers, and MCP TCP transport with security logs. - Added `SecurityStyle` to the CLI for consistent visual representation of security events. UniFi Security (CodeQL): - Refactored `pkg/unifi` to remove hardcoded `InsecureSkipVerify`, resolving a high-severity alert. - Added a `--verify-tls` flag and configuration option to control TLS verification. - Updated command handlers to support the new verification parameter. Framework Fixes: - Restored original signatures for `MustServiceFor`, `Config()`, and `Display()` in `pkg/framework/core`, which had been corrupted during a merge. - Fixed `pkg/framework/framework.go` and `pkg/framework/core/runtime_pkg.go` to match the restored signatures. - These fixes resolve project-wide compilation errors caused by the signature mismatches. I encountered significant blockers due to a corrupted state of the `dev` branch after a merge, which introduced breaking changes in the core framework's DI system. I had to manually reconcile these signatures with the expected usage across the codebase to restore build stability. * feat(mcp): add RAG tools (query, ingest, collections) Add vector database tools to the MCP server for RAG operations: - rag_query: Search for relevant documentation using semantic similarity - rag_ingest: Ingest files or directories into the vector database - rag_collections: List available collections Uses existing internal/cmd/rag exports (QueryDocs, IngestDirectory, IngestFile) and pkg/rag for Qdrant client access. Default collection is "hostuk-docs" with topK=5 for queries. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(mcp): add metrics tools (record, query) Add MCP tools for recording and querying AI/security metrics events. The metrics_record tool writes events to daily JSONL files, and the metrics_query tool provides aggregated statistics by type, repo, and agent. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: add 'core mcp serve' command Add CLI command to start the MCP server for AI tool integration. - Create internal/cmd/mcpcmd package with serve subcommand - Support --workspace flag for directory restriction - Handle SIGINT/SIGTERM for clean shutdown - Register in full.go build variant Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(ws): add WebSocket hub package for real-time streaming Add pkg/ws package implementing a hub pattern for WebSocket connections: - Hub manages client connections, broadcasts, and channel subscriptions - Client struct represents connected WebSocket clients - Message types: process_output, process_status, event, error, ping/pong - Channel-based subscription system (subscribe/unsubscribe) - SendProcessOutput and SendProcessStatus for process streaming integration - Full test coverage including concurrency tests Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(mcp): add process management and WebSocket MCP tools Add MCP tools for process management: - process_start: Start a new external process - process_stop: Gracefully stop a running process - process_kill: Force kill a process - process_list: List all managed processes - process_output: Get captured process output - process_input: Send input to process stdin Add MCP tools for WebSocket: - ws_start: Start WebSocket server for real-time streaming - ws_info: Get hub statistics (clients, channels) Update Service struct with optional process.Service and ws.Hub fields, new WithProcessService and WithWSHub options, getter methods, and Shutdown method for cleanup. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(webview): add browser automation package via Chrome DevTools Protocol Add pkg/webview package for browser automation: - webview.go: Main interface with Connect, Navigate, Click, Type, QuerySelector, Screenshot, Evaluate - cdp.go: Chrome DevTools Protocol WebSocket client implementation - actions.go: DOM action types (Click, Type, Hover, Scroll, etc.) and ActionSequence builder - console.go: Console message capture and filtering with ConsoleWatcher and ExceptionWatcher - angular.go: Angular-specific helpers for router navigation, component access, and Zone.js stability Add MCP tools for webview: - webview_connect/disconnect: Connection management - webview_navigate: Page navigation - webview_click/type/query/wait: DOM interaction - webview_console: Console output capture - webview_eval: JavaScript execution - webview_screenshot: Screenshot capture Add documentation: - docs/mcp/angular-testing.md: Guide for Angular application testing Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs: document new packages and BugSETI application - Update CLAUDE.md with documentation for: - pkg/ws (WebSocket hub for real-time streaming) - pkg/webview (Browser automation via CDP) - pkg/mcp (MCP server tools: process, ws, webview) - BugSETI application overview - Add comprehensive README for BugSETI with: - Installation and configuration guide - Usage workflow documentation - Architecture overview - Contributing guidelines Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(bugseti): add BugSETI system tray app with auto-update BugSETI - Distributed Bug Fixing like SETI@home but for code Features: - System tray app with Wails v3 - GitHub issue fetching with label filters - Issue queue with priority management - AI context seeding via seed-agent-developer skill - Automated PR submission flow - Stats tracking and leaderboard - Cross-platform notifications - Self-updating with stable/beta/nightly channels Includes: - cmd/bugseti: Main application with Angular frontend - internal/bugseti: Core services (fetcher, queue, seeder, submit, config, stats, notify) - internal/bugseti/updater: Auto-update system (checker, downloader, installer) - .github/workflows/bugseti-release.yml: CI/CD for all platforms Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: resolve import cycle and code duplication - Remove pkg/log import from pkg/io/local to break import cycle (pkg/log/rotation.go imports pkg/io, creating circular dependency) - Use stderr logging for security events in sandbox escape detection - Remove unused sync/atomic import from core.go - Fix duplicate LogSecurity function declarations in cli/log.go - Update workspace/service.go Crypt() call to match interface Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: update tests for new function signatures and format code - Update core_test.go: Config(), Display() now panic instead of returning error - Update runtime_pkg_test.go: sr.Config() now panics instead of returning error - Update MustServiceFor tests to use assert.Panics - Format BugSETI, MCP tools, and webview packages with gofmt Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Snider <631881+Snider@users.noreply.github.com> Co-authored-by: Claude <developers@lethean.io> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
500 lines
16 KiB
YAML
500 lines
16 KiB
YAML
name: Alpha Release
|
|
|
|
on:
|
|
push:
|
|
branches: [dev]
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: write
|
|
id-token: write
|
|
attestations: write
|
|
|
|
env:
|
|
# Next version - update when releasing
|
|
NEXT_VERSION: "0.0.4"
|
|
|
|
jobs:
|
|
build:
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-latest
|
|
goos: linux
|
|
goarch: amd64
|
|
- os: ubuntu-latest
|
|
goos: linux
|
|
goarch: arm64
|
|
- os: macos-latest
|
|
goos: darwin
|
|
goarch: arm64
|
|
- os: windows-latest
|
|
goos: windows
|
|
goarch: amd64
|
|
runs-on: ${{ matrix.os }}
|
|
env:
|
|
GOOS: ${{ matrix.goos }}
|
|
GOARCH: ${{ matrix.goarch }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
# GUI build disabled until build action supports Wails v3
|
|
# - name: Wails Build Action
|
|
# uses: host-uk/build@v4.0.0
|
|
# with:
|
|
# build-name: core
|
|
# build-platform: ${{ matrix.goos }}/${{ matrix.goarch }}
|
|
# build: true
|
|
# package: true
|
|
# sign: false
|
|
|
|
- name: Setup Go
|
|
uses: host-uk/build/actions/setup/go@v4.0.0
|
|
with:
|
|
go-version: "1.25"
|
|
|
|
- name: Build CLI
|
|
shell: bash
|
|
run: |
|
|
EXT=""
|
|
if [ "$GOOS" = "windows" ]; then EXT=".exe"; fi
|
|
BINARY="core${EXT}"
|
|
ARCHIVE_PREFIX="core-${GOOS}-${GOARCH}"
|
|
|
|
APP_VERSION="${{ env.NEXT_VERSION }}-alpha.${{ github.run_number }}"
|
|
go build -ldflags "-s -w -X github.com/host-uk/core/pkg/cli.AppVersion=${APP_VERSION}" -o "./bin/${BINARY}" .
|
|
|
|
# Create tar.gz for Homebrew (non-Windows)
|
|
if [ "$GOOS" != "windows" ]; then
|
|
tar czf "./bin/${ARCHIVE_PREFIX}.tar.gz" -C ./bin "${BINARY}"
|
|
fi
|
|
|
|
# Create zip for Scoop (Windows)
|
|
if [ "$GOOS" = "windows" ]; then
|
|
cd ./bin && zip "${ARCHIVE_PREFIX}.zip" "${BINARY}" && cd ..
|
|
fi
|
|
|
|
# Rename raw binary to platform-specific name for release
|
|
mv "./bin/${BINARY}" "./bin/${ARCHIVE_PREFIX}${EXT}"
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: core-${{ matrix.goos }}-${{ matrix.goarch }}
|
|
path: ./bin/core-*
|
|
|
|
build-ide:
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: macos-latest
|
|
goos: darwin
|
|
goarch: arm64
|
|
- os: ubuntu-latest
|
|
goos: linux
|
|
goarch: amd64
|
|
- os: windows-latest
|
|
goos: windows
|
|
goarch: amd64
|
|
runs-on: ${{ matrix.os }}
|
|
env:
|
|
GOOS: ${{ matrix.goos }}
|
|
GOARCH: ${{ matrix.goarch }}
|
|
defaults:
|
|
run:
|
|
working-directory: internal/core-ide
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Setup Go
|
|
uses: host-uk/build/actions/setup/go@v4.0.0
|
|
with:
|
|
go-version: "1.25"
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: "20"
|
|
|
|
- name: Install Wails CLI
|
|
run: go install github.com/wailsapp/wails/v3/cmd/wails3@latest
|
|
|
|
- name: Install frontend dependencies
|
|
working-directory: internal/core-ide/frontend
|
|
run: npm ci
|
|
|
|
- name: Generate bindings
|
|
run: wails3 generate bindings -f '-tags production' -clean=false -ts -i
|
|
|
|
- name: Build frontend
|
|
working-directory: internal/core-ide/frontend
|
|
run: npm run build
|
|
|
|
- name: Install Linux dependencies
|
|
if: matrix.goos == 'linux'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev
|
|
|
|
- name: Build IDE
|
|
shell: bash
|
|
run: |
|
|
EXT=""
|
|
if [ "$GOOS" = "windows" ]; then EXT=".exe"; fi
|
|
BINARY="core-ide${EXT}"
|
|
ARCHIVE_PREFIX="core-ide-${GOOS}-${GOARCH}"
|
|
|
|
BUILD_FLAGS="-tags production -trimpath -buildvcs=false"
|
|
|
|
if [ "$GOOS" = "windows" ]; then
|
|
# Windows: no CGO, use windowsgui linker flag
|
|
export CGO_ENABLED=0
|
|
LDFLAGS="-w -s -H windowsgui"
|
|
|
|
# Generate Windows syso resource
|
|
cd build
|
|
wails3 generate syso -arch ${GOARCH} -icon windows/icon.ico -manifest windows/wails.exe.manifest -info windows/info.json -out ../wails_windows_${GOARCH}.syso
|
|
cd ..
|
|
elif [ "$GOOS" = "darwin" ]; then
|
|
export CGO_ENABLED=1
|
|
export CGO_CFLAGS="-mmacosx-version-min=10.15"
|
|
export CGO_LDFLAGS="-mmacosx-version-min=10.15"
|
|
export MACOSX_DEPLOYMENT_TARGET="10.15"
|
|
LDFLAGS="-w -s"
|
|
else
|
|
export CGO_ENABLED=1
|
|
LDFLAGS="-w -s"
|
|
fi
|
|
|
|
go build ${BUILD_FLAGS} -ldflags="${LDFLAGS}" -o "./bin/${BINARY}"
|
|
|
|
# Clean up syso files
|
|
rm -f *.syso
|
|
|
|
# Package
|
|
if [ "$GOOS" = "darwin" ]; then
|
|
# Create .app bundle
|
|
mkdir -p "./bin/Core IDE.app/Contents/"{MacOS,Resources}
|
|
cp build/darwin/icons.icns "./bin/Core IDE.app/Contents/Resources/"
|
|
cp "./bin/${BINARY}" "./bin/Core IDE.app/Contents/MacOS/"
|
|
cp build/darwin/Info.plist "./bin/Core IDE.app/Contents/"
|
|
codesign --force --deep --sign - "./bin/Core IDE.app"
|
|
tar czf "./bin/${ARCHIVE_PREFIX}.tar.gz" -C ./bin "Core IDE.app"
|
|
elif [ "$GOOS" = "windows" ]; then
|
|
cd ./bin && zip "${ARCHIVE_PREFIX}.zip" "${BINARY}" && cd ..
|
|
else
|
|
tar czf "./bin/${ARCHIVE_PREFIX}.tar.gz" -C ./bin "${BINARY}"
|
|
fi
|
|
|
|
# Rename raw binary
|
|
mv "./bin/${BINARY}" "./bin/${ARCHIVE_PREFIX}${EXT}"
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: core-ide-${{ matrix.goos }}-${{ matrix.goarch }}
|
|
path: internal/core-ide/bin/core-ide-*
|
|
|
|
release:
|
|
needs: [build, build-ide]
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
version: ${{ steps.version.outputs.version }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Set version
|
|
id: version
|
|
run: echo "version=v${{ env.NEXT_VERSION }}-alpha.${{ github.run_number }}" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
path: dist
|
|
merge-multiple: true
|
|
|
|
- name: Prepare release files
|
|
run: |
|
|
mkdir -p release
|
|
cp dist/* release/ 2>/dev/null || true
|
|
ls -la release/
|
|
|
|
- name: Create alpha release
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
VERSION: ${{ steps.version.outputs.version }}
|
|
run: |
|
|
gh release create "$VERSION" \
|
|
--title "Alpha: $VERSION" \
|
|
--notes "Canary build from dev branch.
|
|
|
|
**Version:** $VERSION
|
|
**Commit:** ${{ github.sha }}
|
|
**Built:** $(date -u +'%Y-%m-%d %H:%M:%S UTC')
|
|
**Run:** ${{ github.run_id }}
|
|
|
|
## Channel: Alpha (Canary)
|
|
|
|
This is an automated pre-release for early testing.
|
|
|
|
- Systems and early adopters can test breaking changes
|
|
- Quality scoring determines promotion to beta
|
|
- Use stable releases for production
|
|
|
|
## Installation
|
|
|
|
\`\`\`bash
|
|
# Homebrew (macOS/Linux)
|
|
brew install host-uk/tap/core
|
|
|
|
# Scoop (Windows)
|
|
scoop bucket add host-uk https://github.com/host-uk/scoop-bucket
|
|
scoop install core
|
|
|
|
# Direct download (example: Linux amd64)
|
|
curl -fsSL https://github.com/host-uk/core/releases/download/$VERSION/core-linux-amd64 -o core
|
|
chmod +x core && sudo mv core /usr/local/bin/
|
|
\`\`\`
|
|
" \
|
|
--prerelease \
|
|
--target dev \
|
|
release/*
|
|
|
|
update-tap:
|
|
needs: release
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
path: dist
|
|
merge-multiple: true
|
|
|
|
- name: Generate checksums
|
|
run: |
|
|
cd dist
|
|
for f in *.tar.gz; do
|
|
sha256sum "$f" | awk '{print $1}' > "${f}.sha256"
|
|
done
|
|
echo "=== Checksums ==="
|
|
cat *.sha256
|
|
|
|
- name: Update Homebrew formula
|
|
env:
|
|
GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
|
|
VERSION: ${{ needs.release.outputs.version }}
|
|
run: |
|
|
# Strip leading 'v' for formula version
|
|
FORMULA_VERSION="${VERSION#v}"
|
|
|
|
# Read checksums
|
|
DARWIN_ARM64=$(cat dist/core-darwin-arm64.tar.gz.sha256)
|
|
LINUX_AMD64=$(cat dist/core-linux-amd64.tar.gz.sha256)
|
|
LINUX_ARM64=$(cat dist/core-linux-arm64.tar.gz.sha256)
|
|
|
|
# Clone tap repo (configure auth for push)
|
|
gh repo clone host-uk/homebrew-tap /tmp/tap -- --depth=1
|
|
cd /tmp/tap
|
|
git remote set-url origin "https://x-access-token:${GH_TOKEN}@github.com/host-uk/homebrew-tap.git"
|
|
cd -
|
|
mkdir -p /tmp/tap/Formula
|
|
|
|
# Write formula
|
|
cat > /tmp/tap/Formula/core.rb << FORMULA
|
|
# typed: false
|
|
# frozen_string_literal: true
|
|
|
|
class Core < Formula
|
|
desc "Host UK development CLI"
|
|
homepage "https://github.com/host-uk/core"
|
|
version "${FORMULA_VERSION}"
|
|
license "EUPL-1.2"
|
|
|
|
on_macos do
|
|
url "https://github.com/host-uk/core/releases/download/${VERSION}/core-darwin-arm64.tar.gz"
|
|
sha256 "${DARWIN_ARM64}"
|
|
end
|
|
|
|
on_linux do
|
|
if Hardware::CPU.arm?
|
|
url "https://github.com/host-uk/core/releases/download/${VERSION}/core-linux-arm64.tar.gz"
|
|
sha256 "${LINUX_ARM64}"
|
|
else
|
|
url "https://github.com/host-uk/core/releases/download/${VERSION}/core-linux-amd64.tar.gz"
|
|
sha256 "${LINUX_AMD64}"
|
|
end
|
|
end
|
|
|
|
def install
|
|
bin.install "core"
|
|
end
|
|
|
|
test do
|
|
system "\#{bin}/core", "--version"
|
|
end
|
|
end
|
|
FORMULA
|
|
|
|
# Remove leading whitespace from heredoc
|
|
sed -i 's/^ //' /tmp/tap/Formula/core.rb
|
|
|
|
# Read IDE checksums (may not exist if build-ide failed)
|
|
IDE_DARWIN_ARM64=$(cat dist/core-ide-darwin-arm64.tar.gz.sha256 2>/dev/null || echo "")
|
|
IDE_LINUX_AMD64=$(cat dist/core-ide-linux-amd64.tar.gz.sha256 2>/dev/null || echo "")
|
|
|
|
# Write core-ide Formula (Linux binary)
|
|
if [ -n "${IDE_LINUX_AMD64}" ]; then
|
|
cat > /tmp/tap/Formula/core-ide.rb << FORMULA
|
|
# typed: false
|
|
# frozen_string_literal: true
|
|
|
|
class CoreIde < Formula
|
|
desc "Host UK desktop development environment"
|
|
homepage "https://github.com/host-uk/core"
|
|
version "${FORMULA_VERSION}"
|
|
license "EUPL-1.2"
|
|
|
|
on_linux do
|
|
url "https://github.com/host-uk/core/releases/download/${VERSION}/core-ide-linux-amd64.tar.gz"
|
|
sha256 "${IDE_LINUX_AMD64}"
|
|
end
|
|
|
|
def install
|
|
bin.install "core-ide"
|
|
end
|
|
end
|
|
FORMULA
|
|
sed -i 's/^ //' /tmp/tap/Formula/core-ide.rb
|
|
fi
|
|
|
|
# Write core-ide Cask (macOS .app bundle)
|
|
if [ -n "${IDE_DARWIN_ARM64}" ]; then
|
|
mkdir -p /tmp/tap/Casks
|
|
cat > /tmp/tap/Casks/core-ide.rb << CASK
|
|
cask "core-ide" do
|
|
version "${FORMULA_VERSION}"
|
|
sha256 "${IDE_DARWIN_ARM64}"
|
|
|
|
url "https://github.com/host-uk/core/releases/download/${VERSION}/core-ide-darwin-arm64.tar.gz"
|
|
name "Core IDE"
|
|
desc "Host UK desktop development environment"
|
|
homepage "https://github.com/host-uk/core"
|
|
|
|
app "Core IDE.app"
|
|
end
|
|
CASK
|
|
sed -i 's/^ //' /tmp/tap/Casks/core-ide.rb
|
|
fi
|
|
|
|
cd /tmp/tap
|
|
git config user.name "github-actions[bot]"
|
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
git add .
|
|
git diff --cached --quiet && echo "No changes to tap" && exit 0
|
|
git commit -m "Update core to ${FORMULA_VERSION}"
|
|
git push
|
|
|
|
update-scoop:
|
|
needs: release
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
path: dist
|
|
merge-multiple: true
|
|
|
|
- name: Generate checksums
|
|
run: |
|
|
cd dist
|
|
for f in *.zip; do
|
|
[ -f "$f" ] || continue
|
|
sha256sum "$f" | awk '{print $1}' > "${f}.sha256"
|
|
done
|
|
echo "=== Checksums ==="
|
|
cat *.sha256 2>/dev/null || echo "No zip checksums"
|
|
|
|
- name: Update Scoop manifests
|
|
env:
|
|
GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
|
|
VERSION: ${{ needs.release.outputs.version }}
|
|
run: |
|
|
# Strip leading 'v' for manifest version
|
|
MANIFEST_VERSION="${VERSION#v}"
|
|
|
|
# Read checksums
|
|
WIN_AMD64=$(cat dist/core-windows-amd64.zip.sha256 2>/dev/null || echo "")
|
|
IDE_WIN_AMD64=$(cat dist/core-ide-windows-amd64.zip.sha256 2>/dev/null || echo "")
|
|
|
|
# Clone scoop bucket
|
|
gh repo clone host-uk/scoop-bucket /tmp/scoop -- --depth=1
|
|
cd /tmp/scoop
|
|
git remote set-url origin "https://x-access-token:${GH_TOKEN}@github.com/host-uk/scoop-bucket.git"
|
|
|
|
# Write core.json manifest
|
|
cat > core.json << 'MANIFEST'
|
|
{
|
|
"version": "VERSION_PLACEHOLDER",
|
|
"description": "Host UK development CLI",
|
|
"homepage": "https://github.com/host-uk/core",
|
|
"license": "EUPL-1.2",
|
|
"architecture": {
|
|
"64bit": {
|
|
"url": "URL_PLACEHOLDER",
|
|
"hash": "HASH_PLACEHOLDER",
|
|
"bin": "core.exe"
|
|
}
|
|
},
|
|
"checkver": "github",
|
|
"autoupdate": {
|
|
"architecture": {
|
|
"64bit": {
|
|
"url": "https://github.com/host-uk/core/releases/download/v$version/core-windows-amd64.zip"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
MANIFEST
|
|
|
|
sed -i "s|VERSION_PLACEHOLDER|${MANIFEST_VERSION}|g" core.json
|
|
sed -i "s|URL_PLACEHOLDER|https://github.com/host-uk/core/releases/download/${VERSION}/core-windows-amd64.zip|g" core.json
|
|
sed -i "s|HASH_PLACEHOLDER|${WIN_AMD64}|g" core.json
|
|
sed -i 's/^ //' core.json
|
|
|
|
# Write core-ide.json manifest
|
|
if [ -n "${IDE_WIN_AMD64}" ]; then
|
|
cat > core-ide.json << 'MANIFEST'
|
|
{
|
|
"version": "VERSION_PLACEHOLDER",
|
|
"description": "Host UK desktop development environment",
|
|
"homepage": "https://github.com/host-uk/core",
|
|
"license": "EUPL-1.2",
|
|
"architecture": {
|
|
"64bit": {
|
|
"url": "URL_PLACEHOLDER",
|
|
"hash": "HASH_PLACEHOLDER",
|
|
"bin": "core-ide.exe"
|
|
}
|
|
},
|
|
"checkver": "github",
|
|
"autoupdate": {
|
|
"architecture": {
|
|
"64bit": {
|
|
"url": "https://github.com/host-uk/core/releases/download/v$version/core-ide-windows-amd64.zip"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
MANIFEST
|
|
sed -i "s|VERSION_PLACEHOLDER|${MANIFEST_VERSION}|g" core-ide.json
|
|
sed -i "s|URL_PLACEHOLDER|https://github.com/host-uk/core/releases/download/${VERSION}/core-ide-windows-amd64.zip|g" core-ide.json
|
|
sed -i "s|HASH_PLACEHOLDER|${IDE_WIN_AMD64}|g" core-ide.json
|
|
sed -i 's/^ //' core-ide.json
|
|
fi
|
|
|
|
git config user.name "github-actions[bot]"
|
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
git add .
|
|
git diff --cached --quiet && echo "No changes to scoop bucket" && exit 0
|
|
git commit -m "Update core to ${MANIFEST_VERSION}"
|
|
git push
|