diff options
| -rw-r--r-- | .forgejo/scripts/mirror-core-repo.sh | 93 | ||||
| -rw-r--r-- | .forgejo/workflows/artcraft-update.yml | 139 | ||||
| -rw-r--r-- | .forgejo/workflows/build-gnome.yml | 14 | ||||
| -rw-r--r-- | .forgejo/workflows/build-hyprland.yml | 14 | ||||
| -rw-r--r-- | .forgejo/workflows/build-kernel.yml | 14 | ||||
| -rw-r--r-- | .forgejo/workflows/build-theme-send-core-repo.yml | 84 | ||||
| -rw-r--r-- | .forgejo/workflows/hyprland-update-check.yml | 15 | ||||
| -rw-r--r-- | .forgejo/workflows/kernel-update-check.yml | 14 | ||||
| -rw-r--r-- | artcraft-raveos/designcraft/PKGBUILD | 6 | ||||
| -rw-r--r-- | artcraft-raveos/effectcraft/PKGBUILD | 6 | ||||
| -rw-r--r-- | artcraft-raveos/filmcraft/PKGBUILD | 6 | ||||
| -rw-r--r-- | artcraft-raveos/lightcraft/PKGBUILD | 6 | ||||
| -rw-r--r-- | artcraft-raveos/pdfcraft/PKGBUILD | 6 | ||||
| -rw-r--r-- | artcraft-raveos/photocraft/PKGBUILD | 6 | ||||
| -rw-r--r-- | artcraft-raveos/vectorcraft/PKGBUILD | 6 |
15 files changed, 236 insertions, 193 deletions
diff --git a/.forgejo/scripts/mirror-core-repo.sh b/.forgejo/scripts/mirror-core-repo.sh new file mode 100644 index 0000000..9c6d5e0 --- /dev/null +++ b/.forgejo/scripts/mirror-core-repo.sh @@ -0,0 +1,93 @@ +#!/usr/bin/env bash +set -euo pipefail + +REPO_DIR="${1:-/tmp/raveos-core-repo}" +X86="$REPO_DIR/x86_64" + +OWNER="rave-os" +GH_REPO="RaveOS-core-repo-mirror" +TAG="core-repo-x86_64" +API="https://api.github.com/repos/${OWNER}/${GH_REPO}" +UPLOADS="https://uploads.github.com/repos/${OWNER}/${GH_REPO}/releases" + +if [ ! -d "$X86" ]; then + echo "Nincs mit tukrozni (${X86}) -> kihagyva" + exit 0 +fi + +if [ -z "${GH_MIRROR_TOKEN:-}" ]; then + echo "FIGYELMEZTETES: GH_MIRROR_TOKEN nincs beallitva -> GitHub tukrozes kihagyva" + exit 0 +fi + +HDRFILE=$(mktemp) +chmod 600 "$HDRFILE" +trap 'rm -f "$HDRFILE"' EXIT +printf 'Authorization: Bearer %s\n' "$GH_MIRROR_TOKEN" > "$HDRFILE" + +fetch_release() { + curl -sf -H "@${HDRFILE}" "${API}/releases/tags/${TAG}" || true +} + +release_json=$(fetch_release) +if [ -z "$release_json" ] || ! echo "$release_json" | jq -e .id &>/dev/null; then + echo "FIGYELMEZTETES: GitHub release nem erheto el (${TAG}) -> kihagyva" + exit 0 +fi +release_id=$(echo "$release_json" | jq -r .id) + +cd "$X86" + +existing_names=$(echo "$release_json" | jq -r '.assets[]? | "\(.id)\t\(.name)"' 2>/dev/null || true) + +for f in *.pkg.tar.zst; do + [ -f "$f" ] || continue + pkgname=$(echo "$f" | sed -E 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//') + [ -n "$pkgname" ] || continue + while IFS=$'\t' read -r aid aname; do + [ -n "$aid" ] || continue + case "$aname" in + "${pkgname}-"*.pkg.tar.zst | "${pkgname}-"*.pkg.tar.zst.sig) + if [ "$aname" != "$f" ] && [ "$aname" != "${f}.sig" ]; then + curl -sf -X DELETE -H "@${HDRFILE}" "${API}/releases/assets/${aid}" || true + echo "torolve (regi verzio): $aname" + fi + ;; + esac + done <<< "$existing_names" +done + +release_json=$(fetch_release) +if [ -z "$release_json" ]; then + echo "FIGYELMEZTETES: GitHub release ujra nem erheto el -> kihagyva" + exit 0 +fi +assets_tsv=$(echo "$release_json" | jq -r '.assets[]? | "\(.id)\t\(.name)\t\(.digest // "-")"' 2>/dev/null || true) + +UPLOADED=0 +SKIPPED=0 + +for f in *; do + [ -f "$f" ] || continue + local_sha=$(sha256sum "$f" | cut -d' ' -f1) + asset_line=$(echo "$assets_tsv" | awk -F'\t' -v n="$f" '$2==n {print; exit}') + if [ -n "$asset_line" ]; then + asset_id=$(echo "$asset_line" | cut -f1) + asset_digest=$(echo "$asset_line" | cut -f3) + if [ "sha256:${local_sha}" = "$asset_digest" ]; then + SKIPPED=$((SKIPPED + 1)) + continue + fi + curl -sf -X DELETE -H "@${HDRFILE}" "${API}/releases/assets/${asset_id}" || true + fi + if curl -sf -X POST -H "@${HDRFILE}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary "@${f}" \ + "${UPLOADS}/${release_id}/assets?name=${f}"; then + UPLOADED=$((UPLOADED + 1)) + else + echo "HIBA: ${f} feltoltese sikertelen" + fi +done + +echo "GitHub mirror kesz: ${UPLOADED} feltoltve, ${SKIPPED} valtozatlan (kihagyva)" diff --git a/.forgejo/workflows/artcraft-update.yml b/.forgejo/workflows/artcraft-update.yml index 419d627..5934ffd 100644 --- a/.forgejo/workflows/artcraft-update.yml +++ b/.forgejo/workflows/artcraft-update.yml @@ -32,24 +32,39 @@ jobs: set -euo pipefail APPS=(designcraft effectcraft filmcraft lightcraft pdfcraft photocraft vectorcraft) CHANGED=0 + HDRFILE=$(mktemp) + chmod 600 "$HDRFILE" + trap 'rm -f "$HDRFILE"' EXIT + AUTH=() + if [ -n "${GH_TOKEN:-}" ]; then + printf 'Authorization: Bearer %s\n' "$GH_TOKEN" > "$HDRFILE" + AUTH=(-H "@${HDRFILE}") + fi for app in "${APPS[@]}"; do - AUTH=() - [ -n "${GH_TOKEN:-}" ] && AUTH=(-H "Authorization: Bearer ${GH_TOKEN}") - LATEST=$(curl -fsSL --retry 3 "${AUTH[@]}" \ + TAG=$(curl -fsSL --retry 3 "${AUTH[@]}" \ "https://api.github.com/repos/storytold/${app}/releases/latest" \ - | jq -r '.tag_name // empty' 2>/dev/null | sed 's/^v//' || true) - CUR=$(grep '^pkgver=' "artcraft-raveos/${app}/PKGBUILD" | cut -d= -f2) - if [ -z "$LATEST" ]; then + | jq -r '.tag_name // empty' 2>/dev/null || true) + if [ -z "$TAG" ]; then echo "FIGYELEM: ${app}: a legfrissebb verziot nem sikerult lekerdezni -> kihagyva" continue fi - if [ "$LATEST" = "$CUR" ]; then + if [ "${TAG#v}" = "$TAG" ]; then + echo "FIGYELEM: ${app}: nem v-elotagos tag (${TAG}) -> kihagyva" + continue + fi + LATEST="${TAG#v}" + CUR=$(grep '^pkgver=' "artcraft-raveos/${app}/PKGBUILD" | cut -d= -f2) + if [ "$(vercmp "$LATEST" "$CUR")" -le 0 ]; then echo "${app}: naprakesz (${CUR})" continue fi echo "${app}: ${CUR} -> ${LATEST}" - curl -fsSL --retry 3 -o "/tmp/${app}-src.tar.gz" \ - "https://github.com/storytold/${app}/archive/refs/tags/v${LATEST}/${app}-${LATEST}.tar.gz" + if ! curl -fsSL --retry 3 -o "/tmp/${app}-src.tar.gz" \ + "https://github.com/storytold/${app}/archive/refs/tags/${TAG}/${app}-${LATEST}.tar.gz"; then + echo "FIGYELEM: ${app}: a forras letoltese sikertelen -> kihagyva" + rm -f "/tmp/${app}-src.tar.gz" + continue + fi SHA=$(sha256sum "/tmp/${app}-src.tar.gz" | cut -d' ' -f1) sed -i "s/^pkgver=.*/pkgver=${LATEST}/" "artcraft-raveos/${app}/PKGBUILD" sed -i "s/^sha256sums=('.*')$/sha256sums=('${SHA}')/" "artcraft-raveos/${app}/PKGBUILD" @@ -57,7 +72,7 @@ jobs: CHANGED=1 done rm -f /tmp/*-src.tar.gz || true - echo "CHANGED=${CHANGED}" >> $GITHUB_OUTPUT + echo "CHANGED=${CHANGED}" >> "$GITHUB_OUTPUT" - name: Commit PKGBUILD bumps if: steps.bump.outputs.CHANGED == '1' @@ -80,20 +95,24 @@ jobs: 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" - echo "${{ secrets.GPG_PRIVATE_KEY }}" | base64 -d | gpg --batch --import + printf '%s' "$GPG_PRIVATE_KEY" | base64 -d | gpg --batch --import - name: Build ArtCraft packages + id: build run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" APPS=(designcraft effectcraft filmcraft lightcraft pdfcraft photocraft vectorcraft) + FAILED=() for app in "${APPS[@]}"; do - cd "artcraft-raveos/${app}" + cd "artcraft-raveos/${app}" || { FAILED+=("$app"); continue; } PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/${app}-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then @@ -103,12 +122,23 @@ jobs: fi echo "=== Building ${app} ${PKGVER}-${PKGREL} ===" rm -rf src pkg *.pkg.tar.zst || true - makepkg -s --noconfirm -f - cp -v "${app}"-*.pkg.tar.zst /tmp/builtpkgs/ + if ! makepkg -s --noconfirm -f; then + echo "HIBA: ${app} build sikertelen" + FAILED+=("$app") + cd - >/dev/null + continue + fi + if ! cp -v "${app}"-[0-9]*.pkg.tar.zst /tmp/builtpkgs/; then + echo "HIBA: ${app} csomag masolasa sikertelen" + FAILED+=("$app") + fi cd - >/dev/null done + echo "failed=${FAILED[*]:-}" >> "$GITHUB_OUTPUT" - name: Sign built packages + env: + GPG_PASSPHRASE: ${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }} run: | set -euo pipefail export GNUPGHOME=/tmp/raveos-gnupg @@ -118,15 +148,21 @@ jobs: echo "Nincs csomag alairashoz -> kihagyva" exit 0 fi + PASSFILE=$(mktemp) + chmod 600 "$PASSFILE" + trap 'rm -f "$PASSFILE"' EXIT + printf '%s' "$GPG_PASSPHRASE" > "$PASSFILE" for pkg in $BUILT; do gpg --batch --yes --pinentry-mode loopback \ - --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \ + --passphrase-file "$PASSFILE" \ --local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \ --detach-sign "$pkg" echo "Alairva: $(basename "$pkg")" done - name: Publish packages (repo-add + rsync push, only if changed) + env: + GPG_PASSPHRASE: ${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }} run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" @@ -151,14 +187,14 @@ jobs: repo-add raveos-core-repo.db.tar.xz $ALLPKGS PASSFILE=$(mktemp) chmod 600 "$PASSFILE" - printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$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 rm -f raveos-core-repo.db.tar.gz* raveos-core-repo.files.tar.gz* 2>/dev/null || true @@ -168,70 +204,17 @@ jobs: echo "::notice title=Published packages::ArtCraft csomagok publikálva" - name: Mirror raveos-core-repo to GitHub Releases - if: always() + env: + GH_MIRROR_TOKEN: ${{ secrets.GH_MIRROR_TOKEN }} run: | set -euo pipefail - REPO="/tmp/raveos-core-repo" - [ -d "$REPO/x86_64" ] || { echo "Nincs mit tukrozni -> kihagyva"; exit 0; } - - TOKEN="${{ secrets.GH_MIRROR_TOKEN }}" - if [ -z "${TOKEN:-}" ]; then - echo "FIGYELMEZTETES: GH_MIRROR_TOKEN nincs beallitva -> GitHub tukrozes kihagyva" - exit 0 - fi - - OWNER="rave-os" - GH_REPO="RaveOS-core-repo-mirror" - TAG="core-repo-x86_64" - API="https://api.github.com/repos/${OWNER}/${GH_REPO}" - - release_json=$(curl -sf -H "Authorization: Bearer ${TOKEN}" \ - "${API}/releases/tags/${TAG}" || true) - if [ -z "$release_json" ] || ! echo "$release_json" | jq -e .id &>/dev/null; then - echo "FIGYELMEZTETES: GitHub release nem erheto el (${TAG}) -> kihagyva" - exit 0 - fi - release_id=$(echo "$release_json" | jq -r .id) - existing_assets=$(echo "$release_json" | jq -r '.assets[]? | "\(.id)\t\(.name)"' 2>/dev/null || true) - - cd "$REPO/x86_64" - - for f in *.pkg.tar.zst; do - [ -f "$f" ] || continue - pkgname=$(echo "$f" | sed -E 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//') - [ -n "$pkgname" ] || continue - while IFS=$'\t' read -r aid aname; do - [ -n "$aid" ] || continue - case "$aname" in - "${pkgname}-"*.pkg.tar.zst | "${pkgname}-"*.pkg.tar.zst.sig) - if [ "$aname" != "$f" ] && [ "$aname" != "${f}.sig" ]; then - curl -sf -X DELETE -H "Authorization: Bearer ${TOKEN}" \ - "${API}/releases/assets/${aid}" || true - echo "torolve (regi verzio): $aname" - fi - ;; - esac - done <<< "$existing_assets" - done + bash .forgejo/scripts/mirror-core-repo.sh /tmp/raveos-core-repo - existing_assets=$(curl -sf -H "Authorization: Bearer ${TOKEN}" \ - "${API}/releases/${release_id}" | jq -r '.assets[] | "\(.id)\t\(.name)"') - - for f in *; do - [ -f "$f" ] || continue - asset_id=$(echo "$existing_assets" | awk -F'\t' -v n="$f" '$2==n {print $1}') - if [ -n "$asset_id" ]; then - curl -sf -X DELETE -H "Authorization: Bearer ${TOKEN}" \ - "${API}/releases/assets/${asset_id}" || true - fi - curl -sf -X POST \ - -H "Authorization: Bearer ${TOKEN}" \ - -H "Content-Type: application/octet-stream" \ - --data-binary "@${f}" \ - "https://uploads.github.com/repos/${OWNER}/${GH_REPO}/releases/${release_id}/assets?name=${f}" \ - || echo "HIBA: ${f} feltoltese sikertelen" - done - echo "::notice title=GitHub mirror::Kesz" + - name: Report failed builds + if: steps.build.outputs.failed != '' + run: | + echo "Sikertelen buildek: ${{ steps.build.outputs.failed }}" + exit 1 - name: Cleanup if: always() diff --git a/.forgejo/workflows/build-gnome.yml b/.forgejo/workflows/build-gnome.yml index a908960..0f0b931 100644 --- a/.forgejo/workflows/build-gnome.yml +++ b/.forgejo/workflows/build-gnome.yml @@ -41,12 +41,14 @@ jobs: 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" - echo "${{ secrets.GPG_PRIVATE_KEY }}" | base64 -d | gpg --batch --import + printf '%s' "$GPG_PRIVATE_KEY" | base64 -d | gpg --batch --import - name: Build gnome-raveos 50 pin stack run: | @@ -106,12 +108,15 @@ jobs: done - 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" - printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$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 \ @@ -122,6 +127,8 @@ jobs: 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) @@ -146,7 +153,8 @@ jobs: PASSFILE=$(mktemp) chmod 600 "$PASSFILE" - printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$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" \ diff --git a/.forgejo/workflows/build-hyprland.yml b/.forgejo/workflows/build-hyprland.yml index 87297ad..01adee0 100644 --- a/.forgejo/workflows/build-hyprland.yml +++ b/.forgejo/workflows/build-hyprland.yml @@ -44,12 +44,14 @@ jobs: 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" - echo "${{ secrets.GPG_PRIVATE_KEY }}" | base64 -d | gpg --batch --import + printf '%s' "$GPG_PRIVATE_KEY" | base64 -d | gpg --batch --import - name: Build hyprland-raveos stack run: | @@ -91,12 +93,15 @@ jobs: done - 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" - printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$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 \ @@ -107,6 +112,8 @@ jobs: 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) @@ -130,7 +137,8 @@ jobs: PASSFILE=$(mktemp) chmod 600 "$PASSFILE" - printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$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" \ diff --git a/.forgejo/workflows/build-kernel.yml b/.forgejo/workflows/build-kernel.yml index 3940aa8..5c2b0e5 100644 --- a/.forgejo/workflows/build-kernel.yml +++ b/.forgejo/workflows/build-kernel.yml @@ -44,12 +44,14 @@ jobs: 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" - echo "${{ secrets.GPG_PRIVATE_KEY }}" | base64 -d | gpg --batch --import + printf '%s' "$GPG_PRIVATE_KEY" | base64 -d | gpg --batch --import - name: Build linux-raveos run: | @@ -61,12 +63,15 @@ jobs: 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" - printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$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 \ @@ -77,6 +82,8 @@ jobs: 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) @@ -100,7 +107,8 @@ jobs: PASSFILE=$(mktemp) chmod 600 "$PASSFILE" - printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$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" \ diff --git a/.forgejo/workflows/build-theme-send-core-repo.yml b/.forgejo/workflows/build-theme-send-core-repo.yml index 59ee204..7e22e11 100644 --- a/.forgejo/workflows/build-theme-send-core-repo.yml +++ b/.forgejo/workflows/build-theme-send-core-repo.yml @@ -38,15 +38,15 @@ jobs: 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" gpgconf --launch gpg-agent >/dev/null 2>&1 || true - echo "${{ secrets.GPG_PRIVATE_KEY }}" | base64 -d > /tmp/raveos-signing-key.asc - gpg --batch --yes --import /tmp/raveos-signing-key.asc || true - rm -f /tmp/raveos-signing-key.asc + printf '%s' "$GPG_PRIVATE_KEY" | base64 -d | gpg --batch --yes --import || true gpg --list-secret-keys --with-colons | grep -q '^sec:' || { echo "HIBA: a RaveOS titkos kulcs nem importalodott" exit 1 @@ -328,6 +328,8 @@ jobs: cp -v opentubex-*.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 @@ -337,15 +339,21 @@ jobs: echo "Nincs csomag alairashoz -> kihagyva" exit 0 fi + PASSFILE=$(mktemp) + chmod 600 "$PASSFILE" + trap 'rm -f "$PASSFILE"' EXIT + printf '%s' "$GPG_PASSPHRASE" > "$PASSFILE" for pkg in $BUILT; do gpg --batch --yes --pinentry-mode loopback \ - --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \ + --passphrase-file "$PASSFILE" \ --local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \ --detach-sign "$pkg" echo "Alairva: $(basename "$pkg")" done - name: Publish packages (repo-add + rsync push, only if changed) + env: + GPG_PASSPHRASE: ${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }} run: | set -euo pipefail @@ -375,7 +383,8 @@ jobs: PASSFILE=$(mktemp) chmod 600 "$PASSFILE" - printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$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" \ @@ -395,70 +404,11 @@ jobs: echo "::notice title=Published packages::rsync-alapu publikalas kesz" - name: Mirror raveos-core-repo to GitHub Releases - if: always() + env: + GH_MIRROR_TOKEN: ${{ secrets.GH_MIRROR_TOKEN }} run: | set -euo pipefail - REPO="/tmp/raveos-core-repo" - [ -d "$REPO/x86_64" ] || { echo "Nincs mit tükrözni -> kihagyva"; exit 0; } - - TOKEN="${{ secrets.GH_MIRROR_TOKEN }}" - if [ -z "${TOKEN:-}" ]; then - echo "FIGYELMEZTETES: GH_MIRROR_TOKEN nincs beallitva -> GitHub tukrozes kihagyva" - exit 0 - fi - - OWNER="rave-os" - GH_REPO="RaveOS-core-repo-mirror" - TAG="core-repo-x86_64" - API="https://api.github.com/repos/${OWNER}/${GH_REPO}" - - release_json=$(curl -sf -H "Authorization: Bearer ${TOKEN}" \ - "${API}/releases/tags/${TAG}" || true) - if [ -z "$release_json" ] || ! echo "$release_json" | jq -e .id &>/dev/null; then - echo "FIGYELMEZTETES: GitHub release nem erheto el (${TAG}) -> kihagyva" - exit 0 - fi - release_id=$(echo "$release_json" | jq -r .id) - existing_assets=$(echo "$release_json" | jq -r '.assets[]? | "\(.id)\t\(.name)"' 2>/dev/null || true) - - cd "$REPO/x86_64" - - for f in *.pkg.tar.zst; do - [ -f "$f" ] || continue - pkgname=$(echo "$f" | sed -E 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//') - [ -n "$pkgname" ] || continue - while IFS=$'\t' read -r aid aname; do - [ -n "$aid" ] || continue - case "$aname" in - "${pkgname}-"*.pkg.tar.zst | "${pkgname}-"*.pkg.tar.zst.sig) - if [ "$aname" != "$f" ] && [ "$aname" != "${f}.sig" ]; then - curl -sf -X DELETE -H "Authorization: Bearer ${TOKEN}" \ - "${API}/releases/assets/${aid}" || true - echo "torolve (regi verzio): $aname" - fi - ;; - esac - done <<< "$existing_assets" - done - - existing_assets=$(curl -sf -H "Authorization: Bearer ${TOKEN}" \ - "${API}/releases/${release_id}" | jq -r '.assets[] | "\(.id)\t\(.name)"') - - for f in *; do - [ -f "$f" ] || continue - asset_id=$(echo "$existing_assets" | awk -F'\t' -v n="$f" '$2==n {print $1}') - if [ -n "$asset_id" ]; then - curl -sf -X DELETE -H "Authorization: Bearer ${TOKEN}" \ - "${API}/releases/assets/${asset_id}" || true - fi - curl -sf -X POST \ - -H "Authorization: Bearer ${TOKEN}" \ - -H "Content-Type: application/octet-stream" \ - --data-binary "@${f}" \ - "https://uploads.github.com/repos/${OWNER}/${GH_REPO}/releases/${release_id}/assets?name=${f}" \ - || echo "HIBA: ${f} feltoltese sikertelen" - done - echo "::notice title=GitHub mirror::Kesz" + bash .forgejo/scripts/mirror-core-repo.sh /tmp/raveos-core-repo - name: Cleanup (SAFE) if: always() diff --git a/.forgejo/workflows/hyprland-update-check.yml b/.forgejo/workflows/hyprland-update-check.yml index bd1c4cb..fd198eb 100644 --- a/.forgejo/workflows/hyprland-update-check.yml +++ b/.forgejo/workflows/hyprland-update-check.yml @@ -22,10 +22,16 @@ jobs: - name: Check for existing open PR id: prcheck + env: + FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} run: | set -euo pipefail + HDRFILE=$(mktemp) + chmod 600 "$HDRFILE" + trap 'rm -f "$HDRFILE"' EXIT + printf 'Authorization: token %s\n' "$FORGEJO_TOKEN" > "$HDRFILE" OPEN_PRS=$(curl -fsSL \ - -H "Authorization: token ${{ secrets.FORGEJO_TOKEN }}" \ + -H "@${HDRFILE}" \ "https://git.rp1.hu/api/v1/repos/${{ github.repository }}/pulls?state=open&limit=50") EXISTS=$(echo "$OPEN_PRS" | python3 -c " import sys, json @@ -103,6 +109,7 @@ jobs: env: COUNT: ${{ steps.check.outputs.COUNT }} SUMMARY: ${{ steps.check.outputs.SUMMARY }} + FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} run: | set -euo pipefail DATE=$(date +%Y%m%d-%H%M) @@ -119,8 +126,12 @@ jobs: PR_BODY="$(printf 'Automata Hyprland stack frissítés (%s csomag):\n%s\n\nA csomagok a merge után az \`iso-builder\` runneren sorrendben fordulnak le, GPG aláírással kerülnek a RaveOS repóba.' "$COUNT" "$SUMMARY")" + HDRFILE=$(mktemp) + chmod 600 "$HDRFILE" + trap 'rm -f "$HDRFILE"' EXIT + printf 'Authorization: token %s\n' "$FORGEJO_TOKEN" > "$HDRFILE" curl -fsSL -X POST \ - -H "Authorization: token ${{ secrets.FORGEJO_TOKEN }}" \ + -H "@${HDRFILE}" \ -H "Content-Type: application/json" \ "https://git.rp1.hu/api/v1/repos/${{ github.repository }}/pulls" \ -d "$(jq -n \ diff --git a/.forgejo/workflows/kernel-update-check.yml b/.forgejo/workflows/kernel-update-check.yml index 5e7e16d..32d4962 100644 --- a/.forgejo/workflows/kernel-update-check.yml +++ b/.forgejo/workflows/kernel-update-check.yml @@ -85,11 +85,16 @@ jobs: NEW_MAJOR: ${{ steps.check.outputs.MAJOR }} NEW_MINOR: ${{ steps.check.outputs.MINOR }} NEW_TAGREL: ${{ steps.check.outputs.TAGREL }} + FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} run: | set -euo pipefail BRANCH="update/kernel-${NEW_MAJOR}.${NEW_MINOR}-${NEW_TAGREL}" + HDRFILE=$(mktemp) + chmod 600 "$HDRFILE" + trap 'rm -f "$HDRFILE"' EXIT + printf 'Authorization: token %s\n' "$FORGEJO_TOKEN" > "$HDRFILE" OPEN_PRS=$(curl -fsSL \ - -H "Authorization: token ${{ secrets.FORGEJO_TOKEN }}" \ + -H "@${HDRFILE}" \ "https://git.rp1.hu/api/v1/repos/${{ github.repository }}/pulls?state=open&limit=50") EXISTS=$(echo "$OPEN_PRS" | python3 -c " import sys, json @@ -111,6 +116,7 @@ jobs: OLD_MAJOR: ${{ steps.current.outputs.MAJOR }} OLD_MINOR: ${{ steps.current.outputs.MINOR }} OLD_TAGREL: ${{ steps.current.outputs.TAGREL }} + FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} run: | set -euo pipefail @@ -152,8 +158,12 @@ jobs: git push origin "$BRANCH" + HDRFILE=$(mktemp) + chmod 600 "$HDRFILE" + trap 'rm -f "$HDRFILE"' EXIT + printf 'Authorization: token %s\n' "$FORGEJO_TOKEN" > "$HDRFILE" curl -fsSL -X POST \ - -H "Authorization: token ${{ secrets.FORGEJO_TOKEN }}" \ + -H "@${HDRFILE}" \ -H "Content-Type: application/json" \ "https://git.rp1.hu/api/v1/repos/${{ github.repository }}/pulls" \ -d "{ diff --git a/artcraft-raveos/designcraft/PKGBUILD b/artcraft-raveos/designcraft/PKGBUILD index 7a1a578..99559fd 100644 --- a/artcraft-raveos/designcraft/PKGBUILD +++ b/artcraft-raveos/designcraft/PKGBUILD @@ -3,7 +3,7 @@ pkgname=designcraft pkgver=0.8.0 -pkgrel=1 +pkgrel=2 url="https://getartcraft.com/apps/$pkgname" _url="https://github.com/storytold/$pkgname" pkgdesc='vibe coded clean-room reimplementation of Adobe InDesign' @@ -20,10 +20,6 @@ sha256sums=('e47b926827dd6c8db2dc7d2af7914fa270d5d5ef05896f80ecee442d9e391ea8') _srcenv() { cd "$_archive" export CARGO_HOME="$srcdir" - export CARGO_PROFILE_RELEASE_DEBUG=2 - export CARGO_PROFILE_RELEASE_STRIP=false - export CARGO_PROFILE_RELEASE_LTO=thin - export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 export CARGO_PROFILE_RELEASE_OPT_LEVEL=3 export CARGO_TARGET_DIR=target export RUSTUP_TOOLCHAIN=stable diff --git a/artcraft-raveos/effectcraft/PKGBUILD b/artcraft-raveos/effectcraft/PKGBUILD index 095d358..72b0ba8 100644 --- a/artcraft-raveos/effectcraft/PKGBUILD +++ b/artcraft-raveos/effectcraft/PKGBUILD @@ -3,7 +3,7 @@ pkgname=effectcraft pkgver=0.10.0 -pkgrel=1 +pkgrel=2 url="https://getartcraft.com/apps/$pkgname" _url="https://github.com/storytold/$pkgname" pkgdesc='vibe coded clean-room reimplementation of Adobe After Effects' @@ -21,10 +21,6 @@ sha256sums=('bb7487b28b08e440128d5e4f6261ae43ad44c323bcc3f4b9bc0a09d1209bedb8') _srcenv() { cd "$_archive" export CARGO_HOME="$srcdir" - export CARGO_PROFILE_RELEASE_DEBUG=2 - export CARGO_PROFILE_RELEASE_STRIP=false - export CARGO_PROFILE_RELEASE_LTO=thin - export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 export CARGO_PROFILE_RELEASE_OPT_LEVEL=3 export CARGO_TARGET_DIR=target export RUSTUP_TOOLCHAIN=stable diff --git a/artcraft-raveos/filmcraft/PKGBUILD b/artcraft-raveos/filmcraft/PKGBUILD index 2c465dc..291c2a0 100644 --- a/artcraft-raveos/filmcraft/PKGBUILD +++ b/artcraft-raveos/filmcraft/PKGBUILD @@ -3,7 +3,7 @@ pkgname=filmcraft pkgver=0.8.0 -pkgrel=1 +pkgrel=2 url="https://getartcraft.com/apps/$pkgname" _url="https://github.com/storytold/$pkgname" pkgdesc='vibe coded clean-room reimplementation of Adobe Premiere Pro' @@ -21,10 +21,6 @@ sha256sums=('4f4fe5572841baee1266c35a06fc6eea5583cb29f39aa21d03ec9655a206e081') _srcenv() { cd "$_archive" export CARGO_HOME="$srcdir" - export CARGO_PROFILE_RELEASE_DEBUG=2 - export CARGO_PROFILE_RELEASE_STRIP=false - export CARGO_PROFILE_RELEASE_LTO=thin - export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 export CARGO_PROFILE_RELEASE_OPT_LEVEL=3 export CARGO_TARGET_DIR=target export RUSTUP_TOOLCHAIN=stable diff --git a/artcraft-raveos/lightcraft/PKGBUILD b/artcraft-raveos/lightcraft/PKGBUILD index 2ca0390..b2f99d8 100644 --- a/artcraft-raveos/lightcraft/PKGBUILD +++ b/artcraft-raveos/lightcraft/PKGBUILD @@ -3,7 +3,7 @@ pkgname=lightcraft pkgver=0.8.0 -pkgrel=1 +pkgrel=2 url="https://getartcraft.com/apps/$pkgname" _url="https://github.com/storytold/$pkgname" pkgdesc='vibe coded clean-room reimplementation of Adobe Lightroom' @@ -20,10 +20,6 @@ sha256sums=('456c2d41b3981f432909fb5f798044118a29a4ca72066adc490041d9730c7fea') _srcenv() { cd "$_archive" export CARGO_HOME="$srcdir" - export CARGO_PROFILE_RELEASE_DEBUG=2 - export CARGO_PROFILE_RELEASE_STRIP=false - export CARGO_PROFILE_RELEASE_LTO=thin - export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 export CARGO_PROFILE_RELEASE_OPT_LEVEL=3 export CARGO_TARGET_DIR=target export RUSTUP_TOOLCHAIN=stable diff --git a/artcraft-raveos/pdfcraft/PKGBUILD b/artcraft-raveos/pdfcraft/PKGBUILD index 90bb7fc..c019d77 100644 --- a/artcraft-raveos/pdfcraft/PKGBUILD +++ b/artcraft-raveos/pdfcraft/PKGBUILD @@ -3,7 +3,7 @@ pkgname=pdfcraft pkgver=0.8.0 -pkgrel=1 +pkgrel=2 url="https://getartcraft.com/apps/$pkgname" _url="https://github.com/storytold/$pkgname" pkgdesc='vibe coded clean-room reimplementation of Adobe Acrobat' @@ -23,10 +23,6 @@ sha256sums=('64c32b6cdab2d6334d16ac8c65b3425718cb88594e6347ebe25efc1aaf5e0bae') _srcenv() { cd "$_archive" export CARGO_HOME="$srcdir" - export CARGO_PROFILE_RELEASE_DEBUG=2 - export CARGO_PROFILE_RELEASE_STRIP=false - export CARGO_PROFILE_RELEASE_LTO=thin - export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 export CARGO_PROFILE_RELEASE_OPT_LEVEL=3 export CARGO_TARGET_DIR=target export RUSTUP_TOOLCHAIN=stable diff --git a/artcraft-raveos/photocraft/PKGBUILD b/artcraft-raveos/photocraft/PKGBUILD index d365a77..e6b99fa 100644 --- a/artcraft-raveos/photocraft/PKGBUILD +++ b/artcraft-raveos/photocraft/PKGBUILD @@ -3,7 +3,7 @@ pkgname=photocraft pkgver=0.9.0 -pkgrel=1 +pkgrel=2 url="https://getartcraft.com/apps/$pkgname" _url="https://github.com/storytold/$pkgname" pkgdesc='vibe coded clean-room reimplementation of Adobe Photoshop' @@ -20,10 +20,6 @@ sha256sums=('add4b604f0e754bb78f3320821cc4438940bb51c2cd51c0666ce2cfcb525bb3a') _srcenv() { cd "$_archive" export CARGO_HOME="$srcdir" - export CARGO_PROFILE_RELEASE_DEBUG=2 - export CARGO_PROFILE_RELEASE_STRIP=false - export CARGO_PROFILE_RELEASE_LTO=thin - export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 export CARGO_PROFILE_RELEASE_OPT_LEVEL=3 export CARGO_TARGET_DIR=target export RUSTUP_TOOLCHAIN=stable diff --git a/artcraft-raveos/vectorcraft/PKGBUILD b/artcraft-raveos/vectorcraft/PKGBUILD index d712c42..4704b18 100644 --- a/artcraft-raveos/vectorcraft/PKGBUILD +++ b/artcraft-raveos/vectorcraft/PKGBUILD @@ -3,7 +3,7 @@ pkgname=vectorcraft pkgver=0.12.0 -pkgrel=1 +pkgrel=2 url="https://getartcraft.com/apps/$pkgname" _url="https://github.com/storytold/$pkgname" pkgdesc='vibe coded clean-room reimplementation of Adobe Illustrator' @@ -20,10 +20,6 @@ sha256sums=('266cc34c93b68d3bec847452674fce99b5695e2f233451957eef8ce39a5ce325') _srcenv() { cd "$_archive" export CARGO_HOME="$srcdir" - export CARGO_PROFILE_RELEASE_DEBUG=2 - export CARGO_PROFILE_RELEASE_STRIP=false - export CARGO_PROFILE_RELEASE_LTO=thin - export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 export CARGO_PROFILE_RELEASE_OPT_LEVEL=3 export CARGO_TARGET_DIR=target export RUSTUP_TOOLCHAIN=stable |