lumesh 0.18.2

a lighting shell ⚡ bash alternative
Documentation
name: Build Rust Cross

on:
  workflow_dispatch:
    inputs:
      version:
        description: "Version to deploy"
        required: true
  push:
    tags:
      - "c[0-9]+.*"
  release:
    types: [created]

jobs:
  create_release:
    name: Create release
    runs-on: ubuntu-latest
    outputs:
      upload_url: ${{ steps.create_release.outputs.upload_url }}
    steps:
      - name: Set variables
        id: vars
        run: echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT

      - name: Create release
        id: create_release
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          name: Cross Release ${{ steps.vars.outputs.tag }}
          draft: false
          prerelease: false
          body: |
            This is a new release of lumesh.
            [Read the changelog here](https://github.com/superiums/lumesh/blob/${{ steps.vars.outputs.tag }}/CHANGELOG.md).
            [Read the NEWS here](https://github.com/superiums/lumesh/blob/${{ steps.vars.outputs.tag }}/NEWS.md).
            [最新动态](https://github.com/superiums/lumesh/blob/${{ steps.vars.outputs.tag }}/NEWS-cn.md).

            - for unix user:
              download `install.sh` and install via this script is suggestted.

            - for windows user:
              download `lume-x86_64-pc-windows-gnu.exe` and launch it from `wt` or `cmder`.

              optional:
                pick up one or more cmds completion data from data.tgz if you need.
                as they're mainly for linux commands. but some are the same. eg: `wget`, `curl`

              know issue:
                use colorized prompt may leads cursor position move.

            - data.tgz: command param completion data and mod, example configs.
            - doc: help docs.

            **Binary variants:**
            - `lume-*`: interactive shell.
              for windows/macos: AI on HTTPS via system TLS (`ai-tls`, default)
              for linux/freebsd: AI on HTTP only.
                if AI on HTTPS needed, download `lume-*-ai-https` instead,
                or build on your machine to link to sysmtem TLS to get a lighter version. (install libssl-dev first and build with feature `ai-tls`)
            - `lume-*-ai-https`: interactive shell, HTTPS via ureq (`ai-https`)
            - `lume-se-*`: script engine only, no interactive shell, no AI

  build_docs:
    name: Build documentation
    needs: create_release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Generate docs
        run: |
          mkdir -p tmp/doc
          cp CHANGELOG.md tmp/doc/
          cp README.md tmp/doc/
          cp LICENSE tmp/doc/
          cp docs/INS_README.md tmp/doc/
          cp docs/RULE.md tmp/doc/
          cp docs/install.sh tmp/install.sh
          cp docs/install.ps1 tmp/install.ps1

      - name: Create compressed files
        run: |
          tar -czf data.tgz -C docs/data lumesh
          tar -czvf doc.tgz -C tmp doc

      - name: Upload docs and install scripts
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: |
            data.tgz
            doc.tgz
            tmp/install.sh
            tmp/install.ps1

  # ── lume (default: cli + ai-tls) ─────────────────────────────────────────────
  build:
    needs: [create_release]
    strategy:
      matrix:
        target:
          - x86_64-unknown-linux-gnu
          - x86_64-unknown-linux-musl
          - x86_64-apple-darwin
          - x86_64-pc-windows-gnu
          - aarch64-unknown-linux-gnu
          - aarch64-unknown-linux-musl
          - x86_64-unknown-freebsd
          - aarch64-linux-android
          - aarch64-apple-darwin
          - loongarch64-unknown-linux-gnu
          - loongarch64-unknown-linux-musl
        include:
          - target: x86_64-unknown-linux-gnu
            asset_name: lume-x86_64-linux-gnu
            binary_name: lume

          - target: x86_64-unknown-linux-musl
            asset_name: lume-x86_64-linux-musl
            binary_name: lume

          - target: x86_64-apple-darwin
            asset_name: lume-x86_64-apple-darwin
            binary_name: lume

          - target: x86_64-pc-windows-gnu
            asset_name: lume-x86_64-pc-windows-gnu.exe
            binary_name: lume.exe

          - target: aarch64-unknown-linux-gnu
            asset_name: lume-aarch64-linux-gnu
            binary_name: lume

          - target: aarch64-unknown-linux-musl
            asset_name: lume-aarch64-linux-musl
            binary_name: lume

          - target: x86_64-unknown-freebsd
            asset_name: lume-x86_64-freebsd
            binary_name: lume

          - target: aarch64-linux-android
            asset_name: lume-aarch64-linux-android
            binary_name: lume

          - target: aarch64-apple-darwin
            asset_name: lume-aarch64-apple-darwin
            binary_name: lume

          - target: loongarch64-unknown-linux-gnu
            asset_name: lume-loongarch64-linux-gnu
            binary_name: lume

          - target: loongarch64-unknown-linux-musl
            asset_name: lume-loongarch64-linux-musl
            binary_name: lume

    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Build Release
        uses: zijiren233/cargo-cross@v1
        with:
          command: build
          targets: ${{ matrix.target }}
          profile: release
          # use ai-tils feature only on mac/win, not on linux/freebsd
          features: ${{ (contains(matrix.target, 'apple') || contains(matrix.target, 'windows')) && 'cli,ai-tls' || 'cli' }}
          bin: lume
          build-std: true
          toolchain: nightly

      - name: Rename binary
        run: cp target/${{ matrix.target }}/release/${{ matrix.binary_name }} ${{ matrix.asset_name }}

      - name: Upload binary
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: ${{ matrix.asset_name }}

  # ── lume with ai-https ────────────────────────────────────────────────────────
  build_https:
    name: Build lume (ai-https)
    needs: [create_release]
    strategy:
      matrix:
        target:
          - x86_64-unknown-linux-gnu
          - x86_64-unknown-linux-musl
          - x86_64-apple-darwin
          - x86_64-pc-windows-gnu
          - aarch64-unknown-linux-gnu
          - aarch64-unknown-linux-musl
          - x86_64-unknown-freebsd
          - aarch64-linux-android
          - aarch64-apple-darwin
          - loongarch64-unknown-linux-gnu
          - loongarch64-unknown-linux-musl
        include:
          - target: x86_64-unknown-linux-gnu
            asset_name: lume-x86_64-linux-gnu-ai-https
            binary_name: lume

          - target: x86_64-unknown-linux-musl
            asset_name: lume-x86_64-linux-musl-ai-https
            binary_name: lume

          - target: x86_64-apple-darwin
            asset_name: lume-x86_64-apple-darwin-ai-https
            binary_name: lume

          - target: x86_64-pc-windows-gnu
            asset_name: lume-x86_64-pc-windows-gnu-ai-https.exe
            binary_name: lume.exe

          - target: aarch64-unknown-linux-gnu
            asset_name: lume-aarch64-linux-gnu-ai-https
            binary_name: lume

          - target: aarch64-unknown-linux-musl
            asset_name: lume-aarch64-linux-musl-ai-https
            binary_name: lume

          - target: x86_64-unknown-freebsd
            asset_name: lume-x86_64-freebsd-ai-https
            binary_name: lume

          - target: aarch64-linux-android
            asset_name: lume-aarch64-linux-android-ai-https
            binary_name: lume

          - target: aarch64-apple-darwin
            asset_name: lume-aarch64-apple-darwin-ai-https
            binary_name: lume

          - target: loongarch64-unknown-linux-gnu
            asset_name: lume-loongarch64-linux-gnu-ai-https
            binary_name: lume

          - target: loongarch64-unknown-linux-musl
            asset_name: lume-loongarch64-linux-musl-ai-https
            binary_name: lume

    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Build Release (ai-https)
        uses: zijiren233/cargo-cross@v1
        with:
          command: build
          targets: ${{ matrix.target }}
          profile: release
          features: cli,ai-https
          no-default-features: true
          bin: lume
          build-std: true
          toolchain: nightly

      - name: Rename binary
        run: cp target/${{ matrix.target }}/release/${{ matrix.binary_name }} ${{ matrix.asset_name }}-ai-https

      - name: Upload binary
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: ${{ matrix.asset_name }}-ai-https

  # ── lume-se (script engine, no CLI, no AI) ────────────────────────────────────
  build_se:
    name: Build lume-se
    needs: [create_release]
    strategy:
      matrix:
        target:
          - x86_64-unknown-linux-gnu
          - x86_64-unknown-linux-musl
          - x86_64-apple-darwin
          - x86_64-pc-windows-gnu
          - aarch64-unknown-linux-gnu
          - aarch64-unknown-linux-musl
          - x86_64-unknown-freebsd
          - aarch64-linux-android
          - aarch64-apple-darwin
          - loongarch64-unknown-linux-gnu
          - loongarch64-unknown-linux-musl
        include:
          - target: x86_64-unknown-linux-gnu
            asset_name: lume-se-x86_64-linux-gnu
            binary_name: lume-se
          - target: x86_64-unknown-linux-musl
            asset_name: lume-se-x86_64-linux-musl
            binary_name: lume-se
          - target: x86_64-apple-darwin
            asset_name: lume-se-x86_64-apple-darwin
            binary_name: lume-se
          - target: x86_64-pc-windows-gnu
            asset_name: lume-se-x86_64-pc-windows-gnu.exe
            binary_name: lume-se.exe
          - target: aarch64-unknown-linux-gnu
            asset_name: lume-se-aarch64-linux-gnu
            binary_name: lume-se
          - target: aarch64-unknown-linux-musl
            asset_name: lume-se-aarch64-linux-musl
            binary_name: lume-se
          - target: x86_64-unknown-freebsd
            asset_name: lume-se-x86_64-freebsd
            binary_name: lume-se
          - target: aarch64-linux-android
            asset_name: lume-se-aarch64-linux-android
            binary_name: lume-se
          - target: aarch64-apple-darwin
            asset_name: lume-se-aarch64-apple-darwin
            binary_name: lume-se
          - target: loongarch64-unknown-linux-gnu
            asset_name: lume-se-loongarch64-linux-gnu
            binary_name: lume-se
          - target: loongarch64-unknown-linux-musl
            asset_name: lume-se-loongarch64-linux-musl
            binary_name: lume-se
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Build Release (se)
        uses: zijiren233/cargo-cross@v1
        with:
          command: build
          targets: ${{ matrix.target }}
          profile: release
          features: runner
          no-default-features: true
          bin: lume-se
          build-std: true
          toolchain: nightly

      - name: Rename binary
        run: cp target/${{ matrix.target }}/release/${{ matrix.binary_name }} ${{ matrix.asset_name }}

      - name: Upload binary
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: ${{ matrix.asset_name }}