summaryrefslogtreecommitdiff
path: root/.forgejo/workflows/build-kernel.yml
blob: 28faeff06a4fd74d3ae46fbea5e7ecf572e00a87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
name: Build linux-raveos kernel

on:
  push:
    branches:
      - main
    paths:
      - 'linux-raveos/**'
  workflow_dispatch:

concurrency:
  group: raveos-repo-publish
  cancel-in-progress: false

jobs:
  build:
    runs-on: iso-builder

    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install build dependencies
        run: |
          set -euo pipefail
          sudo pacman -Rdd --noconfirm hyprutils hyprwayland-scanner hyprlang hyprgraphics hyprcursor aquamarine hyprwire hyprland-guiutils hyprland xdg-desktop-portal-hyprland hyprpolkitagent hyprland-qt-support dms-shell || true
          sudo pacman -Syu --noconfirm || { sleep 15; sudo pacman -Syu --noconfirm; } || { sleep 15; sudo pacman -Syu --noconfirm; }
          sudo pacman -S --needed --noconfirm \
            base-devel clang llvm lld bc binutils cpio gettext \
            libelf openssl pahole perl python rust rust-bindgen \
            rust-src xxhash xz zlib zstd rsync

      - name: Fetch core repo via rsync
        run: |
          set -euo pipefail
          RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes"
          rm -rf /tmp/raveos-core-repo
          mkdir -p /tmp/raveos-core-repo/x86_64
          rsync -az -e "$RSYNC_SSH" \
            root@10.66.66.1:/root/docker/repo/repo/x86_64/ /tmp/raveos-core-repo/x86_64/
          test -f /tmp/raveos-core-repo/x86_64/raveos-core-repo.db.tar.xz
          mkdir -p /tmp/builtpkgs

      - name: Import GPG signing key
        env:
          GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
        run: |
          set -euo pipefail
          export GNUPGHOME=/tmp/raveos-gnupg
          rm -rf "$GNUPGHOME"
          mkdir -m 700 "$GNUPGHOME"
          printf '%s' "$GPG_PRIVATE_KEY" | base64 -d | gpg --batch --import

      - name: Build linux-raveos
        run: |
          set -euo pipefail
          cd linux-raveos
          rm -f *.pkg.tar.zst || true
          makepkg -s --noconfirm -f
          mkdir -p /tmp/builtpkgs
          cp -v *.pkg.tar.zst /tmp/builtpkgs/

      - name: Sign built packages
        env:
          GPG_PASSPHRASE: ${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}
        run: |
          set -euo pipefail
          export GNUPGHOME=/tmp/raveos-gnupg
          PASSFILE=$(mktemp)
          chmod 600 "$PASSFILE"
          trap 'rm -f "$PASSFILE"' EXIT
          printf '%s' "$GPG_PASSPHRASE" > "$PASSFILE"
          for pkg in /tmp/builtpkgs/*.pkg.tar.zst; do
            [ -f "$pkg" ] || continue
            gpg --batch --yes --pinentry-mode loopback \
                --passphrase-file "$PASSFILE" \
                --local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \
                --detach-sign --no-armor "$pkg"
          done
          rm -f "$PASSFILE"

      - name: Update repo database and sync to VPS
        env:
          GPG_PASSPHRASE: ${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}
        run: |
          set -euo pipefail
          BUILT=$(ls /tmp/builtpkgs/*.pkg.tar.zst 2>/dev/null || true)
          if [ -z "$BUILT" ]; then
            echo "Nincs csomag -> kihagyva"
            exit 0
          fi

          CORE="/tmp/raveos-core-repo/x86_64"
          for pkg in $BUILT; do
            PKGNAME=$(bsdtar -xOf "$pkg" .PKGINFO | awk -F' = ' '/^pkgname =/{print $2; exit}')
            rm -f "$CORE/${PKGNAME}-"[0-9]*.pkg.tar.zst* 2>/dev/null || true
            cp -v "$pkg" "$CORE/"
            [ -f "$pkg.sig" ] && cp -v "$pkg.sig" "$CORE/"
          done

          export GNUPGHOME=/tmp/raveos-gnupg
          cd "$CORE"
          ALLPKGS=$(ls *.pkg.tar.zst)
          repo-add raveos-core-repo.db.tar.xz $ALLPKGS

          PASSFILE=$(mktemp)
          chmod 600 "$PASSFILE"
          trap 'rm -f "$PASSFILE"' EXIT
          printf '%s' "$GPG_PASSPHRASE" > "$PASSFILE"
          for f in raveos-core-repo.db.tar.xz raveos-core-repo.files.tar.xz; do
            gpg --batch --yes --pinentry-mode loopback \
                --passphrase-file "$PASSFILE" \
                --local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \
                --detach-sign --no-armor -o "$f.sig" "$f"
          done
          rm -f "$PASSFILE"
          ln -sf raveos-core-repo.db.tar.xz.sig raveos-core-repo.db.sig
          ln -sf raveos-core-repo.files.tar.xz.sig raveos-core-repo.files.sig

          RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes"
          rsync -az --delete -e "$RSYNC_SSH" \
            "$CORE/" root@10.66.66.1:/root/docker/repo/repo/x86_64/

          echo "::notice title=Kernel published::linux-raveos published"

      - name: Cleanup
        if: always()
        run: |
          gpgconf --homedir /tmp/raveos-gnupg --kill gpg-agent || true
          sudo rm -rf /tmp/raveos-gnupg || true
          sudo rm -rf /tmp/builtpkgs || true
          sudo rm -rf /tmp/raveos-core-repo || true
          sudo rm -rf linux-raveos/src linux-raveos/pkg || true
          df -h