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

  <title>Nostr notes by .github/workflows/release.yml</title>
  <author>
    <name>.github/workflows/release.yml</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.ae/npub1uunsvp86pvuy7fcyg9mycy7ruc9570atr2dstqgrsakuy6j5qvrquhp9fl.rss" />
  <link href="https://nostr.ae/npub1uunsvp86pvuy7fcyg9mycy7ruc9570atr2dstqgrsakuy6j5qvrquhp9fl" />
  <id>https://nostr.ae/npub1uunsvp86pvuy7fcyg9mycy7ruc9570atr2dstqgrsakuy6j5qvrquhp9fl</id>
  <icon>https://avatars.githubusercontent.com/u/135379339?s=400&amp;u=11cb72cccbc2b13252867099546074c50caef1ae&amp;v=4</icon>
  <logo>https://avatars.githubusercontent.com/u/135379339?s=400&amp;u=11cb72cccbc2b13252867099546074c50caef1ae&amp;v=4</logo>




  <entry>
    <id>https://nostr.ae/nevent1qqstnrw653r5jh6vvgsleu9z0fvts7f8tcrj339uvwu6406lhawuzfqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvmj3far</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstnrw653r5jh6vvgsleu9z0fvts7f8tcrj339uvwu6406lhawuzfqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvmj3far" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T13:33:13Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs26rdkcjgvxqhvaf0tnzw2c7pr726clutkaer0dxvelk74eeplmsczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvhqtmv8</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs26rdkcjgvxqhvaf0tnzw2c7pr726clutkaer0dxvelk74eeplmsczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvhqtmv8" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T13:30:43Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsx2fuknzt5fkpwml9sgx9ear5kfvlcp9hcmjtuhm6ccq25pr6kj9czyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv2d3f43</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsx2fuknzt5fkpwml9sgx9ear5kfvlcp9hcmjtuhm6ccq25pr6kj9czyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv2d3f43" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T13:29:26Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqstn5yp5ykmk7rts3k94y2vdfjzathdwyrk5kps09v4dukjjhjzjngzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv7ehcfd</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstn5yp5ykmk7rts3k94y2vdfjzathdwyrk5kps09v4dukjjhjzjngzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv7ehcfd" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:58:27Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0ffx2r5dgrnfw4akdkm38r5tuw8n8tufmlknleer0qmqmm83c26qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvlpch07</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0ffx2r5dgrnfw4akdkm38r5tuw8n8tufmlknleer0qmqmm83c26qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvlpch07" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:56:22Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs23h58avmak20wl6km5cydnzwd4u8z4whzvx2dl3j6y8ak500uwagzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvegxh6y</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs23h58avmak20wl6km5cydnzwd4u8z4whzvx2dl3j6y8ak500uwagzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvegxh6y" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:54:54Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2l8gldtu6q92p979rkz328lu23nwn4w2463trnqjz2g4uh08cvvqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvu6mwjr</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2l8gldtu6q92p979rkz328lu23nwn4w2463trnqjz2g4uh08cvvqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvu6mwjr" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:49:53Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs959225n4klmam7dlvzku3ewx3j3lmhlsymensklar37rwpzd7xuszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv5fa8km</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs959225n4klmam7dlvzku3ewx3j3lmhlsymensklar37rwpzd7xuszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv5fa8km" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:48:17Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsw8nqfqfk4v3ffmjm2hwkk6r2lnq4u9h6htyde6pzzfj3lxa0dkrgzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvtsk25l</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsw8nqfqfk4v3ffmjm2hwkk6r2lnq4u9h6htyde6pzzfj3lxa0dkrgzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvtsk25l" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:47:40Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdn4mevr0vswkudtj7wfch39jcgl0gy7c4fugnv5daxxc7us2d68qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv6avuwe</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdn4mevr0vswkudtj7wfch39jcgl0gy7c4fugnv5daxxc7us2d68qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv6avuwe" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:45:41Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsgvj0lnr4za4rzc4qa58258wfr9hjzqd8hxml0drsvk29wjnl6q5gzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvee9v36</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsgvj0lnr4za4rzc4qa58258wfr9hjzqd8hxml0drsvk29wjnl6q5gzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvee9v36" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:42:08Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszder99j6ewgcw00zgzcj3x8zme3zxndma8f9lwyhhmss5ttmmayczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv4f2xxj</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszder99j6ewgcw00zgzcj3x8zme3zxndma8f9lwyhhmss5ttmmayczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv4f2xxj" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:41:38Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvsm20yz2mj5ehutcz6jkl95quw2gp9l5hlqql5ejdq5q8mnhaz3qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvjwkaf4</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvsm20yz2mj5ehutcz6jkl95quw2gp9l5hlqql5ejdq5q8mnhaz3qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvjwkaf4" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:30:04Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrntzdxtfver65qfh70th3sk549qevuhwztdpjz9j4rh969r505rqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvk9hn80</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrntzdxtfver65qfh70th3sk549qevuhwztdpjz9j4rh969r505rqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvk9hn80" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:26:27Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsg4djg5fkh55h7d57l4qjwrtz7h3lde70eysff36uq2uahn8m47mqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvahuxre</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsg4djg5fkh55h7d57l4qjwrtz7h3lde70eysff36uq2uahn8m47mqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvahuxre" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:25:08Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsgv78zjs5u0ld7sss3pz70xdp68yzwkp55nc77m2mdn7v2mlhgc9czyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvgefknh</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsgv78zjs5u0ld7sss3pz70xdp68yzwkp55nc77m2mdn7v2mlhgc9czyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvgefknh" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:17:18Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8afync384yhnau7zwy0xh9fsv8uy7yz5a3ghvk0wu0hf5d5pgh7czyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvneq6e7</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8afync384yhnau7zwy0xh9fsv8uy7yz5a3ghvk0wu0hf5d5pgh7czyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvneq6e7" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T12:15:47Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs87mkc039r7pl9f0hzyt5lk9ff50xka4gzfsdp7ej2lwm7segy99qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv2jxvh9</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs87mkc039r7pl9f0hzyt5lk9ff50xka4gzfsdp7ej2lwm7segy99qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv2jxvh9" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T11:58:41Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs08tm3q6v5cremd38mcas52wrpag954707ga2hv8v58fqfu57vn5qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv706f9c</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs08tm3q6v5cremd38mcas52wrpag954707ga2hv8v58fqfu57vn5qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv706f9c" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T11:57:03Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsd72fp0l3llj4ccjukftgzpa27aqzx4w7g9jx0euf4pyu4rfehr2szyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvnyqhug</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsd72fp0l3llj4ccjukftgzpa27aqzx4w7g9jx0euf4pyu4rfehr2szyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvnyqhug" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T11:49:52Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyvjpg6s8g67v6dr8z04hcuxtfmrvcttcmd3plw7jynn2ar8fu9hqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvwsfqnv</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyvjpg6s8g67v6dr8z04hcuxtfmrvcttcmd3plw7jynn2ar8fu9hqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvwsfqnv" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T02:15:33Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyjed08pg52pv8585x6ajy2u0l7c2t4h42ftwctmsntz8yapm8rjczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv35s9kv</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyjed08pg52pv8585x6ajy2u0l7c2t4h42ftwctmsntz8yapm8rjczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv35s9kv" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T02:10:45Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszmk9fc0nsyd97e4snsxdqy439584yln88z7tat55m79xd58n7fqczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvmxvw80</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszmk9fc0nsyd97e4snsxdqy439584yln88z7tat55m79xd58n7fqczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvmxvw80" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T02:10:27Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8x7g3yzznte02thk3vuydqypqqv8pw7a7v7g8w0fhydxr5zvrxhgzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvvzkvjp</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8x7g3yzznte02thk3vuydqypqqv8pw7a7v7g8w0fhydxr5zvrxhgzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvvzkvjp" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T01:51:32Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqx6ypewwaumzy0s37leurtfdmchnx2w2493ha04c8c6dutneyatqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvdmn8vc</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqx6ypewwaumzy0s37leurtfdmchnx2w2493ha04c8c6dutneyatqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvdmn8vc" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T01:33:47Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqswmmq4fx38r3gtfj92lrkppnv0ha5zv5xyje0rfmmwkvd5w64a5hczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv4k808w</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqswmmq4fx38r3gtfj92lrkppnv0ha5zv5xyje0rfmmwkvd5w64a5hczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv4k808w" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T01:32:55Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvrcytt0flqs5qh78px938w9e0cqw889nzf9ee70f20770uk3gfdczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvtvrew5</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvrcytt0flqs5qh78px938w9e0cqw889nzf9ee70f20770uk3gfdczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvtvrew5" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T01:31:00Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdnudclfejrplv83em47k3pahgw54gtazmu4nqylx32q273377ggqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvklkul0</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdnudclfejrplv83em47k3pahgw54gtazmu4nqylx32q273377ggqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvklkul0" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T01:30:29Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsr74pz7ue6p5ycq55aaa6ywfmmasxhryw68ztq0gmegqme389qjuqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvxx4dkg</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsr74pz7ue6p5ycq55aaa6ywfmmasxhryw68ztq0gmegqme389qjuqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvxx4dkg" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T01:27:50Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqstz6cy4ms6qxj2urs2ad7u2vaesrj6hrxlwxkjngqwpfvwczdnkdszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvdm4w7u</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstz6cy4ms6qxj2urs2ad7u2vaesrj6hrxlwxkjngqwpfvwczdnkdszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvdm4w7u" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T01:24:44Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsf4actwzesz6sj7fjgnnwqckmujecd2r8c50pvq9pf8crajr2pedszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvu4ka7y</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsf4actwzesz6sj7fjgnnwqckmujecd2r8c50pvq9pf8crajr2pedszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvu4ka7y" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T01:23:38Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxx6xj7pqll5d528874zcjusd0sgf7dpl74a4r7mc4yh0nzl9mjsqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvcexy2n</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxx6xj7pqll5d528874zcjusd0sgf7dpl74a4r7mc4yh0nzl9mjsqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvcexy2n" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T01:17:45Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0cw5vufrvfkmtxl53w8vkzxxu673n697kp3nngj6lty5ma4xkjgqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv0sk9fu</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0cw5vufrvfkmtxl53w8vkzxxu673n697kp3nngj6lty5ma4xkjgqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv0sk9fu" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T00:48:51Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvzr9deys7ajsltj7vyed90v89q90r7a0mytjku6qpnjjv0hneh6gzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv4m94a2</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvzr9deys7ajsltj7vyed90v89q90r7a0mytjku6qpnjjv0hneh6gzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv4m94a2" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T00:31:28Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsva9g4nu8308qq9fkyeglkykcm9wqru2hhfjs32qcq3wvfmsa44kgzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv6gpnqq</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsva9g4nu8308qq9fkyeglkykcm9wqru2hhfjs32qcq3wvfmsa44kgzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv6gpnqq" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T00:16:47Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqswuuk9wnqnyptegxy923egsqkpsyvmatsthwu533xtxhazz602vrczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvyz6298</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqswuuk9wnqnyptegxy923egsqkpsyvmatsthwu533xtxhazz602vrczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvyz6298" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T00:16:30Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs23tpfe5g0nypz9ayyqv2dajra0qhv4qffqykjweec9vw7cxkf89gzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvcej2y7</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs23tpfe5g0nypz9ayyqv2dajra0qhv4qffqykjweec9vw7cxkf89gzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvcej2y7" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-03T00:06:23Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfrg740e7rgahesm2znqka3l3e2e9nvws8jrfu2hqs765xp2wcg4gzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv2r63lj</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfrg740e7rgahesm2znqka3l3e2e9nvws8jrfu2hqs765xp2wcg4gzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv2r63lj" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T23:53:03Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsveck9vnynaqnp52s03uhj3wedzm0yaaw8fw7ef7aee08r8xfsxugzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvxrc3mk</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsveck9vnynaqnp52s03uhj3wedzm0yaaw8fw7ef7aee08r8xfsxugzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvxrc3mk" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T23:49:16Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxqc2exfa0ka224ntdjnhmhrt5drdhuwgmypgj3xn98tw0kygm2sqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv5rkftj</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxqc2exfa0ka224ntdjnhmhrt5drdhuwgmypgj3xn98tw0kygm2sqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv5rkftj" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T23:47:55Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrr26ks5j7ckp27gyyd88gm2hqg2s2w3am2ny4k29ufwnw8gec0wszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvcel4fd</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrr26ks5j7ckp27gyyd88gm2hqg2s2w3am2ny4k29ufwnw8gec0wszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvcel4fd" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T23:40:36Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9evs4afwknc78xja2wasp2gqd73f8d936knx5yd9qnl8k8u70agqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvacddzl</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9evs4afwknc78xja2wasp2gqd73f8d936knx5yd9qnl8k8u70agqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvacddzl" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T23:32:10Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2lqsyxghjeal7ys3c4kug6q08uqqqwfd0vnpcdv2nrul9c2m5mlqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvu2ms5e</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2lqsyxghjeal7ys3c4kug6q08uqqqwfd0vnpcdv2nrul9c2m5mlqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvu2ms5e" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T23:26:36Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdchs6jcxlx3cqfmdw9a9usskqc0mgf98jus2la0qgrcnfr83fdzszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvwp9afr</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdchs6jcxlx3cqfmdw9a9usskqc0mgf98jus2la0qgrcnfr83fdzszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvwp9afr" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T23:25:46Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfuv64ydw7k7lpnr6g88pgpca4zm62sf6gf46urcx0a0yw6avlnmczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvxwlryu</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfuv64ydw7k7lpnr6g88pgpca4zm62sf6gf46urcx0a0yw6avlnmczyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvxwlryu" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T23:18:32Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8u0pzgxf6z9lyn52n0xvlzu6rfj6qepugud5kpeqvw0cd8mu047qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvtf2jf0</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8u0pzgxf6z9lyn52n0xvlzu6rfj6qepugud5kpeqvw0cd8mu047qzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvtf2jf0" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T23:00:32Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxncm39hspu5ucjpvumffwsutukcuurmeakg4seghk76gje5wwjyszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvw0p54z</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxncm39hspu5ucjpvumffwsutukcuurmeakg4seghk76gje5wwjyszyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvw0p54z" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T22:44:53Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqaec59gdf330veycn5v0yhqhv2rqm3ss5mfd6us8cm50w0hk2k2szyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvh3mezn</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqaec59gdf330veycn5v0yhqhv2rqm3ss5mfd6us8cm50w0hk2k2szyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvh3mezn" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T22:39:38Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2v9aggx2ulw8gvfahnupp7z8avsclg08mhe3xxcgxvy2gz6cmphqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv58kmqe</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2v9aggx2ulw8gvfahnupp7z8avsclg08mhe3xxcgxvy2gz6cmphqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv58kmqe" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T22:35:58Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfvzcwzm6t904at2asszucr6klhhsd7werx0cnp4pv79gfczy358gzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvd3yghk</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfvzcwzm6t904at2asszucr6klhhsd7werx0cnp4pv79gfczy358gzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvd3yghk" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T22:29:24Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszxz6wdvud6t2gfsur3y3vkvxjw7krj5jw50lkzmwhfkan9gyme5szyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv478nhq</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszxz6wdvud6t2gfsur3y3vkvxjw7krj5jw50lkzmwhfkan9gyme5szyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv478nhq" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T22:28:45Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqs5r9y0k73egrgna4lu2qjfy4yg34u3qczmvs5sre9wvrmgvex8czyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv9e6h07</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqs5r9y0k73egrgna4lu2qjfy4yg34u3qczmvs5sre9wvrmgvex8czyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsv9e6h07" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T22:24:06Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqswlcnazn4ld0ayprgk7u3903t6znxx90p729s9lkunehzuwc92tmqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvxf9chj</id>
    
      <title type="html"># This file was autogenerated by dist: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqswlcnazn4ld0ayprgk7u3903t6znxx90p729s9lkunehzuwc92tmqzyrnjwpsylg9nsne8q3qhvnqnc0nqknel4vdfkpvpqwrkmsn22spsvxf9chj" />
    <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;  push:&lt;br/&gt;    tags:&lt;br/&gt;      - &amp;#34;**[0-9]&#43;.[0-9]&#43;.[0-9]&#43;*&amp;#34;&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;  plan:&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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: 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;      - build-local-artifacts&lt;br/&gt;    runs-on: &amp;#34;ubuntu-22.04&amp;#34;&lt;br/&gt;    env:&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;      # 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;      - 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-22.04&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 sccache&lt;br/&gt;      #  run: |&lt;br/&gt;      #    cargo install sccache --version 0.4.0 --locked&lt;br/&gt;      #    echo &amp;#34;$HOME/.cargo/bin&amp;#34; &amp;gt;&amp;gt; $GITHUB_PATH&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;    runs-on: &amp;#34;ubuntu-22.04&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 origin HEAD&lt;br/&gt;          cargo build --release --features nostr&lt;br/&gt;&lt;br/&gt;  announce:&lt;br/&gt;    needs:&lt;br/&gt;      - plan&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-22.04&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-02T22:20:08Z</updated>
  </entry>

</feed>