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!!!
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:
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?!
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 제품군을 사용하고 있다면 환상적인 플러그인입니다.
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!