<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated></updated>
  <generator>https://nostr.ae</generator>

  <title>Nostr notes by </title>
  <author>
    <name></name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.ae/npub1guyt8qvem780zxk5wc8hgvvurmyr8y7jc5wrvaen3sx4apzglskq2trwh9.rss" />
  <link href="https://nostr.ae/npub1guyt8qvem780zxk5wc8hgvvurmyr8y7jc5wrvaen3sx4apzglskq2trwh9" />
  <id>https://nostr.ae/npub1guyt8qvem780zxk5wc8hgvvurmyr8y7jc5wrvaen3sx4apzglskq2trwh9</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqsrwjpx9cavmattxzwp6q93ugry426nmhg8twg9r3e8ekgv62hp09qzyprs3vupn80caug663mq7ap3ns0vsvun6tz3cdnhxwxq6h5yfr7zcc8arvu</id>
    
      <title type="html">name: Rust on: push: branches: [ &amp;#34;*&amp;#34; ] pull_request: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrwjpx9cavmattxzwp6q93ugry426nmhg8twg9r3e8ekgv62hp09qzyprs3vupn80caug663mq7ap3ns0vsvun6tz3cdnhxwxq6h5yfr7zcc8arvu" />
    <content type="html">
      name: Rust&lt;br/&gt;&lt;br/&gt;on:&lt;br/&gt;  push:&lt;br/&gt;    branches: [ &amp;#34;*&amp;#34; ]&lt;br/&gt;  pull_request:&lt;br/&gt;    branches: [ &amp;#34;*&amp;#34; ]&lt;br/&gt;&lt;br/&gt;env:&lt;br/&gt;  CARGO_TERM_COLOR: always&lt;br/&gt;  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true&lt;br/&gt;  RUST_LOG: info&lt;br/&gt;&lt;br/&gt;jobs:&lt;br/&gt;  build:&lt;br/&gt;&lt;br/&gt;    runs-on: ${{ matrix.os }}&lt;br/&gt;    strategy:&lt;br/&gt;      matrix:&lt;br/&gt;        os: [ubuntu-latest, macos-15-intel, macos-latest, windows-latest]&lt;br/&gt;        features_args: [&amp;#34;&amp;#34;, &amp;#34;--no-default-features&amp;#34;, &amp;#34;--features nostr&amp;#34;]&lt;br/&gt;&lt;br/&gt;    steps:&lt;br/&gt;    - uses: actions/checkout@v4&lt;br/&gt;    - name: Install system deps (dbus)&lt;br/&gt;      if: runner.os == &amp;#39;Linux&amp;#39;&lt;br/&gt;      shell: bash&lt;br/&gt;      run: |&lt;br/&gt;        sudo apt-get update&lt;br/&gt;        sudo apt-get install -y pkg-config libdbus-1-dev&lt;br/&gt;    - name: Install protobuf (protoc)&lt;br/&gt;      shell: bash&lt;br/&gt;      run: |&lt;br/&gt;        set -euxo pipefail&lt;br/&gt;        if [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;macOS&amp;#34; ]]; then&lt;br/&gt;          brew update&lt;br/&gt;          brew install protobuf&lt;br/&gt;        elif [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;Linux&amp;#34; ]]; then&lt;br/&gt;          sudo apt-get update&lt;br/&gt;          sudo apt-get install -y protobuf-compiler&lt;br/&gt;        elif [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;Windows&amp;#34; ]]; then&lt;br/&gt;          choco install -y protoc&lt;br/&gt;        fi&lt;br/&gt;    - name: Build ${{ matrix.features_args }}&lt;br/&gt;      run: cargo build --workspace --verbose ${{ matrix.features_args }}&lt;br/&gt;    - name: Run workspace tests ${{ matrix.features_args }}&lt;br/&gt;      run: |&lt;br/&gt;        cargo test --workspace ${{ matrix.features_args }} -- --test-threads 1&lt;br/&gt;    - name: Run get_file_hash_core tests ${{ matrix.features_args }}&lt;br/&gt;      shell: bash&lt;br/&gt;      run: |&lt;br/&gt;        if [[ &amp;#34;${{ matrix.features_args }}&amp;#34; == &amp;#34;--features nostr&amp;#34; ]]; then&lt;br/&gt;          cargo test -p get_file_hash_core ${{ matrix.features_args }} -- --test-threads 1 --nocapture&lt;br/&gt;        else&lt;br/&gt;          cargo test -p get_file_hash_core ${{ matrix.features_args }} -- --test-threads 1&lt;br/&gt;        fi&lt;br/&gt;    - name: Run get_file_hash tests ${{ matrix.features_args }}&lt;br/&gt;      shell: bash&lt;br/&gt;      run: |&lt;br/&gt;        if [[ &amp;#34;${{ matrix.features_args }}&amp;#34; == &amp;#34;--features nostr&amp;#34; ]]; then&lt;br/&gt;          cargo test -p get_file_hash ${{ matrix.features_args }} -- --test-threads 1 --nocapture&lt;br/&gt;        else&lt;br/&gt;          cargo test -p get_file_hash ${{ matrix.features_args }} -- --test-threads 1&lt;br/&gt;        fi&lt;br/&gt;    - name: Build Release ${{ matrix.features_args }}&lt;br/&gt;      run: cargo build --workspace --release ${{ matrix.features_args }}&lt;br/&gt;
    </content>
    <updated>2026-04-04T23:08:47Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsf7e0kvz6rdxqk8lakhkz3949ywn4amnl89rq4gff9khx683ghm6czyprs3vupn80caug663mq7ap3ns0vsvun6tz3cdnhxwxq6h5yfr7zc30xe7c</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsf7e0kvz6rdxqk8lakhkz3949ywn4amnl89rq4gff9khx683ghm6czyprs3vupn80caug663mq7ap3ns0vsvun6tz3cdnhxwxq6h5yfr7zc30xe7c" />
    <content type="html">
      # This file was autogenerated by dist: &lt;a href=&#34;https://axodotdev.github.io/cargo-dist&#34;&gt;https://axodotdev.github.io/cargo-dist&lt;/a&gt;&lt;br/&gt;#&lt;br/&gt;# Copyright 2022-2024, axodotdev&lt;br/&gt;# SPDX-License-Identifier: MIT or Apache-2.0&lt;br/&gt;#&lt;br/&gt;# CI that:&lt;br/&gt;#&lt;br/&gt;# * checks for a Git Tag that looks like a release&lt;br/&gt;# * builds artifacts with dist (archives, installers, hashes)&lt;br/&gt;# * uploads those artifacts to temporary workflow zip&lt;br/&gt;# * on success, uploads the artifacts to a GitHub Release&lt;br/&gt;#&lt;br/&gt;# Note that the GitHub Release will be created with a generated&lt;br/&gt;# title/body based on your changelogs.&lt;br/&gt;&lt;br/&gt;name: Release&lt;br/&gt;permissions:&lt;br/&gt;  &amp;#34;contents&amp;#34;: &amp;#34;write&amp;#34;&lt;br/&gt;&lt;br/&gt;# This task will run whenever you push a git tag that looks like a version&lt;br/&gt;# like &amp;#34;1.0.0&amp;#34;, &amp;#34;v0.1.0-prerelease.1&amp;#34;, &amp;#34;my-app/0.1.0&amp;#34;, &amp;#34;releases/v1.0.0&amp;#34;, etc.&lt;br/&gt;# Various formats will be parsed into a VERSION and an optional PACKAGE_NAME, where&lt;br/&gt;# PACKAGE_NAME must be the name of a Cargo package in your workspace, and VERSION&lt;br/&gt;# must be a Cargo-style SemVer Version (must have at least major.minor.patch).&lt;br/&gt;#&lt;br/&gt;# If PACKAGE_NAME is specified, then the announcement will be for that&lt;br/&gt;# package (erroring out if it doesn&amp;#39;t have the given version or isn&amp;#39;t dist-able).&lt;br/&gt;#&lt;br/&gt;# If PACKAGE_NAME isn&amp;#39;t specified, then the announcement will be for all&lt;br/&gt;# (dist-able) packages in the workspace with that version (this mode is&lt;br/&gt;# intended for workspaces with only one dist-able package, or with all dist-able&lt;br/&gt;# packages versioned/released in lockstep).&lt;br/&gt;#&lt;br/&gt;# If you push multiple tags at once, separate instances of this workflow will&lt;br/&gt;# spin up, creating an independent announcement for each one. However, GitHub&lt;br/&gt;# will hard limit this to 3 tags per commit, as it will assume more tags is a&lt;br/&gt;# mistake.&lt;br/&gt;#&lt;br/&gt;# If there&amp;#39;s a prerelease-style suffix to the version, then the release(s)&lt;br/&gt;# will be marked as a prerelease.&lt;br/&gt;on:&lt;br/&gt;  pull_request:&lt;br/&gt;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#39;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#39;&lt;br/&gt;&lt;br/&gt;jobs:&lt;br/&gt;  # Run &amp;#39;dist plan&amp;#39; (or host) to determine what tasks we need to do&lt;br/&gt;  install-deps:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-latest&amp;#34;&lt;br/&gt;    outputs:&lt;br/&gt;      val: ${{ steps.plan.outputs.manifest }}&lt;br/&gt;      tag: ${{ !github.event.pull_request &amp;amp;&amp;amp; github.ref_name || &amp;#39;&amp;#39; }}&lt;br/&gt;      tag-flag: ${{ !github.event.pull_request &amp;amp;&amp;amp; format(&amp;#39;--tag={0}&amp;#39;, github.ref_name) || &amp;#39;&amp;#39; }}&lt;br/&gt;      publishing: ${{ !github.event.pull_request }}&lt;br/&gt;    env:&lt;br/&gt;      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}&lt;br/&gt;    steps:&lt;br/&gt;      - uses: actions/checkout@v4&lt;br/&gt;        with:&lt;br/&gt;          persist-credentials: false&lt;br/&gt;          submodules: recursive&lt;br/&gt;&lt;br/&gt;      - name: Install-deps&lt;br/&gt;        shell: bash&lt;br/&gt;        run: |&lt;br/&gt;          if [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;Linux&amp;#34; ]]; then&lt;br/&gt;            sudo apt-get update&lt;br/&gt;            sudo apt-get install -y pkg-config libdbus-1-dev curl unzip&lt;br/&gt;&lt;br/&gt;            # Install a pinned modern protoc&lt;br/&gt;            PROTOC_ZIP=protoc-25.3-linux-x86_64.zip&lt;br/&gt;            curl -LO &lt;a href=&#34;https://github.com/protocolbuffers/protobuf/releases/download/v25.3/$PROTOC_ZIP&#34;&gt;https://github.com/protocolbuffers/protobuf/releases/download/v25.3/$PROTOC_ZIP&lt;/a&gt;&lt;br/&gt;            sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc&lt;br/&gt;            sudo unzip -o $PROTOC_ZIP -d /usr/local &amp;#39;include/*&amp;#39;&lt;br/&gt;            rm -f $PROTOC_ZIP&lt;br/&gt;&lt;br/&gt;          elif [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;macOS&amp;#34; ]]; then&lt;br/&gt;            brew install protobuf&lt;br/&gt;          elif [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;Windows&amp;#34; ]]; then&lt;br/&gt;            choco install protoc --no-progress&lt;br/&gt;            echo &amp;#34;C:\ProgramData\chocolatey\bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&lt;br/&gt;          fi&lt;br/&gt;&lt;br/&gt;          protoc --version&lt;br/&gt;&lt;br/&gt;  plan:&lt;br/&gt;    needs:&lt;br/&gt;      - install-deps&lt;br/&gt;    runs-on: &amp;#34;ubuntu-latest&amp;#34;&lt;br/&gt;    outputs:&lt;br/&gt;      val: ${{ steps.plan.outputs.manifest }}&lt;br/&gt;      tag: ${{ !github.event.pull_request &amp;amp;&amp;amp; github.ref_name || &amp;#39;&amp;#39; }}&lt;br/&gt;      tag-flag: ${{ !github.event.pull_request &amp;amp;&amp;amp; format(&amp;#39;--tag={0}&amp;#39;, github.ref_name) || &amp;#39;&amp;#39; }}&lt;br/&gt;      publishing: ${{ !github.event.pull_request }}&lt;br/&gt;    env:&lt;br/&gt;      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}&lt;br/&gt;    steps:&lt;br/&gt;      - uses: actions/checkout@v4&lt;br/&gt;        with:&lt;br/&gt;          persist-credentials: false&lt;br/&gt;          submodules: recursive&lt;br/&gt;      - name: Install dist&lt;br/&gt;        # we specify bash to get pipefail; it guards against the `curl` command&lt;br/&gt;        # failing. otherwise `sh` won&amp;#39;t catch that `curl` returned non-0&lt;br/&gt;        shell: bash&lt;br/&gt;        run: &amp;#34;curl --proto &amp;#39;=https&amp;#39; --tlsv1.2 -LsSf &lt;a href=&#34;https://github.com/axodotdev/cargo-dist/releases/download/v0.30.3/cargo-dist-installer.sh&#34;&gt;https://github.com/axodotdev/cargo-dist/releases/download/v0.30.3/cargo-dist-installer.sh&lt;/a&gt; | sh&amp;#34;&lt;br/&gt;      - name: Cache dist&lt;br/&gt;        uses: actions/upload-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          name: cargo-dist-cache&lt;br/&gt;          path: ~/.cargo/bin/dist&lt;br/&gt;      # sure would be cool if github gave us proper conditionals...&lt;br/&gt;      # so here&amp;#39;s a doubly-nested ternary-via-truthiness to try to provide the best possible&lt;br/&gt;      # functionality based on whether this is a pull_request, and whether it&amp;#39;s from a fork.&lt;br/&gt;      # (PRs run on the *source* but secrets are usually on the *target* -- that&amp;#39;s *good*&lt;br/&gt;      # but also really annoying to build CI around when it needs secrets to work right.)&lt;br/&gt;      - id: plan&lt;br/&gt;        run: |&lt;br/&gt;          dist ${{ (!github.event.pull_request &amp;amp;&amp;amp; format(&amp;#39;host --steps=create --tag={0}&amp;#39;, github.ref_name)) || &amp;#39;plan&amp;#39; }} --output-format=json &amp;gt; plan-dist-manifest.json&lt;br/&gt;          echo &amp;#34;dist ran successfully&amp;#34;&lt;br/&gt;          cat plan-dist-manifest.json&lt;br/&gt;          echo &amp;#34;manifest=$(jq -c &amp;#34;.&amp;#34; plan-dist-manifest.json)&amp;#34; &amp;gt;&amp;gt; &amp;#34;$GITHUB_OUTPUT&amp;#34;&lt;br/&gt;      - name: &amp;#34;Upload dist-manifest.json&amp;#34;&lt;br/&gt;        uses: actions/upload-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          name: artifacts-plan-dist-manifest&lt;br/&gt;          path: plan-dist-manifest.json&lt;br/&gt;&lt;br/&gt;  # Build and packages all the platform-specific things&lt;br/&gt;  build-local-artifacts:&lt;br/&gt;    name: build-local-artifacts (${{ join(matrix.targets, &amp;#39;, &amp;#39;) }})&lt;br/&gt;    # Let the initial task tell us to not run (currently very blunt)&lt;br/&gt;    needs:&lt;br/&gt;      - plan&lt;br/&gt;      - install-deps&lt;br/&gt;    if: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix.include != null &amp;amp;&amp;amp; (needs.plan.outputs.publishing == &amp;#39;true&amp;#39; || fromJson(needs.plan.outputs.val).ci.github.pr_run_mode == &amp;#39;upload&amp;#39;) }}&lt;br/&gt;    strategy:&lt;br/&gt;      fail-fast: false&lt;br/&gt;      # Target platforms/runners are computed by dist in create-release.&lt;br/&gt;      # Each member of the matrix has the following arguments:&lt;br/&gt;      #&lt;br/&gt;      # - runner: the github runner&lt;br/&gt;      # - dist-args: cli flags to pass to dist&lt;br/&gt;      # - install-dist: expression to run to install dist on the runner&lt;br/&gt;      #&lt;br/&gt;      # Typically there will be:&lt;br/&gt;      # - 1 &amp;#34;global&amp;#34; task that builds universal installers&lt;br/&gt;      # - N &amp;#34;local&amp;#34; tasks that build each platform&amp;#39;s binaries and platform-specific installers&lt;br/&gt;      matrix: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix }}&lt;br/&gt;    runs-on: ${{ matrix.runner }}&lt;br/&gt;    container: ${{ matrix.container &amp;amp;&amp;amp; matrix.container.image || null }}&lt;br/&gt;    env:&lt;br/&gt;      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}&lt;br/&gt;      BUILD_MANIFEST_NAME: target/distrib/${{ join(matrix.targets, &amp;#39;-&amp;#39;) }}-dist-manifest.json&lt;br/&gt;    steps:&lt;br/&gt;      - name: enable windows longpaths&lt;br/&gt;        run: |&lt;br/&gt;          git config --global core.longpaths true&lt;br/&gt;      - uses: actions/checkout@v4&lt;br/&gt;        with:&lt;br/&gt;          persist-credentials: false&lt;br/&gt;          submodules: recursive&lt;br/&gt;      - name: Install Rust non-interactively if not already installed&lt;br/&gt;        if: ${{ matrix.container }}&lt;br/&gt;        run: |&lt;br/&gt;          if ! command -v cargo &amp;gt; /dev/null 2&amp;gt;&amp;amp;1; then&lt;br/&gt;            curl --proto &amp;#39;=https&amp;#39; --tlsv1.2 -sSf &lt;a href=&#34;https://sh.rustup.rs&#34;&gt;https://sh.rustup.rs&lt;/a&gt; | sh -s -- -y&lt;br/&gt;            echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&lt;br/&gt;          fi&lt;br/&gt;      - name: Install dist&lt;br/&gt;        run: ${{ matrix.install_dist.run }}&lt;br/&gt;      # Get the dist-manifest&lt;br/&gt;      - name: Fetch local artifacts&lt;br/&gt;        uses: actions/download-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          pattern: artifacts-*&lt;br/&gt;          path: target/distrib/&lt;br/&gt;          merge-multiple: true&lt;br/&gt;      - name: Install dependencies&lt;br/&gt;        run: |&lt;br/&gt;          ${{ matrix.packages_install }}&lt;br/&gt;      - name: Install-deps&lt;br/&gt;        shell: bash&lt;br/&gt;        run: |&lt;br/&gt;          if [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;Linux&amp;#34; ]]; then&lt;br/&gt;            sudo apt-get update&lt;br/&gt;            sudo apt-get install -y pkg-config libdbus-1-dev curl unzip&lt;br/&gt;&lt;br/&gt;            # Install a pinned modern protoc&lt;br/&gt;            PROTOC_ZIP=protoc-25.3-linux-x86_64.zip&lt;br/&gt;            curl -LO &lt;a href=&#34;https://github.com/protocolbuffers/protobuf/releases/download/v25.3/$PROTOC_ZIP&#34;&gt;https://github.com/protocolbuffers/protobuf/releases/download/v25.3/$PROTOC_ZIP&lt;/a&gt;&lt;br/&gt;            sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc&lt;br/&gt;            sudo unzip -o $PROTOC_ZIP -d /usr/local &amp;#39;include/*&amp;#39;&lt;br/&gt;            rm -f $PROTOC_ZIP&lt;br/&gt;&lt;br/&gt;          elif [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;macOS&amp;#34; ]]; then&lt;br/&gt;            brew install protobuf&lt;br/&gt;          elif [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;Windows&amp;#34; ]]; then&lt;br/&gt;            choco install protoc --no-progress&lt;br/&gt;            echo &amp;#34;C:\ProgramData\chocolatey\bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&lt;br/&gt;          fi&lt;br/&gt;&lt;br/&gt;          protoc --version&lt;br/&gt;&lt;br/&gt;      - name: Build artifacts&lt;br/&gt;        run: |&lt;br/&gt;          # Actually do builds and make zips and whatnot&lt;br/&gt;          dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} &amp;gt; dist-manifest.json&lt;br/&gt;          echo &amp;#34;dist ran successfully&amp;#34;&lt;br/&gt;      - id: cargo-dist&lt;br/&gt;        name: Post-build&lt;br/&gt;        # We force bash here just because github makes it really hard to get values up&lt;br/&gt;        # to &amp;#34;real&amp;#34; actions without writing to env-vars, and writing to env-vars has&lt;br/&gt;        # inconsistent syntax between shell and powershell.&lt;br/&gt;        shell: bash&lt;br/&gt;        run: |&lt;br/&gt;          # Parse out what we just built and upload it to scratch storage&lt;br/&gt;          echo &amp;#34;paths&amp;lt;&amp;lt;EOF&amp;#34; &amp;gt;&amp;gt; &amp;#34;$GITHUB_OUTPUT&amp;#34;&lt;br/&gt;          dist print-upload-files-from-manifest --manifest dist-manifest.json &amp;gt;&amp;gt; &amp;#34;$GITHUB_OUTPUT&amp;#34;&lt;br/&gt;          echo &amp;#34;EOF&amp;#34; &amp;gt;&amp;gt; &amp;#34;$GITHUB_OUTPUT&amp;#34;&lt;br/&gt;&lt;br/&gt;          cp dist-manifest.json &amp;#34;$BUILD_MANIFEST_NAME&amp;#34;&lt;br/&gt;      - name: &amp;#34;Upload artifacts&amp;#34;&lt;br/&gt;        uses: actions/upload-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          name: artifacts-build-local-${{ join(matrix.targets, &amp;#39;_&amp;#39;) }}&lt;br/&gt;          path: |&lt;br/&gt;            ${{ steps.cargo-dist.outputs.paths }}&lt;br/&gt;            ${{ env.BUILD_MANIFEST_NAME }}&lt;br/&gt;&lt;br/&gt;  # Build and package all the platform-agnostic(ish) things&lt;br/&gt;  build-global-artifacts:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&lt;br/&gt;      - install-deps&lt;br/&gt;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-latest&amp;#34;&lt;br/&gt;    env:&lt;br/&gt;      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}&lt;br/&gt;      BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json&lt;br/&gt;    steps:&lt;br/&gt;      - uses: actions/checkout@v4&lt;br/&gt;        with:&lt;br/&gt;          persist-credentials: false&lt;br/&gt;          submodules: recursive&lt;br/&gt;      - name: Install cached dist&lt;br/&gt;        uses: actions/download-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          name: cargo-dist-cache&lt;br/&gt;          path: ~/.cargo/bin/&lt;br/&gt;      - run: chmod &#43;x ~/.cargo/bin/dist&lt;br/&gt;      - name: Install-deps&lt;br/&gt;        shell: bash&lt;br/&gt;        run: |&lt;br/&gt;          if [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;Linux&amp;#34; ]]; then&lt;br/&gt;            sudo apt-get update&lt;br/&gt;            sudo apt-get install -y pkg-config libdbus-1-dev curl unzip&lt;br/&gt;&lt;br/&gt;            # Install a pinned modern protoc&lt;br/&gt;            PROTOC_ZIP=protoc-25.3-linux-x86_64.zip&lt;br/&gt;            curl -LO &lt;a href=&#34;https://github.com/protocolbuffers/protobuf/releases/download/v25.3/$PROTOC_ZIP&#34;&gt;https://github.com/protocolbuffers/protobuf/releases/download/v25.3/$PROTOC_ZIP&lt;/a&gt;&lt;br/&gt;            sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc&lt;br/&gt;            sudo unzip -o $PROTOC_ZIP -d /usr/local &amp;#39;include/*&amp;#39;&lt;br/&gt;            rm -f $PROTOC_ZIP&lt;br/&gt;&lt;br/&gt;          elif [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;macOS&amp;#34; ]]; then&lt;br/&gt;            brew install protobuf&lt;br/&gt;          elif [[ &amp;#34;${{ runner.os }}&amp;#34; == &amp;#34;Windows&amp;#34; ]]; then&lt;br/&gt;            choco install protoc --no-progress&lt;br/&gt;            echo &amp;#34;C:\ProgramData\chocolatey\bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&lt;br/&gt;          fi&lt;br/&gt;&lt;br/&gt;          protoc --version&lt;br/&gt;&lt;br/&gt;      # Get all the local artifacts for the global tasks to use (for e.g. checksums)&lt;br/&gt;      - name: Fetch local artifacts&lt;br/&gt;        uses: actions/download-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          pattern: artifacts-*&lt;br/&gt;          path: target/distrib/&lt;br/&gt;          merge-multiple: true&lt;br/&gt;      - id: cargo-dist&lt;br/&gt;        shell: bash&lt;br/&gt;        run: |&lt;br/&gt;          dist build ${{ needs.plan.outputs.tag-flag }} --output-format=json &amp;#34;--artifacts=global&amp;#34; &amp;gt; dist-manifest.json&lt;br/&gt;          echo &amp;#34;dist ran successfully&amp;#34;&lt;br/&gt;&lt;br/&gt;          # Parse out what we just built and upload it to scratch storage&lt;br/&gt;          echo &amp;#34;paths&amp;lt;&amp;lt;EOF&amp;#34; &amp;gt;&amp;gt; &amp;#34;$GITHUB_OUTPUT&amp;#34;&lt;br/&gt;          jq --raw-output &amp;#34;.upload_files[]&amp;#34; dist-manifest.json &amp;gt;&amp;gt; &amp;#34;$GITHUB_OUTPUT&amp;#34;&lt;br/&gt;          echo &amp;#34;EOF&amp;#34; &amp;gt;&amp;gt; &amp;#34;$GITHUB_OUTPUT&amp;#34;&lt;br/&gt;&lt;br/&gt;          cp dist-manifest.json &amp;#34;$BUILD_MANIFEST_NAME&amp;#34;&lt;br/&gt;      - name: &amp;#34;Upload artifacts&amp;#34;&lt;br/&gt;        uses: actions/upload-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          name: artifacts-build-global&lt;br/&gt;          path: |&lt;br/&gt;            ${{ steps.cargo-dist.outputs.paths }}&lt;br/&gt;            ${{ env.BUILD_MANIFEST_NAME }}&lt;br/&gt;  # Determines if we should publish/announce&lt;br/&gt;  host:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&lt;br/&gt;      - install-deps&lt;br/&gt;      - build-local-artifacts&lt;br/&gt;      - build-global-artifacts&lt;br/&gt;    # Only run if we&amp;#39;re &amp;#34;publishing&amp;#34;, and only if plan, local and global didn&amp;#39;t fail (skipped is fine)&lt;br/&gt;    if: ${{ always() &amp;amp;&amp;amp; needs.plan.result == &amp;#39;success&amp;#39; &amp;amp;&amp;amp; needs.plan.outputs.publishing == &amp;#39;true&amp;#39; &amp;amp;&amp;amp; (needs.build-global-artifacts.result == &amp;#39;skipped&amp;#39; || needs.build-global-artifacts.result == &amp;#39;success&amp;#39;) &amp;amp;&amp;amp; (needs.build-local-artifacts.result == &amp;#39;skipped&amp;#39; || needs.build-local-artifacts.result == &amp;#39;success&amp;#39;) }}&lt;br/&gt;    env:&lt;br/&gt;      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}&lt;br/&gt;    runs-on: &amp;#34;ubuntu-latest&amp;#34;&lt;br/&gt;    outputs:&lt;br/&gt;      val: ${{ steps.host.outputs.manifest }}&lt;br/&gt;    steps:&lt;br/&gt;      - uses: actions/checkout@v4&lt;br/&gt;        with:&lt;br/&gt;          persist-credentials: false&lt;br/&gt;          submodules: recursive&lt;br/&gt;      - name: Install cached dist&lt;br/&gt;        uses: actions/download-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          name: cargo-dist-cache&lt;br/&gt;          path: ~/.cargo/bin/&lt;br/&gt;      - run: chmod &#43;x ~/.cargo/bin/dist&lt;br/&gt;      # Fetch artifacts from scratch-storage&lt;br/&gt;      - name: Fetch artifacts&lt;br/&gt;        uses: actions/download-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          pattern: artifacts-*&lt;br/&gt;          path: target/distrib/&lt;br/&gt;          merge-multiple: true&lt;br/&gt;      - id: host&lt;br/&gt;        shell: bash&lt;br/&gt;        run: |&lt;br/&gt;          dist host ${{ needs.plan.outputs.tag-flag }} --steps=upload --steps=release --output-format=json &amp;gt; dist-manifest.json&lt;br/&gt;          echo &amp;#34;artifacts uploaded and released successfully&amp;#34;&lt;br/&gt;          cat dist-manifest.json&lt;br/&gt;          echo &amp;#34;manifest=$(jq -c &amp;#34;.&amp;#34; dist-manifest.json)&amp;#34; &amp;gt;&amp;gt; &amp;#34;$GITHUB_OUTPUT&amp;#34;&lt;br/&gt;      - name: &amp;#34;Upload dist-manifest.json&amp;#34;&lt;br/&gt;        uses: actions/upload-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          # Overwrite the previous copy&lt;br/&gt;          name: artifacts-dist-manifest&lt;br/&gt;          path: dist-manifest.json&lt;br/&gt;      # Create a GitHub Release while uploading all files to it&lt;br/&gt;      - name: &amp;#34;Download GitHub Artifacts&amp;#34;&lt;br/&gt;        uses: actions/download-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          pattern: artifacts-*&lt;br/&gt;          path: artifacts&lt;br/&gt;          merge-multiple: true&lt;br/&gt;      - name: Cleanup&lt;br/&gt;        run: |&lt;br/&gt;          # Remove the granular manifests&lt;br/&gt;          rm -f artifacts/*-dist-manifest.json&lt;br/&gt;      - name: Create GitHub Release&lt;br/&gt;        env:&lt;br/&gt;          PRERELEASE_FLAG: &amp;#34;${{ fromJson(steps.host.outputs.manifest).announcement_is_prerelease &amp;amp;&amp;amp; &amp;#39;--prerelease&amp;#39; || &amp;#39;&amp;#39; }}&amp;#34;&lt;br/&gt;          ANNOUNCEMENT_TITLE: &amp;#34;${{ fromJson(steps.host.outputs.manifest).announcement_title }}&amp;#34;&lt;br/&gt;          ANNOUNCEMENT_BODY: &amp;#34;${{ fromJson(steps.host.outputs.manifest).announcement_github_body }}&amp;#34;&lt;br/&gt;          RELEASE_COMMIT: &amp;#34;${{ github.sha }}&amp;#34;&lt;br/&gt;        run: |&lt;br/&gt;          # Write and read notes from a file to avoid quoting breaking things&lt;br/&gt;          echo &amp;#34;$ANNOUNCEMENT_BODY&amp;#34; &amp;gt; $RUNNER_TEMP/notes.txt&lt;br/&gt;&lt;br/&gt;          gh release create &amp;#34;${{ needs.plan.outputs.tag }}&amp;#34; --target &amp;#34;$RELEASE_COMMIT&amp;#34; $PRERELEASE_FLAG --title &amp;#34;$ANNOUNCEMENT_TITLE&amp;#34; --notes-file &amp;#34;$RUNNER_TEMP/notes.txt&amp;#34; artifacts/*&lt;br/&gt;&lt;br/&gt;  publish-homebrew-formula:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&lt;br/&gt;      - host&lt;br/&gt;      - install-deps&lt;br/&gt;      - build-local-artifacts&lt;br/&gt;      - build-global-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-latest&amp;#34;&lt;br/&gt;    env:&lt;br/&gt;      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}&lt;br/&gt;      PLAN: ${{ needs.plan.outputs.val }}&lt;br/&gt;      GITHUB_USER: &amp;#34;axo bot&amp;#34;&lt;br/&gt;      GITHUB_EMAIL: &amp;#34;admin&#43;bot@axo.dev&amp;#34;&lt;br/&gt;    if: ${{ !fromJson(needs.plan.outputs.val).announcement_is_prerelease || fromJson(needs.plan.outputs.val).publish_prereleases }}&lt;br/&gt;    steps:&lt;br/&gt;      - uses: actions/checkout@v4&lt;br/&gt;        with:&lt;br/&gt;          persist-credentials: true&lt;br/&gt;          repository: &amp;#34;gnostr-org/homebrew-gnostr&amp;#34;&lt;br/&gt;          token: ${{ secrets.HOMEBREW_TAP_TOKEN }}&lt;br/&gt;      # So we have access to the formula&lt;br/&gt;      - name: Fetch homebrew formulae&lt;br/&gt;        uses: actions/download-artifact@v4&lt;br/&gt;        with:&lt;br/&gt;          pattern: artifacts-*&lt;br/&gt;          path: Formula/&lt;br/&gt;          merge-multiple: true&lt;br/&gt;      # This is extra complex because you can make your Formula name not match your app name&lt;br/&gt;      # so we need to find releases with a *.rb file, and publish with that filename.&lt;br/&gt;      - name: Commit formula files&lt;br/&gt;        run: |&lt;br/&gt;          git config --global user.name &amp;#34;${GITHUB_USER}&amp;#34;&lt;br/&gt;          git config --global user.email &amp;#34;${GITHUB_EMAIL}&amp;#34;&lt;br/&gt;&lt;br/&gt;          for release in $(echo &amp;#34;$PLAN&amp;#34; | jq --compact-output &amp;#39;.releases[] | select([.artifacts[] | endswith(&amp;#34;.rb&amp;#34;)] | any)&amp;#39;); do&lt;br/&gt;            filename=$(echo &amp;#34;$release&amp;#34; | jq &amp;#39;.artifacts[] | select(endswith(&amp;#34;.rb&amp;#34;))&amp;#39; --raw-output)&lt;br/&gt;            name=$(echo &amp;#34;$filename&amp;#34; | sed &amp;#34;s/\.rb$//&amp;#34;)&lt;br/&gt;            version=$(echo &amp;#34;$release&amp;#34; | jq .app_version --raw-output)&lt;br/&gt;&lt;br/&gt;            export PATH=&amp;#34;/home/linuxbrew/.linuxbrew/bin:$PATH&amp;#34;&lt;br/&gt;            brew update&lt;br/&gt;            # We avoid reformatting user-provided data such as the app description and homepage.&lt;br/&gt;            brew style --except-cops FormulaAudit/Homepage,FormulaAudit/Desc,FormulaAuditStrict --fix &amp;#34;Formula/${filename}&amp;#34; || true&lt;br/&gt;&lt;br/&gt;            git add &amp;#34;Formula/${filename}&amp;#34;&lt;br/&gt;            git commit -m &amp;#34;${name} ${version}&amp;#34;&lt;br/&gt;          done&lt;br/&gt;          git push&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&lt;br/&gt;      - install-deps&lt;br/&gt;      - build-local-artifacts&lt;br/&gt;      - build-global-artifacts&lt;br/&gt;      - host&lt;br/&gt;      - publish-homebrew-formula&lt;br/&gt;    # use &amp;#34;always() &amp;amp;&amp;amp; ...&amp;#34; to allow us to wait for all publish jobs while&lt;br/&gt;    # still allowing individual publish jobs to skip themselves (for prereleases).&lt;br/&gt;    # &amp;#34;host&amp;#34; however must run to completion, no skipping allowed!&lt;br/&gt;    if: ${{ always() &amp;amp;&amp;amp; needs.host.result == &amp;#39;success&amp;#39; &amp;amp;&amp;amp; (needs.publish-homebrew-formula.result == &amp;#39;skipped&amp;#39; || needs.publish-homebrew-formula.result == &amp;#39;success&amp;#39;) }}&lt;br/&gt;    runs-on: &amp;#34;ubuntu-latest&amp;#34;&lt;br/&gt;    env:&lt;br/&gt;      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}&lt;br/&gt;    steps:&lt;br/&gt;      - uses: actions/checkout@v4&lt;br/&gt;        with:&lt;br/&gt;          persist-credentials: false&lt;br/&gt;          submodules: recursive&lt;br/&gt;
    </content>
    <updated>2026-04-04T23:08:26Z</updated>
  </entry>

</feed>