From 2e37c16ac75ed77d547af7a49c103912f7263286 Mon Sep 17 00:00:00 2001 From: m3tm3re Date: Fri, 20 Feb 2026 08:30:26 +0100 Subject: [PATCH] fix(ci): resolve nix-update workflow issues - Remove --use-update-script flag that breaks with flake-only repos (nix-update-script expects default.nix at repo root) - Fix GitHub API jq filter for detecting prereleases - Fix Summary step bash syntax for handling input variables - Format lib/ files that were failing formatting check --- .gitea/workflows/nix-update.yml | 36 +++++++++------- lib/default.nix | 6 +-- lib/opencode-rules.nix | 76 ++++++++++++++++++--------------- 3 files changed, 64 insertions(+), 54 deletions(-) diff --git a/.gitea/workflows/nix-update.yml b/.gitea/workflows/nix-update.yml index 89732cc..584234e 100644 --- a/.gitea/workflows/nix-update.yml +++ b/.gitea/workflows/nix-update.yml @@ -82,13 +82,13 @@ jobs: echo "::group::Checking $INPUT_NAME ($OWNER/$REPO)" # Get latest stable release (exclude prereleases) - LATEST=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - "https://api.github.com/repos/$OWNER/$REPO/releases/latest" | \ - jq -r 'select(.prerelease == false) | .tag_name // empty') + # The /releases/latest endpoint already returns the latest non-prerelease, non-draft release + LATEST=$(curl -sf "https://api.github.com/repos/$OWNER/$REPO/releases/latest" | \ + jq -r 'if .prerelease == false then .tag_name else empty end') if [ -z "$LATEST" ]; then - echo "⚠️ No stable release found for $INPUT_NAME" - FAILED_INPUTS="$FAILED_INPUTS $INPUT_NAME(no-release)" + echo "⚠️ No stable release found for $INPUT_NAME (repo may only have prereleases)" + FAILED_INPUTS="$FAILED_INPUTS $INPUT_NAME(no-stable-release)" echo "::endgroup::" continue fi @@ -175,13 +175,13 @@ jobs: nix eval .#${pkg}.passthru.updateScript --json >/dev/null 2>&1 } - run_update() { - local pkg=$1 - local before_hash=$(git rev-parse HEAD) + run_update() { + local pkg=$1 + local before_hash=$(git rev-parse HEAD) - echo "::group::Updating $pkg" + echo "::group::Updating $pkg" - local args=("--flake" "--commit" "--use-github-releases" "--use-update-script") + local args=("--flake" "--commit" "--use-github-releases") args+=("$pkg") @@ -395,15 +395,19 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY echo "## Updated Flake Inputs" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - for input in ${{ steps.update-flake-inputs.outputs.updated_inputs }}; do - echo "- **$input**" >> $GITHUB_STEP_SUMMARY - done - if [ -n "${{ steps.update-flake-inputs.outputs.failed_inputs }}" ]; then + UPDATED_INPUTS="${{ steps.update-flake-inputs.outputs.updated_inputs }}" + if [ -n "$UPDATED_INPUTS" ]; then + echo "$UPDATED_INPUTS" | tr ' ' '\n' | while read -r input; do + [ -n "$input" ] && echo "- **$input**" >> $GITHUB_STEP_SUMMARY + done + fi + FAILED_INPUTS="${{ steps.update-flake-inputs.outputs.failed_inputs }}" + if [ -n "$FAILED_INPUTS" ]; then echo "" >> $GITHUB_STEP_SUMMARY echo "### Failed Inputs" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - for input in ${{ steps.update-flake-inputs.outputs.failed_inputs }}; do - echo "- $input" >> $GITHUB_STEP_SUMMARY + echo "$FAILED_INPUTS" | tr ' ' '\n' | while read -r input; do + [ -n "$input" ] && echo "- $input" >> $GITHUB_STEP_SUMMARY done fi fi diff --git a/lib/default.nix b/lib/default.nix index 0168beb..1b1a2e7 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -3,10 +3,10 @@ # let # m3taLib = inputs.m3ta-nixpkgs.lib.${system}; # in ... -{ lib }: { +{lib}: { # Port management utilities - ports = import ./ports.nix { inherit lib; }; + ports = import ./ports.nix {inherit lib;}; # OpenCode rules injection utilities - opencode-rules = import ./opencode-rules.nix { inherit lib; }; + opencode-rules = import ./opencode-rules.nix {inherit lib;}; } diff --git a/lib/opencode-rules.nix b/lib/opencode-rules.nix index 27834fb..8356633 100644 --- a/lib/opencode-rules.nix +++ b/lib/opencode-rules.nix @@ -30,7 +30,7 @@ # # The instructions list contains paths relative to the project root, all prefixed # with `.opencode-rules/`, making them portable across different project locations. -{ lib }: { +{lib}: { # Create Opencode rules configuration from AGENTS repository # # Args: @@ -69,42 +69,48 @@ # # ".opencode-rules/frameworks/fastapi.md" # # ]; # # } - mkOpencodeRules = { agents, languages ? [ ], concerns ? [ - "coding-style" - "naming" - "documentation" - "testing" - "git-workflow" - "project-structure" - ], frameworks ? [ ], extraInstructions ? [ ] }: - let - rulesDir = ".opencode-rules"; + mkOpencodeRules = { + agents, + languages ? [], + concerns ? [ + "coding-style" + "naming" + "documentation" + "testing" + "git-workflow" + "project-structure" + ], + frameworks ? [], + extraInstructions ? [], + }: let + rulesDir = ".opencode-rules"; - # Build instructions list by mapping concerns, languages, frameworks to their file paths - # All paths are relative to project root via the rulesDir symlink - instructions = (map (c: "${rulesDir}/concerns/${c}.md") concerns) - ++ (map (l: "${rulesDir}/languages/${l}.md") languages) - ++ (map (f: "${rulesDir}/frameworks/${f}.md") frameworks) - ++ extraInstructions; + # Build instructions list by mapping concerns, languages, frameworks to their file paths + # All paths are relative to project root via the rulesDir symlink + instructions = + (map (c: "${rulesDir}/concerns/${c}.md") concerns) + ++ (map (l: "${rulesDir}/languages/${l}.md") languages) + ++ (map (f: "${rulesDir}/frameworks/${f}.md") frameworks) + ++ extraInstructions; - # Generate JSON configuration for Opencode - opencodeConfig = { - "$schema" = "https://opencode.ai/config.json"; - inherit instructions; - }; - in { + # Generate JSON configuration for Opencode + opencodeConfig = { + "$schema" = "https://opencode.ai/config.json"; inherit instructions; - - # Shell hook to set up rules in the project - # Creates a symlink to the AGENTS rules directory and generates opencode.json - shellHook = '' - # Create/update symlink to AGENTS rules directory - ln -sfn ${agents}/rules ${rulesDir} - - # Generate opencode.json configuration file - cat > opencode.json <<'OPENCODE_EOF' - ${builtins.toJSON opencodeConfig} - OPENCODE_EOF - ''; }; + in { + inherit instructions; + + # Shell hook to set up rules in the project + # Creates a symlink to the AGENTS rules directory and generates opencode.json + shellHook = '' + # Create/update symlink to AGENTS rules directory + ln -sfn ${agents}/rules ${rulesDir} + + # Generate opencode.json configuration file + cat > opencode.json <<'OPENCODE_EOF' + ${builtins.toJSON opencodeConfig} + OPENCODE_EOF + ''; + }; }