Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menerbitkan Apl CLI (dengan Apt & YUM)

Menerbitkan Apl CLI (dengan Apt & YUM)

Susan Sarandon
Susan Sarandonasal
2024-10-05 06:10:30851semak imbas

Publishing CLI Apps (with Apt & YUM)

Pengenalan

Saya mula menjadi peminat apl CLI sejak akhir-akhir ini. Mungkin ia adalah tarikan terminal zaman kanak-kanak saya (bermula dengan DOS pada 486/33 dan Apple IIe lama ayah saya). Saya dilahirkan agak terlambat untuk era Gen X Commodore64, tetapi tepat pada masanya untuk mengetahui lebih lanjut daripada Windows 95. Ia adalah era yang menarik, ketika dial up dan 56k modem adalah raja. Saya tahu kebanyakan catatan blog hari ini mempunyai intro fluff, untuk menambah jumlah perkataan untuk SEO, tetapi ini sebenarnya sebab saya masih menyukai CLI apabila ramai orang muda hari ini hanya mengetahui aplikasi GUI. Tiada apa yang lebih menggembirakan saya apabila melihat kanak-kanak Gen Z menghidupkan terminal, walaupun untuk tugasan mudah. Lelaki, tunggu sehingga Gen Alpha mengetahui apa itu BBS. "Komputer datuk" mereka mungkin akan berkata ?. “LEPAS RUANG SAYA” ✊✊

Projek seperti CoolRetroTerm pastinya mendapat tempat yang hangat di hati saya, untuk mengembalikan cinta CLI. Saya masih lebih suka melakukan beberapa blog saya dalam Micro pada Netbook lama saya, benar-benar membolehkan anda menumpukan perhatian kepada hanya menulis. VSCode ZenMode dan MarkText datang hampir?


flowchart LR
Build_App --> GH_Actions --> ??? --> Profit!!!



Pembungkusan

Bagaimanapun, saya menyimpang…

Jadi selepas menulis Stampy aplikasi CLI kecil saya, saya menghadapi masalah kecil, bagaimana untuk mengedarkannya? Sekurang-kurangnya saya cukup bijak untuk berfikir dan menulisnya dalam GoLang (sama seperti saya mahu membinanya dalam Python) untuk mengelakkan kemarahan Pembungkusan Python yang digeruni. Satu perkara yang selalu membingungkan saya ialah, cara orang ramai menerbitkan apl CLI bagus mereka kepada sistem pengurusan pakej mewah seperti APT dan YUM.

Biasanya untuk membina apl anda, anda hanya perlu membuat binaan mudah sahaja. dan ledakan, binari segera. Walaupun ini bagus untuk pembangun tempatan, ia tidak banyak memberi manfaat untuk penyusunan platform silang. Terdapat beberapa panduan bagus untuk menunjukkan kepada anda cara melakukannya, tetapi… tl;dr untuk saya ??. Jadi saya melakukan beberapa lagi penggalian, mesti ada alat yang bagus… dan pastinya, ada GoReleaser!

Selepas membaca beberapa dokumentasi bertulis yang sangat baik, saya dapat melakukan binaan platform silang setempat yang pantas, mudah.


goreleaser --snapshot --clean



Membuat binaan berlaku dengan keluaran GitHub juga mudah, kerana mereka mempunyai Tindakan GH pratulis yang bagus!

Pengguna kini hanya boleh memasang apl saya dengan alatan seperti eget (baik) dan rebus (lebih baik)!

Walaupun anda juga boleh memasang github.com/xxx, semua yang akan dilakukan ialah mengklon repo, membinanya secara setempat dan meletakkan tong sampah dalam folder $GOBIN anda. Tidak benar-benar sama dengan alatan pengurusan pakej yang betul, tetapi ia berfungsi dalam keadaan darurat untuk orang yang sudah memasang Go. Bukan pilihan untuk pengguna biasa IMHO. ?

Dan bukan itu sahaja, GoReleaser juga menawarkan pembungkusan! Jadi sekarang anda boleh membuat DEB dan RPM dengan mudah. Saya selangkah lebih dekat dengan apt-get install stampy yang takut. Satu-satunya perkara yang hilang ialah cara membuat repo APT. Bahagian utama terakhir ini tidak mudah pasti. Saya menghabiskan satu jam atau lebih melihat cara untuk mengehos sendiri ini dengan Halaman GitHub, dan walaupun ia boleh dilakukan, adalah lebih mudah untuk hanya menggunakan perkhidmatan percuma seperti Packagecloud untuk mengendalikan pengehosan menandatangani dan repo dengan kos rendah $0 setiap bulan?.

Anda boleh melihat contoh keseluruhan aliran kerja DI SINI

Saya juga akan memasukkan versi yang telah dilucutkan di sini dalam blok kod, untuk sesiapa sahaja yang terjumpa siaran blog itu sendiri.

Untuk gambaran keseluruhan tahap tinggi, GHA melakukan perkara berikut:

  • Menulis konfigurasi GoReleaser dia
  • Menjalankan Pelepas itu sendiri
  • Memuat naik .debs untuk kerja seterusnya
  • Dalam kerja berantai, kami menarik .deb dan memuat naiknya ke PackageCloud
  • Selesai!

Contoh Tindakan GitHub


name: Release

on:
  pull_request:
  push:
    # run only against tags
    tags:
      - "*"

permissions:
  contents: write
  packages: write
  issues: write

jobs:
  goreleaser:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: stable

      - name: Release config
        run: |
          cat << EOF > /tmp/goreleaser-github.yaml
          project_name: EXAMPLE
          version: 2
          builds:
            - env: [CGO_ENABLED=0]
              goos:
                - linux
              goarch:
                - amd64
          nfpms:
            -
              maintainer: YOU <your@email.com>
              bindir: /usr/local/bin
              description: Copy formatted timestamp to system clipboard
              homepage: https://github.com/USERNAME/REPO
              license: MIT
              formats:
                - deb

          release:
            draft: false # If set to true, will not auto-publish the release.
            replace_existing_draft: true
            replace_existing_artifacts: true
            target_commitish: "{{ .Commit }}"
            prerelease: auto
            make_latest: true
            mode: replace
            include_meta: true
          EOF          

      - name: Run GoReleaser
        uses: goreleaser/goreleaser-action@v6
        with:
          distribution: goreleaser
          # 'latest', 'nightly', or a semver
          version: "~> v2"
          args: release --clean --verbose --config /tmp/goreleaser-github.yaml
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Upload .deb artifact x86
        uses: actions/upload-artifact@v3
        with:
          name: deb-package
          path: dist/*amd64.deb

  pkgcld_amd64-deb:
    runs-on: ubuntu-latest
    needs:
      - goreleaser
    strategy:
      max-parallel: 3
      matrix:
        distro:
        - debian/bookworm
        - ubuntu/noble
        - ubuntu/jammy
    steps:
      - name: Download .deb artifact
        uses: actions/download-artifact@v3
        with:
          name: deb-package

      - name: Push package to packagecloud.io
        uses: computology/packagecloud-github-action@v0.6
        with:
          package-name: ./*.deb
          packagecloud-username: USERNAME
          packagecloud-reponame: APP_NAME
          packagecloud-distro: ${{ matrix.distro }}
          packagecloud-token: ${{ secrets.PACKAGECLOUD_TOKEN }}




ℹ️ Penting

Anda perlu memastikan perkara seperti struktur atur cara dan fail go.mod anda disediakan dengan betul, atau anda akan menghadapi masalah dengan menerbitkan apl anda dengan betul.

Nota sampingan: Anda juga boleh mengedarkan apl anda dengan Homebrew, tetapi saya tidak peduli kerana kerumitan GH Actions tambahan yang melibatkan rahsia PAT dan hakikat bahawa saya dilindungi dengan baik dengan Apt, Sedap, dan Rebus… sedap! ?

Ini membawa saya kepada perkara kedua yang besar apabila mengeluarkan apl. ?DOKUMENTASI? dan Readme.md yang terabai?!

Pemformatan Readme

Terdapat beberapa elemen yang saya rasa seperti mana-mana readme yang baik perlu ada, kerana ia akan membantu apl anda menonjol daripada semua apl dengan sedikit atau tiada dokumentasi, atau lebih teruk lagi, dokumentasi yang buruk.

자신만의 Readme를 작성하려면 이 형식을 따르는 것이 좋습니다! 저는 멋진 배지를 좋아하지만 GUI 앱의 스크린샷을 나열하는 것처럼 작은 GIF 데모를 통해 사람들에게 그 내용을 실제로 보여줄 수 있다고 생각합니다. ASCIINEMA를 사용하는 것은 충분히 쉬웠으며 모든 것을 올바르게 표시할 수 있는 멋진 GIF 변환기도 있습니다.

? 팁

부담으로 CodeGPT에서 GoLang 단위 테스트를 작성해 달라고 요청했는데, 일반적으로 작성하기 힘든 작업이었습니다. JetBrains 제품군을 사용하고 있다면 환상적인 플러그인입니다.

읽어보기 예

  • 테스트 배지
  • GIF 데모
  • 취재 뱃지
  • 성적표 바로가기
  • 설치
    • 패키지 관리자(예: 적절)
    • 바이너리 설치(예: eget)
    • 스닙 설치하러 가기
  • 사용법
    • 명확한 지침 및 예제 코드 캡처
  • 설정
    • 설정이 저장되는 위치
    • INI 파일, JSON, Env Vars를 사용하시나요?
  • 내장 도움말에 액세스하는 방법
  • 소스에서 앱을 빌드하는 방법
  • 선행미술(일명 전작/영감)

마무리

Python 앱 게시 방법을 배우기 시작했을 때와 마찬가지로 앞으로 GoLang에서 작성하는 모든 앱을 제대로 배포할 수 있을 것 같다고 말할 수 있어서 기쁩니다. 이는 제가 습득한 훌륭한 기술이며, 이 블로그 게시물을 통해 다른 사람들도 같은 작업을 수행하는 데 도움이 되기를 바랍니다! 건배!

-젤로이터


? 마스토돈 | ? 이메일 | ? 댓글 | 😄 커피 한잔 사주세요

Atas ialah kandungan terperinci Menerbitkan Apl CLI (dengan Apt & YUM). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn