Inofficiell
På den här sidan
  1. 01Innan du börjar
  2. 02Spegla författarens förråd
  3. 03Ett eget paketeringsprojekt
  4. 04En token med skrivskyddad åtkomst för spegeln
  5. 05Arbetsflödet
  6. 06Körningar, tester och paketet

Spegla författarens Git, kör testerna, bygg ett QPKG: CI på din NAS

Forgejo på din NAS har en pull-spegel av ett programs förråd. Ett separat paketeringsprojekt bygger varje dag författarens senaste utgåva på NAS:ens egen runner, kör författarens tester och gör ett QPKG av den. Exemplet är fzy, en liten fuzzy-sökare skriven i C (MIT-licens).

  1. ModulerGit, CI, Redigerare
  2. Spegelförfattarens förråd
  3. ProjektNytt projekt, QPKG-paket
  4. Arbetsflödehämta, testa, bygg
  5. Körningardagligen, vid push, för hand

Bilderna kommer från panelen och Forgejo i Bucket & Code Server IDE, med varje fält ifyllt så som den här guiden beskriver. Kontot heter ola.

01Innan du börjar

  • Git, CI och Redigerare måste vara på. En modul som är av har en knapp på sin ruta i Översikt och på sin egen sida: Slå på Git, Slå på Redigerare, och Slå på Git och CI medan Git fortfarande är av.
  • QDK måste vara installerat: installera QNAP QDK 2.5.0 på sidan Verktygskedjor, fliken QNAP.
  • Du behöver byggmiljön för Ubuntu 24.04: Appar → Exempel, eller Skapa en Builder-miljö på sidan Ny app. Arbetsflödet bygger i den.
  • NAS:en måste kunna nå internet: actions/checkout och actions/upload-artifact hämtas från data.forgejo.org, och spegeln hämtar från författarens server.

Runnern på NAS:en tar hand om de jobb vars runs-on anger någon av dess etiketter, till exempel bucketvs. Den kör varje jobb på NAS:en själv, som admin. Den som kan pusha ett arbetsflöde till ett förråd kan alltså köra kommandon som admin på NAS:en: ge push-åtkomst bara till personer som du skulle anförtro NAS:ens adminlösenord.

CI-sidans Runners-kort: nas-x86_64 på den här NAS:en, inaktiv, med etiketterna bucketvs, qnap-x86_64 och self-hosted

02Spegla författarens förråd

  1. I Forgejo (Öppna Forgejo på sidan Git) trycker du på + → Ny migrering → Git.
  2. Klistra in adressen till författarens förråd, här https://github.com/jhawthorn/fzy.git, bocka i Det här förrådet ska vara en spegel, ge det ett namn, till exempel fzy-upstream, och tryck på Migrera förråd. Forgejos formulär Migrera från Git: adressen https://github.com/jhawthorn/fzy.git, Det här förrådet ska vara en spegel ikryssad, Ägare ola, Förrådsnamn fzy-upstream, en beskrivning och knappen Migrera förråd
  3. Spegeln hämtar själv författarens commits och taggar. Under spegelns Inställningar finns Speglingsintervall (8 timmar om du inte ändrar det, minst 10 minuter) och Synkronisera nu. Speglingsinställningarna: adressen, Pull, Synkronisera nu, Prune ikryssad och Speglingsintervall 8h0m0s

En spegel tar inte emot push, så ditt eget arbetsflöde kan inte läggas i den. En synkning kör bara de arbetsflöden som författarens förråd själv innehåller i .forgejo/workflows/, och fzy har inga. Bygget ligger därför i ett eget förråd som läser spegeln.

03Ett eget paketeringsprojekt

Öppna Nytt projekt från Git-sidan eller kommandopaletten (rollen developer). Guiden Ditt eget App Center går igenom varje steg; för det här exemplet:

  1. Mall: QPKG-paket. Kortet QPKG-paket, valt
  2. Namn: fzy. Tjänst: Kommandoradsverktyg, som länkar programmet till /usr/bin medan paketet körs. Tjänstförinställningarna: Kommandoradsverktyg valt, Bakgrundstjänst, Webbapp och Tom
  3. Byggmiljö: ubuntu2404-builder, miljön som arbetsflödet använder. Byggmiljö: ubuntu2404-builder, ubuntu-24.04-x86_64, glibc 2.39
  4. Tryck på Skapa projekt. Projektet får sitt förråd, mappen projects/fzy och mallens arbetsflöde, som avsnitt 05 ersätter.

Ett förråd som skapats innan CI var på har Forgejos Actions avstängt, och ett pushat arbetsflöde startar ingenting. Slå på dem under förrådets Inställningar → Units; förråd som skapats medan CI är på har dem redan påslagna.

Förrådets Units: Code, Projects, Releases, Packages och Actions ikryssade, och knappen Save settings

04En skrivskyddad token för spegeln

Jobbet klonar spegeln över HTTPS. Klonningen kräver inloggning, utom när spegeln är publik och Publik bläddring är på. Därför ger arbetsflödet den en token som bara kan läsa.

  1. I Forgejo: Inställningar → Applications → Generate new token: ett namn som mirror-read och behörigheten förråd: Read. Kopiera token: Forgejo visar den bara en gång.
  2. I paketeringsförrådet: Inställningar → Åtgärder → Secrets → Add secret: namnet MIRROR_TOKEN och token som värde.

05Arbetsflödet

Lägg den här filen i projektet som .forgejo/workflows/build.yml, i stället för mallens, och pusha den. Den körs vid varje push, en gång per dygn och när någon startar den för hand.

# .forgejo/workflows/build.yml: fzy from the author's newest release, tested, as a QPKG
name: build
on:
  push:
  schedule:
    - cron: '30 4 * * *'
  workflow_dispatch:
jobs:
  build:
    runs-on: bucketvs
    steps:
      - uses: actions/checkout@v4
      - name: The author's newest release, from the mirror
        run: |
          git -c http.extraHeader="Authorization: token $MIRROR_TOKEN" clone --quiet \
            "${{ github.server_url }}/${{ github.repository_owner }}/fzy-upstream.git" upstream
          tag=$(git -C upstream describe --tags --abbrev=0)
          git -C upstream checkout --quiet "$tag"
          echo "VERSION=${tag#v}" >> "$GITHUB_ENV"
        env:
          MIRROR_TOKEN: ${{ secrets.MIRROR_TOKEN }}
      - name: Build and run the author's tests
        run: |
          bvs env run ubuntu2404-builder -- make -C upstream
          bvs env run ubuntu2404-builder -- make -C upstream check
      - name: Put the program into the package
        run: |
          rm -f shared/bin/fzy
          install -D -m 755 upstream/fzy x86_64/bin/fzy
          sed -i "s/^QPKG_VER=.*/QPKG_VER=\"$VERSION\"/" qpkg.cfg
      - name: Build the QPKG
        run: bvs qbuild
      - uses: actions/upload-artifact@v3
        with:
          name: fzy-qpkg
          path: build/*.qpkg
      - name: Publish into this NAS's App Center repository
        run: |
          for f in build/*.qpkg; do
            if out=$(bvs repo publish "$f" --arch x86_64 --latest 2>&1); then
              echo "$out"
            elif printf '%s' "$out" | grep -q 'carries no code signature'; then
              echo "::warning::$f is built but not published: it carries no code signature"
            else
              echo "$out" >&2
              exit 1
            fi
          done
  • Det andra steget hämtar den senaste taggen i spegeln, så att paketet följer författarens utgåvor, och taggens version blir paketets version (QPKG_VER).
  • bvs env run ubuntu2404-builder -- … bygger och testar i miljön, med dess kompilator och bibliotek. Ett misslyckat test gör att körningen misslyckas, och inget packas.
  • bvs qbuild bygger paketet i build/. Körningen sparar paketet som en artefakt.
  • Det sista steget publicerar i NAS:ens App Center-förråd, som bara tar emot kodsignerade paket. Utan certifikat slutar körningen med en varning och paketet blir kvar som artefakt. Guiden Ditt eget App Center visar de två stegen som signerar varje bygge.

06Körningar, tester och paketet

Fliken Åtgärder i förrådet listar varje körning med vad som startade den: en push, schemat eller en person.

Körningarna av build.yml: en körning startad för hand, två pushar, en schemalagd körning och den första pushen, var och en med en grön bock

En körning visar varje steg med sin tid. Steget med testerna skriver ut författarens egna resultat.

Byggjobbet: Konfigurera jobb, actions/checkout, den senaste utgåvan från spegeln, bygg och tester, programmet in i paketet, Bygg QPKG, upload-artifact och publicera, allt gröntfzy:s tester i loggen: match_suite 24, choices_suite 6 och properties_suite 2 godkända, totalt 32 tester, 0 misslyckade

Run workflow startar den för hand, till exempel direkt efter spegelns Synchronize now. Paketet finns under Artifacts på körningens sida.

Det här arbetsflödet har utlösaren workflow_dispatch, med knappen Run workflow och grenen mainKörningens artefakter: fzy-qpkg