Compare commits
125 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 738871a692 | |||
| d860a9d27f | |||
| 9e76b1ad83 | |||
| a5a6c90b8e | |||
| 99c4db7b51 | |||
| 9bc820ceaf | |||
| 743f272793 | |||
| e8f87aa9b5 | |||
| ddf4b72ec5 | |||
| a915b2c9f4 | |||
| fb91ae8240 | |||
| 7b808bce5c | |||
| 5a3cca95e8 | |||
| cdc60c992f | |||
| 189b7aaa8b | |||
| 2f289a8bea | |||
| 124f258009 | |||
| d71b0570ff | |||
| 084d0f7ebb | |||
| 6b7fe0cf50 | |||
| 447df4116b | |||
| a46d30fc95 | |||
| 5e0f56b6ef | |||
| 58692a96b1 | |||
| 9e78b93a6a | |||
| 3419072f0c | |||
| afe6673399 | |||
| 89185e07c2 | |||
| 2bcfad04b0 | |||
| b7d5f2d656 | |||
| 4b5419cf20 | |||
| 3785181000 | |||
| 8801731e13 | |||
| 6a764d28d3 | |||
| 03dd516600 | |||
| 9872215bf8 | |||
| 92a9a20445 | |||
| 042029ddc3 | |||
| 3610c20ae6 | |||
| 301f491a7c | |||
| 58c997a971 | |||
| 34516a951d | |||
| cd2cee4b44 | |||
| c5408d231c | |||
| 1ec69da49b | |||
| 62dc3c56d2 | |||
| 0665f3bdb2 | |||
| 4ae1758d81 | |||
| c977bb3f81 | |||
| 13c4a2365d | |||
| 6db63d80ef | |||
| 79fa72fd09 | |||
| 6c2ae01c1f | |||
| b778d77617 | |||
| d4c961c3b0 | |||
| d28087cd7c | |||
| 9903a888dc | |||
| 6fe13f2c06 | |||
| e1c0dc7f85 | |||
| 2de5147e27 | |||
| b2e786f444 | |||
| 0bd0655009 | |||
| af06a66e86 | |||
| 083abf54b0 | |||
| 7a7cc8c3ac | |||
| 955c7d98c8 | |||
| 2b584d74a3 | |||
| e2634dfa4a | |||
| 6f154faaf1 | |||
| 738541fe59 | |||
| 7fd61d945a | |||
| 83d532a538 | |||
| 071de6a716 | |||
| 449034a4a1 | |||
| 0f97c20f30 | |||
| 66ba9e7b8d | |||
| 39513219c7 | |||
| 40470f4778 | |||
| 7e834112c4 | |||
| 61513c7647 | |||
| 2d46a58cdb | |||
| 9da177743e | |||
| 6a271b988d | |||
| 17e0568616 | |||
| a5b7591187 | |||
| 4ad40ed620 | |||
| 3a7a016592 | |||
| 78bb31b806 | |||
| e4000d4abc | |||
| a8ec31fbde | |||
| 5a0b93c4b7 | |||
| 17fec6b015 | |||
| eafcc7abc4 | |||
| f80fde0524 | |||
| b4b7b39715 | |||
| 3a286fc69c | |||
| 029ca3ab17 | |||
| 11ae33d80a | |||
| dd2c72548f | |||
| 96ca30941a | |||
| f001a9aa4b | |||
| 0fd817b13f | |||
| c7eddffbb3 | |||
| 17e0fadd44 | |||
| cfd1972d54 | |||
| 82ae18e914 | |||
| 169959a3ac | |||
| ee98e4bcd3 | |||
| 2a56be453e | |||
| 1128eb5d0f | |||
| adaa9d8b19 | |||
| 7f7f314121 | |||
| 03e3d6c9ca | |||
| 8a7e991c5f | |||
| e04f19ed03 | |||
| ff054f42bb | |||
| 818a48fa78 | |||
| 111ea50d80 | |||
| 1b46845734 | |||
| 497b99c328 | |||
| 6b070d8c14 | |||
| dff743a00b | |||
| f408d3d705 | |||
| c4c018b1ee | |||
| b18e34c905 |
@@ -1,59 +0,0 @@
|
|||||||
name: Build
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
workflow_call:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-8:
|
|
||||||
runs-on: almalinux-8
|
|
||||||
container:
|
|
||||||
image: git.unkin.net/unkin/almalinux8-actionsdind:latest
|
|
||||||
options: "--privileged --volume /etc/pki/tls/vault:/etc/pki/tls/vault:ro"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Build Packages
|
|
||||||
env:
|
|
||||||
VAULT_ROLE_ID: ${{ secrets.RPMBUILDER_VAULT_ROLEID }}
|
|
||||||
run: |
|
|
||||||
./tools/build build-all --distro almalinux/el8
|
|
||||||
|
|
||||||
- name: Show RPMs
|
|
||||||
run: |
|
|
||||||
find /workspace -type f -name "*.rpm"
|
|
||||||
|
|
||||||
- name: Upload Artifacts
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: rpms-8
|
|
||||||
path: /workspace/unkin/rpmbuilder/dist/*/*/*.rpm
|
|
||||||
|
|
||||||
build-9:
|
|
||||||
runs-on: almalinux-8
|
|
||||||
container:
|
|
||||||
image: git.unkin.net/unkin/almalinux9-actionsdind:latest
|
|
||||||
options: "--privileged --volume /etc/pki/tls/vault:/etc/pki/tls/vault:ro"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Build Packages
|
|
||||||
env:
|
|
||||||
VAULT_ROLE_ID: ${{ secrets.RPMBUILDER_VAULT_ROLEID }}
|
|
||||||
run: |
|
|
||||||
./tools/build build-all --distro almalinux/el9
|
|
||||||
|
|
||||||
- name: Show RPMs
|
|
||||||
run: |
|
|
||||||
find /workspace -type f -name "*.rpm"
|
|
||||||
|
|
||||||
- name: Upload Artifacts
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: rpms-9
|
|
||||||
path: /workspace/unkin/rpmbuilder/dist/*/*/*.rpm
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
name: Deploy
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
deploy-8:
|
|
||||||
runs-on: almalinux-8
|
|
||||||
container:
|
|
||||||
image: git.unkin.net/unkin/almalinux8-actionsdind:latest
|
|
||||||
options: --privileged
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Download Artifacts
|
|
||||||
run: |
|
|
||||||
mkdir -p /workspace/unkin/rpmbuilder/dist/almalinux/el8
|
|
||||||
export PREVIOUS_RUN_ID=$((GITHUB_RUN_NUMBER - 1))
|
|
||||||
curl -L -o /workspace/rpms.zip "https://git.unkin.net/${GITHUB_REPOSITORY}/actions/runs/${PREVIOUS_RUN_ID}/artifacts/rpms-8"
|
|
||||||
unzip /workspace/rpms.zip -d /workspace/unkin/rpmbuilder/dist/almalinux/el8
|
|
||||||
|
|
||||||
- name: Show RPMs
|
|
||||||
run: |
|
|
||||||
find /workspace -type f -name "*.rpm"
|
|
||||||
|
|
||||||
- name: Upload RPMs to Gitea
|
|
||||||
env:
|
|
||||||
DRONECI_PASSWORD: ${{ secrets.DRONECI_PASSWORD }}
|
|
||||||
run: |
|
|
||||||
for rpm in $(find /workspace/unkin/rpmbuilder/dist/almalinux/el8 -type f -name "*.rpm"); do
|
|
||||||
curl --user droneci:${{ secrets.DRONECI_PASSWORD }} --upload-file $rpm https://git.unkin.net/api/packages/unkin/rpm/almalinux/el8/upload
|
|
||||||
done
|
|
||||||
|
|
||||||
deploy-9:
|
|
||||||
runs-on: almalinux-8
|
|
||||||
container:
|
|
||||||
image: git.unkin.net/unkin/almalinux9-actionsdind:latest
|
|
||||||
options: --privileged
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Download Artifacts
|
|
||||||
run: |
|
|
||||||
mkdir -p /workspace/unkin/rpmbuilder/dist/almalinux/el9
|
|
||||||
export PREVIOUS_RUN_ID=$((GITHUB_RUN_NUMBER - 1))
|
|
||||||
curl -L -o /workspace/rpms.zip "https://git.unkin.net/${GITHUB_REPOSITORY}/actions/runs/${PREVIOUS_RUN_ID}/artifacts/rpms-9"
|
|
||||||
unzip /workspace/rpms.zip -d /workspace/unkin/rpmbuilder/dist/almalinux/el9
|
|
||||||
|
|
||||||
- name: Show RPMs
|
|
||||||
run: |
|
|
||||||
find /workspace -type f -name "*.rpm"
|
|
||||||
|
|
||||||
- name: Upload RPMs to Gitea
|
|
||||||
env:
|
|
||||||
DRONECI_PASSWORD: ${{ secrets.DRONECI_PASSWORD }}
|
|
||||||
run: |
|
|
||||||
for rpm in $(find /workspace/unkin/rpmbuilder/dist/almalinux/el9 -type f -name "*.rpm"); do
|
|
||||||
curl --user droneci:${{ secrets.DRONECI_PASSWORD }} --upload-file $rpm https://git.unkin.net/api/packages/unkin/rpm/almalinux/el9/upload
|
|
||||||
done
|
|
||||||
+16
-3
@@ -3,12 +3,24 @@ repos:
|
|||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v4.5.0
|
rev: v4.5.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: trailing-whitespace
|
- id: check-executables-have-shebangs
|
||||||
- id: end-of-file-fixer
|
- id: check-json
|
||||||
|
- id: check-added-large-files
|
||||||
|
args: ['--maxkb=500']
|
||||||
|
- id: check-merge-conflict
|
||||||
|
- id: check-shebang-scripts-are-executable
|
||||||
|
- id: check-symlinks
|
||||||
|
- id: check-toml
|
||||||
- id: check-yaml
|
- id: check-yaml
|
||||||
args: [--allow-multiple-documents]
|
args: [--allow-multiple-documents]
|
||||||
- id: check-merge-conflict
|
- id: detect-aws-credentials
|
||||||
|
args: [--allow-missing-credentials]
|
||||||
- id: detect-private-key
|
- id: detect-private-key
|
||||||
|
- id: end-of-file-fixer
|
||||||
|
- id: forbid-new-submodules
|
||||||
|
- id: pretty-format-json
|
||||||
|
- id: trailing-whitespace
|
||||||
|
|
||||||
- repo: https://github.com/adrienverge/yamllint.git
|
- repo: https://github.com/adrienverge/yamllint.git
|
||||||
rev: v1.37.1
|
rev: v1.37.1
|
||||||
hooks:
|
hooks:
|
||||||
@@ -18,6 +30,7 @@ repos:
|
|||||||
"-d {extends: relaxed, rules: {line-length: disable}}",
|
"-d {extends: relaxed, rules: {line-length: disable}}",
|
||||||
"-s",
|
"-s",
|
||||||
]
|
]
|
||||||
|
|
||||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
rev: v0.14.7
|
rev: v0.14.7
|
||||||
hooks:
|
hooks:
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
when:
|
||||||
|
- event: pull_request
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build rpms
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
commands:
|
||||||
|
- mkdir -p /woodpecker/rpms
|
||||||
|
- ln -s /woodpecker/rpms /workspace
|
||||||
|
- dnf install buildah -y
|
||||||
|
- ./tools/build build-all --distro almalinux/el8 --buildah
|
||||||
|
privileged: true
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
serviceAccountName: default
|
||||||
|
|
||||||
|
- name: show rpms
|
||||||
|
image: git.unkin.net/unkin/almalinux8-base:latest
|
||||||
|
commands:
|
||||||
|
- find /woodpecker/src/git.unkin.net/unkin/rpmbuilder/ -type f -name "*.rpm"
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
when:
|
||||||
|
- event: pull_request
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build rpms
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
commands:
|
||||||
|
- mkdir -p /woodpecker/rpms
|
||||||
|
- ln -s /woodpecker/rpms /workspace
|
||||||
|
- dnf install buildah -y
|
||||||
|
- ./tools/build build-all --distro almalinux/el9 --buildah
|
||||||
|
privileged: true
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
serviceAccountName: default
|
||||||
|
|
||||||
|
- name: show rpms
|
||||||
|
image: git.unkin.net/unkin/almalinux9-base:latest
|
||||||
|
commands:
|
||||||
|
- find /woodpecker/src/git.unkin.net/unkin/rpmbuilder/ -type f -name "*.rpm"
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
when:
|
||||||
|
- event: push
|
||||||
|
branch: master
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build-rpms
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
commands:
|
||||||
|
- mkdir -p /woodpecker/rpms
|
||||||
|
- ln -s /woodpecker/rpms /workspace
|
||||||
|
- dnf install buildah -y
|
||||||
|
- ./tools/build build-all --distro almalinux/el8 --buildah
|
||||||
|
privileged: true
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
serviceAccountName: default
|
||||||
|
|
||||||
|
- name: show-rpms
|
||||||
|
image: git.unkin.net/unkin/almalinux9-base:latest
|
||||||
|
commands:
|
||||||
|
- find /woodpecker/src/git.unkin.net/unkin/rpmbuilder/ -type f -name "*.rpm"
|
||||||
|
depends_on: [build-rpms]
|
||||||
|
|
||||||
|
- name: deploy-rpms
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
commands:
|
||||||
|
- |
|
||||||
|
for rpm in $(find /woodpecker/src/git.unkin.net/unkin/rpmbuilder/ -type f -name "*.rpm"); do
|
||||||
|
curl --user droneci:$${DRONECI_PASSWORD} --upload-file $rpm https://git.unkin.net/api/packages/unkin/rpm/almalinux/el8/upload
|
||||||
|
done
|
||||||
|
environment:
|
||||||
|
DRONECI_PASSWORD:
|
||||||
|
from_secret: DRONECI_PASSWORD
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
serviceAccountName: default
|
||||||
|
depends_on: [build-rpms, show-rpms]
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
when:
|
||||||
|
- event: push
|
||||||
|
branch: master
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build-rpms
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
commands:
|
||||||
|
- mkdir -p /woodpecker/rpms
|
||||||
|
- ln -s /woodpecker/rpms /workspace
|
||||||
|
- dnf install buildah -y
|
||||||
|
- ./tools/build build-all --distro almalinux/el9 --buildah
|
||||||
|
privileged: true
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
serviceAccountName: default
|
||||||
|
|
||||||
|
- name: show-rpms
|
||||||
|
image: git.unkin.net/unkin/almalinux9-base:latest
|
||||||
|
commands:
|
||||||
|
- find /woodpecker/src/git.unkin.net/unkin/rpmbuilder/ -type f -name "*.rpm"
|
||||||
|
depends_on: [build-rpms]
|
||||||
|
|
||||||
|
- name: deploy-rpms
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
commands:
|
||||||
|
- |
|
||||||
|
for rpm in $(find /woodpecker/src/git.unkin.net/unkin/rpmbuilder/ -type f -name "*.rpm"); do
|
||||||
|
curl --user droneci:$${DRONECI_PASSWORD} --upload-file $rpm https://git.unkin.net/api/packages/unkin/rpm/almalinux/el9/upload
|
||||||
|
done
|
||||||
|
environment:
|
||||||
|
DRONECI_PASSWORD:
|
||||||
|
from_secret: DRONECI_PASSWORD
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
serviceAccountName: default
|
||||||
|
depends_on: [build-rpms, show-rpms]
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
when:
|
||||||
|
- event: pull_request
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: pre-commit
|
||||||
|
image: git.unkin.net/unkin/almalinux9-base:latest
|
||||||
|
commands:
|
||||||
|
- dnf install uv make -y
|
||||||
|
- uvx pre-commit run --all-files
|
||||||
@@ -3,6 +3,10 @@ ROOT_DIR := $(PWD)
|
|||||||
BUILD_TOOL := $(ROOT_DIR)/tools/build
|
BUILD_TOOL := $(ROOT_DIR)/tools/build
|
||||||
DISTRO ?= almalinux/el9
|
DISTRO ?= almalinux/el9
|
||||||
|
|
||||||
|
# Authentication variables (optional)
|
||||||
|
# VAULT_ROLE_ID - Use AppRole authentication if set
|
||||||
|
# VAULT_ROLE - Kubernetes role for service account authentication (default: rpmbuilder)
|
||||||
|
|
||||||
# Automatically find all packages with metadata.yaml
|
# Automatically find all packages with metadata.yaml
|
||||||
PACKAGES := $(shell find $(ROOT_DIR)/rpms -mindepth 1 -maxdepth 1 -type d -exec test -f {}/metadata.yaml \; -print | xargs -n1 basename | sort)
|
PACKAGES := $(shell find $(ROOT_DIR)/rpms -mindepth 1 -maxdepth 1 -type d -exec test -f {}/metadata.yaml \; -print | xargs -n1 basename | sort)
|
||||||
|
|
||||||
@@ -22,6 +26,16 @@ build-all:
|
|||||||
@echo "Building all packages using Python tooling for distro $(DISTRO)..."
|
@echo "Building all packages using Python tooling for distro $(DISTRO)..."
|
||||||
$(BUILD_TOOL) build-all --distro $(DISTRO)
|
$(BUILD_TOOL) build-all --distro $(DISTRO)
|
||||||
|
|
||||||
|
# Build all packages using native build (no Docker)
|
||||||
|
build-all-native:
|
||||||
|
@echo "Building all packages natively (no Docker) for distro $(DISTRO)..."
|
||||||
|
$(BUILD_TOOL) build-all --distro $(DISTRO) --native
|
||||||
|
|
||||||
|
# Build all packages using Buildah
|
||||||
|
build-all-buildah:
|
||||||
|
@echo "Building all packages using Buildah for distro $(DISTRO)..."
|
||||||
|
$(BUILD_TOOL) build-all --distro $(DISTRO) --buildah
|
||||||
|
|
||||||
# Build specific package using Python tool
|
# Build specific package using Python tool
|
||||||
.PHONY: $(PACKAGES)
|
.PHONY: $(PACKAGES)
|
||||||
$(PACKAGES):
|
$(PACKAGES):
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.10.1
|
version: 0.15.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.10.1
|
version: 0.15.0
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
arch: amd64
|
||||||
|
builds:
|
||||||
|
- image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
repository:
|
||||||
|
- almalinux/el8
|
||||||
|
version: 2.1.126
|
||||||
|
- image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
repository:
|
||||||
|
- almalinux/el9
|
||||||
|
version: 2.1.126
|
||||||
|
claude_ai: true
|
||||||
|
description: Claude Code - Anthropic's agentic AI coding tool
|
||||||
|
homepage: https://claude.ai/code
|
||||||
|
license: Proprietary
|
||||||
|
maintainer: Anthropic
|
||||||
|
name: claude-code
|
||||||
|
platform: linux
|
||||||
Executable
+13
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Download claude-code binary
|
||||||
|
wget -O /app/claude https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/claude-ai/claude-code-releases/${PACKAGE_VERSION}/linux-x64/claude
|
||||||
|
chmod +x /app/claude
|
||||||
|
|
||||||
|
# Process the nfpm.yaml template with environment variables
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
# Build the RPM
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- claude-code
|
||||||
|
- claude
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- claude-code
|
||||||
|
- claude
|
||||||
|
|
||||||
|
# Files to include in the package
|
||||||
|
contents:
|
||||||
|
- src: /app/claude
|
||||||
|
dst: /usr/bin/claude
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.9.0
|
version: 1.9.1
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.9.0
|
version: 1.9.1
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: code-server
|
||||||
|
github: coder/code-server
|
||||||
|
description: VS Code in the browser.
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: Coder
|
||||||
|
homepage: https://github.com/coder/code-server
|
||||||
|
license: MIT
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 4.117.0
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 4.117.0
|
||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
curl -L -o /app/dist/code-server-${PACKAGE_VERSION}-${PACKAGE_RELEASE}.x86_64.rpm \
|
||||||
|
https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/coder/code-server/releases/download/v${PACKAGE_VERSION}/code-server-${PACKAGE_VERSION}-amd64.rpm
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# nfpm.yaml - unused, RPM is downloaded directly in build.sh
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.22.2
|
version: 1.22.7
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.22.2
|
version: 1.22.7
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 3.6.7
|
version: 3.6.10
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 3.6.7
|
version: 3.6.10
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.9.0
|
version: 1.11.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.9.0
|
version: 1.11.0
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: git-delta
|
||||||
|
github: dandavison/delta
|
||||||
|
description: A syntax-highlighting pager for git, diff, grep, and blame output.
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: dandavison
|
||||||
|
homepage: https://github.com/dandavison/delta
|
||||||
|
license: MIT
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.19.2
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.19.2
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Note: delta releases use plain version tags (no v prefix)
|
||||||
|
wget -O /app/delta-${PACKAGE_VERSION}-x86_64-unknown-linux-musl.tar.gz https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/dandavison/delta/releases/download/${PACKAGE_VERSION}/delta-${PACKAGE_VERSION}-x86_64-unknown-linux-musl.tar.gz
|
||||||
|
tar xf /app/delta-${PACKAGE_VERSION}-x86_64-unknown-linux-musl.tar.gz
|
||||||
|
mv /app/delta-${PACKAGE_VERSION}-x86_64-unknown-linux-musl/delta /app/delta
|
||||||
|
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- git-delta
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- git-delta
|
||||||
|
|
||||||
|
contents:
|
||||||
|
- src: /app/delta
|
||||||
|
dst: /usr/bin/delta
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: hadolint
|
||||||
|
github: hadolint/hadolint
|
||||||
|
description: A smarter Dockerfile linter that helps you build best practice Docker images.
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: hadolint
|
||||||
|
homepage: https://github.com/hadolint/hadolint
|
||||||
|
license: GPL-3.0
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 2.14.0
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 2.14.0
|
||||||
Executable
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
wget -O /app/hadolint https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/hadolint/hadolint/releases/download/v${PACKAGE_VERSION}/hadolint-linux-x86_64
|
||||||
|
chmod +x /app/hadolint
|
||||||
|
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- hadolint
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- hadolint
|
||||||
|
|
||||||
|
contents:
|
||||||
|
- src: /app/hadolint
|
||||||
|
dst: /usr/bin/hadolint
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
@@ -11,9 +11,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 4.0.5
|
version: 4.1.4
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 4.0.5
|
version: 4.1.4
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.2.3
|
version: 1.4.4
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.2.3
|
version: 1.4.4
|
||||||
|
|||||||
Regular → Executable
@@ -1,15 +1,17 @@
|
|||||||
---
|
|
||||||
arch: amd64
|
arch: amd64
|
||||||
builds:
|
builds:
|
||||||
- image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
- image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: '1'
|
release: 1
|
||||||
repository: [almalinux/el8]
|
repository:
|
||||||
version: 0.16.0
|
- almalinux/el8
|
||||||
- image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
version: 0.17.0
|
||||||
release: '1'
|
- image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
repository: [almalinux/el9]
|
release: 1
|
||||||
version: 0.16.0
|
repository:
|
||||||
description: Jsonnet Language Server Protocol implementation for the Jsonnet templating language.
|
- almalinux/el9
|
||||||
|
version: 0.17.0
|
||||||
|
description: Jsonnet Language Server Protocol implementation for the Jsonnet templating
|
||||||
|
language.
|
||||||
github: grafana/jsonnet-language-server
|
github: grafana/jsonnet-language-server
|
||||||
homepage: https://github.com/grafana/jsonnet-language-server
|
homepage: https://github.com/grafana/jsonnet-language-server
|
||||||
license: Apache-2.0
|
license: Apache-2.0
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
---
|
|
||||||
arch: amd64
|
arch: amd64
|
||||||
builds:
|
builds:
|
||||||
- image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
- image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: '1'
|
release: 1
|
||||||
repository: [almalinux/el8]
|
repository:
|
||||||
version: 0.21.0
|
- almalinux/el8
|
||||||
- image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
version: 0.22.0
|
||||||
release: '1'
|
- image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
repository: [almalinux/el9]
|
release: 1
|
||||||
version: 0.21.0
|
repository:
|
||||||
|
- almalinux/el9
|
||||||
|
version: 0.22.0
|
||||||
description: Linter for Jsonnet
|
description: Linter for Jsonnet
|
||||||
github: google/go-jsonnet
|
github: google/go-jsonnet
|
||||||
homepage: https://github.com/google/go-jsonnet
|
homepage: https://github.com/google/go-jsonnet
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
---
|
|
||||||
arch: amd64
|
arch: amd64
|
||||||
builds:
|
builds:
|
||||||
- image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
- image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: '1'
|
release: 1
|
||||||
repository: [almalinux/el8]
|
repository:
|
||||||
version: 0.21.0
|
- almalinux/el8
|
||||||
- image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
version: 0.22.0
|
||||||
release: '1'
|
- image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
repository: [almalinux/el9]
|
release: 1
|
||||||
version: 0.21.0
|
repository:
|
||||||
|
- almalinux/el9
|
||||||
|
version: 0.22.0
|
||||||
description: A data templating language
|
description: A data templating language
|
||||||
github: google/go-jsonnet
|
github: google/go-jsonnet
|
||||||
homepage: https://github.com/google/go-jsonnet
|
homepage: https://github.com/google/go-jsonnet
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: kubectx
|
||||||
|
github: ahmetb/kubectx
|
||||||
|
description: Faster way to switch between clusters and namespaces in kubectl.
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: ahmetb
|
||||||
|
homepage: https://github.com/ahmetb/kubectx
|
||||||
|
license: Apache-2.0
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.11.0
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.11.0
|
||||||
Executable
+13
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
wget -O /app/kubectx_v${PACKAGE_VERSION}_linux_x86_64.tar.gz https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/ahmetb/kubectx/releases/download/v${PACKAGE_VERSION}/kubectx_v${PACKAGE_VERSION}_linux_x86_64.tar.gz
|
||||||
|
wget -O /app/kubens_v${PACKAGE_VERSION}_linux_x86_64.tar.gz https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/ahmetb/kubectx/releases/download/v${PACKAGE_VERSION}/kubens_v${PACKAGE_VERSION}_linux_x86_64.tar.gz
|
||||||
|
|
||||||
|
tar xf /app/kubectx_v${PACKAGE_VERSION}_linux_x86_64.tar.gz -C /app/ kubectx
|
||||||
|
tar xf /app/kubens_v${PACKAGE_VERSION}_linux_x86_64.tar.gz -C /app/ kubens
|
||||||
|
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- kubectx
|
||||||
|
- kubens
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- kubectx
|
||||||
|
- kubens
|
||||||
|
|
||||||
|
contents:
|
||||||
|
- src: /app/kubectx
|
||||||
|
dst: /usr/bin/kubectx
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
- src: /app/kubens
|
||||||
|
dst: /usr/bin/kubens
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: lazydocker
|
||||||
|
github: jesseduffield/lazydocker
|
||||||
|
description: The lazier way to manage everything docker.
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: jesseduffield
|
||||||
|
homepage: https://github.com/jesseduffield/lazydocker
|
||||||
|
license: MIT
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.25.2
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.25.2
|
||||||
Executable
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
wget -O /app/lazydocker_${PACKAGE_VERSION}_Linux_x86_64.tar.gz https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/jesseduffield/lazydocker/releases/download/v${PACKAGE_VERSION}/lazydocker_${PACKAGE_VERSION}_Linux_x86_64.tar.gz
|
||||||
|
tar xf /app/lazydocker_${PACKAGE_VERSION}_Linux_x86_64.tar.gz -C /app/ lazydocker
|
||||||
|
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- lazydocker
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- lazydocker
|
||||||
|
|
||||||
|
contents:
|
||||||
|
- src: /app/lazydocker
|
||||||
|
dst: /usr/bin/lazydocker
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
Regular → Executable
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: neovim-glibc-2.17
|
||||||
|
github: neovim/neovim-releases
|
||||||
|
description: Vim-fork focused on extensibility and usability (glibc 2.17 compatible build).
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: neovim
|
||||||
|
homepage: https://neovim.io
|
||||||
|
license: Apache-2.0
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.12.2
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.12.2
|
||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
wget -O /app/nvim-linux-x86_64.tar.gz https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/neovim/neovim-releases/releases/download/v${PACKAGE_VERSION}/nvim-linux-x86_64.tar.gz
|
||||||
|
tar xf /app/nvim-linux-x86_64.tar.gz
|
||||||
|
mv /app/nvim-linux-x86_64/bin/nvim /app/nvim
|
||||||
|
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- neovim-glibc-2.17
|
||||||
|
- neovim
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- neovim-glibc-2.17
|
||||||
|
- nvim
|
||||||
|
|
||||||
|
conflicts:
|
||||||
|
- neovim
|
||||||
|
|
||||||
|
contents:
|
||||||
|
- src: /app/nvim
|
||||||
|
dst: /usr/bin/nvim
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: neovim
|
||||||
|
github: neovim/neovim
|
||||||
|
description: Vim-fork focused on extensibility and usability.
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: neovim
|
||||||
|
homepage: https://neovim.io
|
||||||
|
license: Apache-2.0
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.12.2
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.12.2
|
||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
wget -O /app/nvim-linux-x86_64.tar.gz https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/neovim/neovim/releases/download/v${PACKAGE_VERSION}/nvim-linux-x86_64.tar.gz
|
||||||
|
tar xf /app/nvim-linux-x86_64.tar.gz
|
||||||
|
mv /app/nvim-linux-x86_64/bin/nvim /app/nvim
|
||||||
|
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- neovim
|
||||||
|
- neovim-glibc-2.17
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- neovim
|
||||||
|
- nvim
|
||||||
|
|
||||||
|
conflicts:
|
||||||
|
- neovim-glibc-2.17
|
||||||
|
|
||||||
|
contents:
|
||||||
|
- src: /app/nvim
|
||||||
|
dst: /usr/bin/nvim
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 2.44.1
|
version: 2.46.3
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 2.44.1
|
version: 2.46.3
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.10.2
|
version: 1.11.1
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.10.2
|
version: 1.11.1
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.4.8
|
version: 0.4.9
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.4.8
|
version: 0.4.9
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ builds:
|
|||||||
- repository:
|
- repository:
|
||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 2
|
release: 1
|
||||||
version: '25.4'
|
version: '26.1'
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 2
|
release: 1
|
||||||
version: '25.4'
|
version: '26.1'
|
||||||
|
|||||||
Regular → Executable
Regular → Executable
@@ -11,9 +11,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.14.3
|
version: 1.15.3
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.14.3
|
version: 1.15.3
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
---
|
|
||||||
arch: amd64
|
arch: amd64
|
||||||
builds:
|
builds:
|
||||||
- image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
- image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: '1'
|
release: 1
|
||||||
repository: [almalinux/el8]
|
repository:
|
||||||
version: 0.11.0
|
- almalinux/el8
|
||||||
- image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
version: 0.12.0
|
||||||
release: '1'
|
- image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
repository: [almalinux/el9]
|
release: 1
|
||||||
version: 0.11.0
|
repository:
|
||||||
|
- almalinux/el9
|
||||||
|
version: 0.12.0
|
||||||
description: Prometheus exporter for PgBouncer
|
description: Prometheus exporter for PgBouncer
|
||||||
github: prometheus-community/pgbouncer_exporter
|
github: prometheus-community/pgbouncer_exporter
|
||||||
homepage: https://github.com/prometheus-community/pgbouncer_exporter
|
homepage: https://github.com/prometheus-community/pgbouncer_exporter
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.18.1
|
version: 0.19.1
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.18.1
|
version: 0.19.1
|
||||||
|
|||||||
Regular → Executable
@@ -11,9 +11,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.14.10
|
version: 0.15.12
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.14.10
|
version: 0.15.12
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: sops
|
||||||
|
github: getsops/sops
|
||||||
|
description: Simple and flexible tool for managing secrets.
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: getsops
|
||||||
|
homepage: https://github.com/getsops/sops
|
||||||
|
license: MPL-2.0
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 3.12.2
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 3.12.2
|
||||||
Executable
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
wget -O /app/sops https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/getsops/sops/releases/download/v${PACKAGE_VERSION}/sops-v${PACKAGE_VERSION}.linux.amd64
|
||||||
|
chmod +x /app/sops
|
||||||
|
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- sops
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- sops
|
||||||
|
|
||||||
|
contents:
|
||||||
|
- src: /app/sops
|
||||||
|
dst: /usr/bin/sops
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.15.3
|
version: 0.16.3
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.15.3
|
version: 0.16.3
|
||||||
|
|||||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
@@ -11,9 +11,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.15.3
|
version: 0.16.3
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.15.3
|
version: 0.16.3
|
||||||
|
|||||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
@@ -0,0 +1,20 @@
|
|||||||
|
name: starship
|
||||||
|
github: starship/starship
|
||||||
|
description: The minimal, blazing-fast, and infinitely customizable prompt for any
|
||||||
|
shell.
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: starship
|
||||||
|
homepage: https://starship.rs
|
||||||
|
license: ISC
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 1.25.1
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 1.25.1
|
||||||
Executable
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
wget -O /app/starship-x86_64-unknown-linux-musl.tar.gz https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/starship/starship/releases/download/v${PACKAGE_VERSION}/starship-x86_64-unknown-linux-musl.tar.gz
|
||||||
|
tar xf /app/starship-x86_64-unknown-linux-musl.tar.gz
|
||||||
|
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- starship
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- starship
|
||||||
|
|
||||||
|
contents:
|
||||||
|
- src: /app/starship
|
||||||
|
dst: /usr/bin/starship
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: stern
|
||||||
|
github: stern/stern
|
||||||
|
description: Multi pod and container log tailing for Kubernetes.
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: stern
|
||||||
|
homepage: https://github.com/stern/stern
|
||||||
|
license: Apache-2.0
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 1.33.1
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 1.33.1
|
||||||
Executable
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
wget -O /app/stern_${PACKAGE_VERSION}_linux_amd64.tar.gz https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/stern/stern/releases/download/v${PACKAGE_VERSION}/stern_${PACKAGE_VERSION}_linux_amd64.tar.gz
|
||||||
|
tar xf /app/stern_${PACKAGE_VERSION}_linux_amd64.tar.gz
|
||||||
|
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- stern
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- stern
|
||||||
|
|
||||||
|
contents:
|
||||||
|
- src: /app/stern
|
||||||
|
dst: /usr/bin/stern
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: tea
|
||||||
|
github: unknown/tea
|
||||||
|
description: The official CLI for Gitea.
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: Gitea
|
||||||
|
homepage: https://gitea.com/gitea/tea
|
||||||
|
license: MIT
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.14.0
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 0.14.0
|
||||||
Executable
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
curl -L --output /app/tea-linux-amd64 https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/gitea-dl/tea/${PACKAGE_VERSION}/tea-${PACKAGE_VERSION}-linux-amd64
|
||||||
|
chmod +x /app/tea-linux-amd64
|
||||||
|
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- tea
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- tea
|
||||||
|
|
||||||
|
contents:
|
||||||
|
- src: /app/tea-linux-amd64
|
||||||
|
dst: /usr/bin/tea
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
@@ -14,9 +14,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.14.3
|
version: 1.15.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.14.3
|
version: 1.15.0
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.96.1
|
version: 1.0.3
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.96.1
|
version: 1.0.3
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.60.0
|
version: 0.62.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.60.0
|
version: 0.62.0
|
||||||
|
|||||||
Regular → Executable
@@ -5,7 +5,7 @@ set -e
|
|||||||
# Download and extract unrar (with version formatting)
|
# Download and extract unrar (with version formatting)
|
||||||
export DOWNLOAD_VERSION=$(echo $PACKAGE_VERSION | sed s/\\.//)
|
export DOWNLOAD_VERSION=$(echo $PACKAGE_VERSION | sed s/\\.//)
|
||||||
curl -L -o /app/rarlinux.tar.gz https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/rarlab/rar/rarlinux-x64-${DOWNLOAD_VERSION}.tar.gz
|
curl -L -o /app/rarlinux.tar.gz https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/rarlab/rar/rarlinux-x64-${DOWNLOAD_VERSION}.tar.gz
|
||||||
tar xf /app/rarlinux.tar.gz
|
tar xf /app/rarlinux.tar.gz -C /app
|
||||||
mv /app/rar/unrar /app/
|
mv /app/rar/unrar /app/
|
||||||
|
|
||||||
# Process the nfpm.yaml template with environment variables
|
# Process the nfpm.yaml template with environment variables
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.9.20
|
version: 0.11.8
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.9.20
|
version: 0.11.8
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.43.0
|
version: 0.44.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 0.43.0
|
version: 0.44.0
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.21.1
|
version: 2.0.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.21.1
|
version: 2.0.0
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.43.1
|
version: 1.50.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.43.1
|
version: 1.50.0
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.43.1
|
version: 1.50.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.43.1
|
version: 1.50.0
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ builds:
|
|||||||
- almalinux/el8
|
- almalinux/el8
|
||||||
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
- repository:
|
- repository:
|
||||||
- almalinux/el9
|
- almalinux/el9
|
||||||
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
release: 1
|
release: 1
|
||||||
version: 1.132.0
|
version: 1.142.0
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: yq
|
||||||
|
github: mikefarah/yq
|
||||||
|
description: yq is a portable command-line YAML, JSON, XML, CSV, TOML and properties processor.
|
||||||
|
arch: amd64
|
||||||
|
platform: linux
|
||||||
|
maintainer: mikefarah
|
||||||
|
homepage: https://github.com/mikefarah/yq
|
||||||
|
license: MIT
|
||||||
|
builds:
|
||||||
|
- repository:
|
||||||
|
- almalinux/el8
|
||||||
|
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 4.53.2
|
||||||
|
- repository:
|
||||||
|
- almalinux/el9
|
||||||
|
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
|
||||||
|
release: 1
|
||||||
|
version: 4.53.2
|
||||||
Executable
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
wget -O /app/yq https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/mikefarah/yq/releases/download/v${PACKAGE_VERSION}/yq_linux_amd64
|
||||||
|
chmod +x /app/yq
|
||||||
|
|
||||||
|
envsubst < /app/resources/nfpm.yaml > /app/nfpm.yaml
|
||||||
|
|
||||||
|
nfpm pkg --config /app/nfpm.yaml --target /app/dist --packager rpm
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# nfpm.yaml
|
||||||
|
|
||||||
|
name: ${PACKAGE_NAME}
|
||||||
|
version: ${PACKAGE_VERSION}
|
||||||
|
release: ${PACKAGE_RELEASE}
|
||||||
|
arch: ${PACKAGE_ARCH}
|
||||||
|
platform: ${PACKAGE_PLATFORM}
|
||||||
|
section: default
|
||||||
|
priority: extra
|
||||||
|
description: "${PACKAGE_DESCRIPTION}"
|
||||||
|
|
||||||
|
maintainer: ${PACKAGE_MAINTAINER}
|
||||||
|
homepage: ${PACKAGE_HOMEPAGE}
|
||||||
|
license: ${PACKAGE_LICENSE}
|
||||||
|
|
||||||
|
disable_globbing: false
|
||||||
|
|
||||||
|
replaces:
|
||||||
|
- yq
|
||||||
|
|
||||||
|
provides:
|
||||||
|
- yq
|
||||||
|
|
||||||
|
contents:
|
||||||
|
- src: /app/yq
|
||||||
|
dst: /usr/bin/yq
|
||||||
|
file_info:
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
+458
-42
@@ -156,7 +156,7 @@ class PackageMetadata:
|
|||||||
|
|
||||||
def get_vault_client() -> hvac.Client:
|
def get_vault_client() -> hvac.Client:
|
||||||
"""
|
"""
|
||||||
Initialize and authenticate Vault client using AppRole authentication.
|
Initialize and authenticate Vault client using AppRole or Kubernetes authentication.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Authenticated HVAC client
|
Authenticated HVAC client
|
||||||
@@ -166,10 +166,7 @@ def get_vault_client() -> hvac.Client:
|
|||||||
# Get required environment variables
|
# Get required environment variables
|
||||||
vault_addr = os.getenv('VAULT_ADDR', 'https://vault.service.consul:8200')
|
vault_addr = os.getenv('VAULT_ADDR', 'https://vault.service.consul:8200')
|
||||||
vault_role_id = os.getenv('VAULT_ROLE_ID')
|
vault_role_id = os.getenv('VAULT_ROLE_ID')
|
||||||
|
vault_role = os.getenv('VAULT_ROLE', 'rpmbuilder')
|
||||||
if not vault_role_id:
|
|
||||||
logger.error("VAULT_ROLE_ID environment variable is required")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# Initialize Vault client with CA certificate
|
# Initialize Vault client with CA certificate
|
||||||
client = hvac.Client(
|
client = hvac.Client(
|
||||||
@@ -177,21 +174,55 @@ def get_vault_client() -> hvac.Client:
|
|||||||
verify='/etc/pki/tls/cert.pem'
|
verify='/etc/pki/tls/cert.pem'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Authenticate using AppRole
|
# Use AppRole authentication if VAULT_ROLE_ID is available
|
||||||
try:
|
if vault_role_id:
|
||||||
logger.debug(f"Authenticating to Vault at {vault_addr}")
|
try:
|
||||||
client.auth.approle.login(role_id=vault_role_id)
|
logger.debug(f"Authenticating to Vault at {vault_addr} using AppRole")
|
||||||
|
client.auth.approle.login(role_id=vault_role_id)
|
||||||
|
|
||||||
if not client.is_authenticated():
|
if not client.is_authenticated():
|
||||||
logger.error("Failed to authenticate with Vault")
|
logger.error("Failed to authenticate with Vault using AppRole")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
logger.debug("Successfully authenticated with Vault using AppRole")
|
||||||
|
return client
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"AppRole authentication failed: {e}")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
logger.debug("Successfully authenticated with Vault")
|
# Fallback to Kubernetes authentication if service account token is available
|
||||||
return client
|
service_account_token_path = '/var/run/secrets/kubernetes.io/serviceaccount/token'
|
||||||
|
|
||||||
except Exception as e:
|
if os.path.exists(service_account_token_path):
|
||||||
logger.error(f"Vault authentication failed: {e}")
|
try:
|
||||||
sys.exit(1)
|
logger.debug(f"Attempting Kubernetes authentication to Vault at {vault_addr}")
|
||||||
|
|
||||||
|
# Read the service account token
|
||||||
|
with open(service_account_token_path, 'r') as f:
|
||||||
|
jwt_token = f.read().strip()
|
||||||
|
|
||||||
|
# Authenticate using Kubernetes auth method
|
||||||
|
client.auth.kubernetes.login(
|
||||||
|
role=vault_role,
|
||||||
|
jwt=jwt_token,
|
||||||
|
mount_point='k8s/au/syd1'
|
||||||
|
)
|
||||||
|
|
||||||
|
if not client.is_authenticated():
|
||||||
|
logger.error("Failed to authenticate with Vault using Kubernetes auth")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
logger.debug("Successfully authenticated with Vault using Kubernetes auth")
|
||||||
|
return client
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Kubernetes authentication failed: {e}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# No authentication method available
|
||||||
|
logger.error("Neither VAULT_ROLE_ID environment variable nor Kubernetes service account token is available")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def get_gitea_token() -> str:
|
def get_gitea_token() -> str:
|
||||||
@@ -570,6 +601,50 @@ def check_docker_available() -> bool:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def check_native_build_deps() -> bool:
|
||||||
|
"""
|
||||||
|
Check if native build dependencies are available (nfpm, envsubst, etc.).
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True if native build dependencies are available, False otherwise
|
||||||
|
"""
|
||||||
|
required_commands = ['nfpm', 'envsubst', 'wget', 'tar']
|
||||||
|
|
||||||
|
for cmd in required_commands:
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
[cmd, '--version'],
|
||||||
|
capture_output=True,
|
||||||
|
text=True,
|
||||||
|
timeout=5
|
||||||
|
)
|
||||||
|
if result.returncode != 0:
|
||||||
|
return False
|
||||||
|
except (subprocess.TimeoutExpired, FileNotFoundError):
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def check_buildah_available() -> bool:
|
||||||
|
"""
|
||||||
|
Check if Buildah is available.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True if Buildah is available, False otherwise
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
['buildah', 'version'],
|
||||||
|
capture_output=True,
|
||||||
|
text=True,
|
||||||
|
timeout=10
|
||||||
|
)
|
||||||
|
return result.returncode == 0
|
||||||
|
except (subprocess.TimeoutExpired, FileNotFoundError):
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def cleanup_container(container_name: str) -> None:
|
def cleanup_container(container_name: str) -> None:
|
||||||
"""
|
"""
|
||||||
Remove a Docker container.
|
Remove a Docker container.
|
||||||
@@ -694,6 +769,7 @@ def build_package_docker(
|
|||||||
build_args = [
|
build_args = [
|
||||||
'docker', 'build',
|
'docker', 'build',
|
||||||
'--pull',
|
'--pull',
|
||||||
|
'--network=host',
|
||||||
'-f', str(central_dockerfile),
|
'-f', str(central_dockerfile),
|
||||||
'--build-arg', f'BASE_IMAGE={base_image}',
|
'--build-arg', f'BASE_IMAGE={base_image}',
|
||||||
'--build-arg', f'PACKAGE_NAME={package_name}',
|
'--build-arg', f'PACKAGE_NAME={package_name}',
|
||||||
@@ -726,6 +802,7 @@ def build_package_docker(
|
|||||||
# Step 2: Create and start container
|
# Step 2: Create and start container
|
||||||
create_args = [
|
create_args = [
|
||||||
'docker', 'create',
|
'docker', 'create',
|
||||||
|
'--network=host',
|
||||||
'--name', container_name,
|
'--name', container_name,
|
||||||
image_name
|
image_name
|
||||||
]
|
]
|
||||||
@@ -777,6 +854,302 @@ def build_package_docker(
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def build_package_native(
|
||||||
|
package_dir: Path,
|
||||||
|
package_name: str,
|
||||||
|
package_version: str,
|
||||||
|
package_release: str,
|
||||||
|
dist_dir: Path,
|
||||||
|
repository: str,
|
||||||
|
dry_run: bool = False
|
||||||
|
) -> bool:
|
||||||
|
"""
|
||||||
|
Build a package natively without Docker, running build scripts directly.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
package_dir: Directory containing the package resources
|
||||||
|
package_name: Name of the package
|
||||||
|
package_version: Package version
|
||||||
|
package_release: Package release number
|
||||||
|
dist_dir: Directory to store built packages
|
||||||
|
repository: Repository path (e.g., 'almalinux/el9')
|
||||||
|
dry_run: If True, only show what would be done
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True if build succeeded, False otherwise
|
||||||
|
"""
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Ensure dist directory exists with repository structure
|
||||||
|
package_dist_dir = dist_dir / repository
|
||||||
|
if not dry_run:
|
||||||
|
package_dist_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
# Create a temporary workspace for native build
|
||||||
|
import tempfile
|
||||||
|
with tempfile.TemporaryDirectory() as temp_dir:
|
||||||
|
temp_path = Path(temp_dir)
|
||||||
|
app_dir = temp_path / "app"
|
||||||
|
app_dist_dir = app_dir / "dist"
|
||||||
|
|
||||||
|
# Create directories
|
||||||
|
if not dry_run:
|
||||||
|
app_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
app_dist_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
# Copy package resources to temp directory
|
||||||
|
import shutil
|
||||||
|
temp_resources_dir = app_dir / "resources"
|
||||||
|
if not dry_run:
|
||||||
|
shutil.copytree(package_dir / "resources", temp_resources_dir)
|
||||||
|
|
||||||
|
# Read metadata.yaml to get all package fields
|
||||||
|
metadata_file = package_dir / "metadata.yaml"
|
||||||
|
metadata = {}
|
||||||
|
if metadata_file.exists():
|
||||||
|
try:
|
||||||
|
with open(metadata_file, 'r') as f:
|
||||||
|
metadata = yaml.safe_load(f) or {}
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"Could not read metadata.yaml: {e}")
|
||||||
|
|
||||||
|
logger.info(f"Building RPM for {package_name} version {package_version} natively")
|
||||||
|
|
||||||
|
if dry_run:
|
||||||
|
logger.info(f"[DRY RUN] Would build natively from: {temp_path}")
|
||||||
|
logger.info("[DRY RUN] Would set environment variables:")
|
||||||
|
logger.info(f"[DRY RUN] PACKAGE_NAME={package_name}")
|
||||||
|
logger.info(f"[DRY RUN] PACKAGE_VERSION={package_version}")
|
||||||
|
logger.info(f"[DRY RUN] PACKAGE_RELEASE={package_release}")
|
||||||
|
logger.info(f"[DRY RUN] PACKAGE_DESCRIPTION={metadata.get('description', '')}")
|
||||||
|
logger.info(f"[DRY RUN] Would run: {temp_resources_dir / 'build.sh'}")
|
||||||
|
logger.info(f"[DRY RUN] Would copy artifacts to: {package_dist_dir}")
|
||||||
|
return True
|
||||||
|
|
||||||
|
# Set up environment variables like the Dockerfile does
|
||||||
|
build_env = os.environ.copy()
|
||||||
|
build_env.update({
|
||||||
|
'PACKAGE_NAME': package_name,
|
||||||
|
'PACKAGE_VERSION': package_version,
|
||||||
|
'PACKAGE_RELEASE': package_release,
|
||||||
|
'PACKAGE_DESCRIPTION': metadata.get('description', ''),
|
||||||
|
'PACKAGE_MAINTAINER': metadata.get('maintainer', ''),
|
||||||
|
'PACKAGE_HOMEPAGE': metadata.get('homepage', ''),
|
||||||
|
'PACKAGE_LICENSE': metadata.get('license', ''),
|
||||||
|
'PACKAGE_ARCH': metadata.get('arch', 'amd64'),
|
||||||
|
'PACKAGE_PLATFORM': metadata.get('platform', 'linux')
|
||||||
|
})
|
||||||
|
|
||||||
|
# Run the build script
|
||||||
|
build_script = temp_resources_dir / "build.sh"
|
||||||
|
if not build_script.exists():
|
||||||
|
logger.error(f"Build script not found: {build_script}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Make build script executable
|
||||||
|
build_script.chmod(0o755)
|
||||||
|
|
||||||
|
logger.debug(f"Running build script: {build_script}")
|
||||||
|
result = subprocess.run(
|
||||||
|
[str(build_script)],
|
||||||
|
cwd=app_dir,
|
||||||
|
env=build_env,
|
||||||
|
capture_output=True,
|
||||||
|
text=True
|
||||||
|
)
|
||||||
|
|
||||||
|
if result.returncode != 0:
|
||||||
|
logger.error(f"Native build failed for {package_name}")
|
||||||
|
logger.error(f"stdout: {result.stdout}")
|
||||||
|
logger.error(f"stderr: {result.stderr}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Copy artifacts to final destination
|
||||||
|
if app_dist_dir.exists():
|
||||||
|
for item in app_dist_dir.iterdir():
|
||||||
|
if item.is_file():
|
||||||
|
shutil.copy2(item, package_dist_dir)
|
||||||
|
|
||||||
|
logger.info(f"Successfully built {package_name}-{package_version}-{package_release} natively")
|
||||||
|
return True
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Unexpected error building {package_name} natively: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def build_package_buildah(
|
||||||
|
package_dir: Path,
|
||||||
|
package_name: str,
|
||||||
|
package_version: str,
|
||||||
|
package_release: str,
|
||||||
|
dist_dir: Path,
|
||||||
|
repository: str,
|
||||||
|
base_image: str = "git.unkin.net/unkin/almalinux9-rpmbuilder:latest",
|
||||||
|
dry_run: bool = False
|
||||||
|
) -> bool:
|
||||||
|
"""
|
||||||
|
Build a package using Buildah without Docker daemon.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
package_dir: Directory containing the package resources
|
||||||
|
package_name: Name of the package
|
||||||
|
package_version: Package version
|
||||||
|
package_release: Package release number
|
||||||
|
dist_dir: Directory to store built packages
|
||||||
|
repository: Repository path (e.g., 'almalinux/el9')
|
||||||
|
base_image: Base Docker image to use for building
|
||||||
|
dry_run: If True, only show what would be done
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True if build succeeded, False otherwise
|
||||||
|
"""
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Ensure dist directory exists with repository structure
|
||||||
|
package_dist_dir = dist_dir / repository
|
||||||
|
if not dry_run:
|
||||||
|
package_dist_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
# Generate container name
|
||||||
|
container_name = f"{package_name}-{package_version}-buildah"
|
||||||
|
|
||||||
|
# Read metadata.yaml to get all package fields
|
||||||
|
metadata_file = package_dir / "metadata.yaml"
|
||||||
|
metadata = {}
|
||||||
|
if metadata_file.exists():
|
||||||
|
try:
|
||||||
|
with open(metadata_file, 'r') as f:
|
||||||
|
metadata = yaml.safe_load(f) or {}
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"Could not read metadata.yaml: {e}")
|
||||||
|
|
||||||
|
logger.info(f"Building RPM for {package_name} version {package_version} using Buildah")
|
||||||
|
|
||||||
|
if dry_run:
|
||||||
|
logger.info(f"[DRY RUN] Would use Buildah to build from: {base_image}")
|
||||||
|
logger.info("[DRY RUN] Would set environment variables:")
|
||||||
|
logger.info(f"[DRY RUN] PACKAGE_NAME={package_name}")
|
||||||
|
logger.info(f"[DRY RUN] PACKAGE_VERSION={package_version}")
|
||||||
|
logger.info(f"[DRY RUN] PACKAGE_RELEASE={package_release}")
|
||||||
|
logger.info(f"[DRY RUN] Would copy artifacts to: {package_dist_dir}")
|
||||||
|
return True
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Step 1: Create a working container from base image
|
||||||
|
from_args = ['buildah', 'from', '--name', container_name, base_image]
|
||||||
|
logger.debug(f"Running: {' '.join(from_args)}")
|
||||||
|
result = subprocess.run(from_args, capture_output=True, text=True)
|
||||||
|
|
||||||
|
if result.returncode != 0:
|
||||||
|
logger.error(f"Failed to create Buildah container from {base_image}")
|
||||||
|
logger.error(f"stderr: {result.stderr}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Step 2: Set environment variables
|
||||||
|
env_vars = {
|
||||||
|
'PACKAGE_NAME': package_name,
|
||||||
|
'PACKAGE_VERSION': package_version,
|
||||||
|
'PACKAGE_RELEASE': package_release,
|
||||||
|
'PACKAGE_DESCRIPTION': metadata.get('description', ''),
|
||||||
|
'PACKAGE_MAINTAINER': metadata.get('maintainer', ''),
|
||||||
|
'PACKAGE_HOMEPAGE': metadata.get('homepage', ''),
|
||||||
|
'PACKAGE_LICENSE': metadata.get('license', ''),
|
||||||
|
'PACKAGE_ARCH': metadata.get('arch', 'amd64'),
|
||||||
|
'PACKAGE_PLATFORM': metadata.get('platform', 'linux')
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value in env_vars.items():
|
||||||
|
config_args = ['buildah', 'config', '--env', f'{key}={value}', container_name]
|
||||||
|
logger.debug(f"Running: {' '.join(config_args)}")
|
||||||
|
result = subprocess.run(config_args, capture_output=True, text=True)
|
||||||
|
if result.returncode != 0:
|
||||||
|
logger.error(f"Failed to set environment variable {key}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Step 3: Copy resources to container
|
||||||
|
copy_args = [
|
||||||
|
'buildah', 'copy', container_name,
|
||||||
|
str(package_dir / "resources"), '/app/resources'
|
||||||
|
]
|
||||||
|
logger.debug(f"Running: {' '.join(copy_args)}")
|
||||||
|
result = subprocess.run(copy_args, capture_output=True, text=True)
|
||||||
|
|
||||||
|
if result.returncode != 0:
|
||||||
|
logger.error(f"Failed to copy resources to container")
|
||||||
|
logger.error(f"stderr: {result.stderr}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Step 4: Create dist directory in container
|
||||||
|
run_args = ['buildah', 'run', container_name, 'mkdir', '-p', '/app/dist']
|
||||||
|
logger.debug(f"Running: {' '.join(run_args)}")
|
||||||
|
result = subprocess.run(run_args, capture_output=True, text=True)
|
||||||
|
|
||||||
|
# Step 5: Run the build script
|
||||||
|
run_args = ['buildah', 'run', '--workingdir', '/app', container_name, '/app/resources/build.sh']
|
||||||
|
logger.debug(f"Running: {' '.join(run_args)}")
|
||||||
|
result = subprocess.run(run_args, capture_output=True, text=True)
|
||||||
|
|
||||||
|
if result.returncode != 0:
|
||||||
|
logger.error(f"Buildah build script failed for {package_name}")
|
||||||
|
logger.error(f"stdout: {result.stdout}")
|
||||||
|
logger.error(f"stderr: {result.stderr}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Step 6: Copy artifacts from container to host
|
||||||
|
copy_out_args = [
|
||||||
|
'buildah', 'run', container_name,
|
||||||
|
'find', '/app/dist', '-type', 'f', '-name', '*.rpm'
|
||||||
|
]
|
||||||
|
result = subprocess.run(copy_out_args, capture_output=True, text=True)
|
||||||
|
logger.debug(f"Find RPMs result: {result.stdout}")
|
||||||
|
|
||||||
|
if result.returncode == 0 and result.stdout.strip():
|
||||||
|
rpm_files = result.stdout.strip().split('\n')
|
||||||
|
logger.info(f"Found {len(rpm_files)} RPM files to copy")
|
||||||
|
|
||||||
|
for rpm_file in rpm_files:
|
||||||
|
rpm_file = rpm_file.strip()
|
||||||
|
if rpm_file:
|
||||||
|
# Use buildah mount to copy files out
|
||||||
|
mount_args = ['buildah', 'mount', container_name]
|
||||||
|
mount_result = subprocess.run(mount_args, capture_output=True, text=True)
|
||||||
|
|
||||||
|
if mount_result.returncode == 0:
|
||||||
|
container_path = mount_result.stdout.strip()
|
||||||
|
source_file = Path(container_path) / rpm_file.lstrip('/')
|
||||||
|
|
||||||
|
if source_file.exists():
|
||||||
|
import shutil
|
||||||
|
dest_file = package_dist_dir / source_file.name
|
||||||
|
shutil.copy2(source_file, dest_file)
|
||||||
|
logger.debug(f"Copied {source_file} to {dest_file}")
|
||||||
|
else:
|
||||||
|
logger.error(f"Source file not found: {source_file}")
|
||||||
|
|
||||||
|
# Unmount
|
||||||
|
subprocess.run(['buildah', 'unmount', container_name], capture_output=True)
|
||||||
|
else:
|
||||||
|
logger.error(f"Failed to mount container: {mount_result.stderr}")
|
||||||
|
else:
|
||||||
|
logger.warning(f"No RPM files found or find command failed: {result.stderr}")
|
||||||
|
|
||||||
|
logger.info(f"Successfully built {package_name}-{package_version}-{package_release} using Buildah")
|
||||||
|
return True
|
||||||
|
|
||||||
|
finally:
|
||||||
|
# Step 7: Clean up container
|
||||||
|
rm_args = ['buildah', 'rm', container_name]
|
||||||
|
logger.debug(f"Running: {' '.join(rm_args)}")
|
||||||
|
subprocess.run(rm_args, capture_output=True, text=True)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Unexpected error building {package_name} with Buildah: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def cleanup_images(image_pattern: str = "*-builder") -> None:
|
def cleanup_images(image_pattern: str = "*-builder") -> None:
|
||||||
"""
|
"""
|
||||||
Clean up Docker images matching a pattern.
|
Clean up Docker images matching a pattern.
|
||||||
@@ -917,7 +1290,9 @@ class Builder:
|
|||||||
release: str,
|
release: str,
|
||||||
dry_run: bool = False,
|
dry_run: bool = False,
|
||||||
force: bool = False,
|
force: bool = False,
|
||||||
distro: str = 'almalinux/el9'
|
distro: str = 'almalinux/el9',
|
||||||
|
native: bool = False,
|
||||||
|
buildah: bool = False
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""
|
"""
|
||||||
Build a single package.
|
Build a single package.
|
||||||
@@ -993,9 +1368,9 @@ class Builder:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
package_info = PackageInfo(package, version, release, package_dir, distro, base_image)
|
package_info = PackageInfo(package, version, release, package_dir, distro, base_image)
|
||||||
return self._build_package(package_info, dry_run, force)
|
return self._build_package(package_info, dry_run, force, native, buildah)
|
||||||
|
|
||||||
def build_all(self, dry_run: bool = False, force: bool = False, parallel: int = 4, distro: str = 'el/9') -> bool:
|
def build_all(self, dry_run: bool = False, force: bool = False, parallel: int = 4, distro: str = 'el/9', native: bool = False, buildah: bool = False) -> bool:
|
||||||
"""
|
"""
|
||||||
Build all packages.
|
Build all packages.
|
||||||
|
|
||||||
@@ -1017,29 +1392,29 @@ class Builder:
|
|||||||
self.logger.info(f"Found {len(packages)} packages to process")
|
self.logger.info(f"Found {len(packages)} packages to process")
|
||||||
|
|
||||||
if parallel == 1:
|
if parallel == 1:
|
||||||
return self._build_sequential(packages, dry_run, force)
|
return self._build_sequential(packages, dry_run, force, native, buildah)
|
||||||
else:
|
else:
|
||||||
return self._build_parallel(packages, dry_run, force, parallel)
|
return self._build_parallel(packages, dry_run, force, parallel, native, buildah)
|
||||||
|
|
||||||
def _build_sequential(self, packages: List[PackageInfo], dry_run: bool, force: bool) -> bool:
|
def _build_sequential(self, packages: List[PackageInfo], dry_run: bool, force: bool, native: bool, buildah: bool) -> bool:
|
||||||
"""Build packages sequentially."""
|
"""Build packages sequentially."""
|
||||||
success_count = 0
|
success_count = 0
|
||||||
|
|
||||||
for package_info in packages:
|
for package_info in packages:
|
||||||
if self._build_package(package_info, dry_run, force):
|
if self._build_package(package_info, dry_run, force, native, buildah):
|
||||||
success_count += 1
|
success_count += 1
|
||||||
|
|
||||||
self.logger.info(f"Built {success_count}/{len(packages)} packages successfully")
|
self.logger.info(f"Built {success_count}/{len(packages)} packages successfully")
|
||||||
return success_count == len(packages)
|
return success_count == len(packages)
|
||||||
|
|
||||||
def _build_parallel(self, packages: List[PackageInfo], dry_run: bool, force: bool, parallel: int) -> bool:
|
def _build_parallel(self, packages: List[PackageInfo], dry_run: bool, force: bool, parallel: int, native: bool, buildah: bool) -> bool:
|
||||||
"""Build packages in parallel."""
|
"""Build packages in parallel."""
|
||||||
success_count = 0
|
success_count = 0
|
||||||
|
|
||||||
with ThreadPoolExecutor(max_workers=parallel) as executor:
|
with ThreadPoolExecutor(max_workers=parallel) as executor:
|
||||||
# Submit all build tasks
|
# Submit all build tasks
|
||||||
future_to_package = {
|
future_to_package = {
|
||||||
executor.submit(self._build_package, pkg, dry_run, force): pkg
|
executor.submit(self._build_package, pkg, dry_run, force, native, buildah): pkg
|
||||||
for pkg in packages
|
for pkg in packages
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1056,7 +1431,7 @@ class Builder:
|
|||||||
self.logger.info(f"Built {success_count}/{len(packages)} packages successfully")
|
self.logger.info(f"Built {success_count}/{len(packages)} packages successfully")
|
||||||
return success_count == len(packages)
|
return success_count == len(packages)
|
||||||
|
|
||||||
def _build_package(self, package_info: PackageInfo, dry_run: bool, force: bool) -> bool:
|
def _build_package(self, package_info: PackageInfo, dry_run: bool, force: bool, native: bool = False, buildah: bool = False) -> bool:
|
||||||
"""
|
"""
|
||||||
Build a single package.
|
Build a single package.
|
||||||
|
|
||||||
@@ -1081,22 +1456,55 @@ class Builder:
|
|||||||
)
|
)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# Check Docker is available (unless dry run)
|
# Check build tool availability (unless dry run)
|
||||||
if not dry_run and not check_docker_available():
|
use_native = native
|
||||||
self.logger.error("Docker is not available or running")
|
use_buildah = buildah
|
||||||
|
use_docker = not use_native and not use_buildah and check_docker_available()
|
||||||
|
if not use_native and not use_buildah and not use_docker:
|
||||||
|
use_buildah = check_buildah_available()
|
||||||
|
if not use_native and not use_buildah and not use_docker:
|
||||||
|
use_native = check_native_build_deps()
|
||||||
|
|
||||||
|
if not dry_run and not use_native and not use_buildah and not use_docker:
|
||||||
|
self.logger.error("No build tools available (tried native, Buildah, Docker)")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Build the package
|
# Build the package using available tool
|
||||||
return build_package_docker(
|
if use_native:
|
||||||
package_dir=package_info.directory,
|
self.logger.debug(f"Using native build for {package_info.name}")
|
||||||
package_name=package_info.name,
|
return build_package_native(
|
||||||
package_version=package_info.version,
|
package_dir=package_info.directory,
|
||||||
package_release=package_info.release,
|
package_name=package_info.name,
|
||||||
dist_dir=self.dist_dir,
|
package_version=package_info.version,
|
||||||
repository=package_info.distro,
|
package_release=package_info.release,
|
||||||
base_image=package_info.base_image,
|
dist_dir=self.dist_dir,
|
||||||
dry_run=dry_run
|
repository=package_info.distro,
|
||||||
)
|
dry_run=dry_run
|
||||||
|
)
|
||||||
|
elif use_buildah:
|
||||||
|
self.logger.debug(f"Using Buildah to build {package_info.name}")
|
||||||
|
return build_package_buildah(
|
||||||
|
package_dir=package_info.directory,
|
||||||
|
package_name=package_info.name,
|
||||||
|
package_version=package_info.version,
|
||||||
|
package_release=package_info.release,
|
||||||
|
dist_dir=self.dist_dir,
|
||||||
|
repository=package_info.distro,
|
||||||
|
base_image=package_info.base_image,
|
||||||
|
dry_run=dry_run
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.logger.debug(f"Using Docker to build {package_info.name}")
|
||||||
|
return build_package_docker(
|
||||||
|
package_dir=package_info.directory,
|
||||||
|
package_name=package_info.name,
|
||||||
|
package_version=package_info.version,
|
||||||
|
package_release=package_info.release,
|
||||||
|
dist_dir=self.dist_dir,
|
||||||
|
repository=package_info.distro,
|
||||||
|
base_image=package_info.base_image,
|
||||||
|
dry_run=dry_run
|
||||||
|
)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error(f"Failed to build {package_info}: {e}")
|
self.logger.error(f"Failed to build {package_info}: {e}")
|
||||||
@@ -1358,6 +1766,8 @@ def build(
|
|||||||
distro: str = typer.Option("almalinux/el9", help="Target distro (default: almalinux/el9)"),
|
distro: str = typer.Option("almalinux/el9", help="Target distro (default: almalinux/el9)"),
|
||||||
dry_run: bool = typer.Option(False, "--dry-run", help="Show what would be built without building"),
|
dry_run: bool = typer.Option(False, "--dry-run", help="Show what would be built without building"),
|
||||||
force: bool = typer.Option(False, "--force", help="Build even if package exists in registry"),
|
force: bool = typer.Option(False, "--force", help="Build even if package exists in registry"),
|
||||||
|
native: bool = typer.Option(False, "--native", help="Force native build (skip Docker even if available)"),
|
||||||
|
buildah: bool = typer.Option(False, "--buildah", help="Force Buildah build (requires Buildah)"),
|
||||||
verbose: bool = typer.Option(False, "--verbose", "-v", help="Enable verbose logging")
|
verbose: bool = typer.Option(False, "--verbose", "-v", help="Enable verbose logging")
|
||||||
):
|
):
|
||||||
"""Build a specific package."""
|
"""Build a specific package."""
|
||||||
@@ -1419,7 +1829,9 @@ def build(
|
|||||||
release=str(release),
|
release=str(release),
|
||||||
dry_run=dry_run,
|
dry_run=dry_run,
|
||||||
force=force,
|
force=force,
|
||||||
distro=distro
|
distro=distro,
|
||||||
|
native=native,
|
||||||
|
buildah=buildah
|
||||||
)
|
)
|
||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
@@ -1435,6 +1847,8 @@ def build_all(
|
|||||||
force: bool = typer.Option(False, "--force", help="Build even if packages exist in registry"),
|
force: bool = typer.Option(False, "--force", help="Build even if packages exist in registry"),
|
||||||
parallel: int = typer.Option(4, help="Number of parallel builds"),
|
parallel: int = typer.Option(4, help="Number of parallel builds"),
|
||||||
distro: str = typer.Option("almalinux/el9", help="Target distro (almalinux/el8, almalinux/el9, or 'all' for all distros)"),
|
distro: str = typer.Option("almalinux/el9", help="Target distro (almalinux/el8, almalinux/el9, or 'all' for all distros)"),
|
||||||
|
native: bool = typer.Option(False, "--native", help="Force native build (skip Docker even if available)"),
|
||||||
|
buildah: bool = typer.Option(False, "--buildah", help="Force Buildah build (requires Buildah)"),
|
||||||
verbose: bool = typer.Option(False, "--verbose", "-v", help="Enable verbose logging")
|
verbose: bool = typer.Option(False, "--verbose", "-v", help="Enable verbose logging")
|
||||||
):
|
):
|
||||||
"""Build all packages."""
|
"""Build all packages."""
|
||||||
@@ -1448,7 +1862,9 @@ def build_all(
|
|||||||
dry_run=dry_run,
|
dry_run=dry_run,
|
||||||
force=force,
|
force=force,
|
||||||
parallel=parallel,
|
parallel=parallel,
|
||||||
distro=distro
|
distro=distro,
|
||||||
|
native=native,
|
||||||
|
buildah=buildah
|
||||||
)
|
)
|
||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
|
|||||||
+66
-18
@@ -154,6 +154,33 @@ def load_env_vars(env_file: Path) -> Dict[str, str]:
|
|||||||
return env_vars
|
return env_vars
|
||||||
|
|
||||||
|
|
||||||
|
def get_claude_ai_latest_version() -> Optional[str]:
|
||||||
|
"""
|
||||||
|
Get the latest claude-code version from downloads.claude.ai.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Latest version string or None if not found
|
||||||
|
"""
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
try:
|
||||||
|
url = "https://downloads.claude.ai/claude-code-releases/latest"
|
||||||
|
logger.debug(f"Checking claude-code latest version: {url}")
|
||||||
|
response = requests.get(url, timeout=30)
|
||||||
|
|
||||||
|
if response.status_code == 200:
|
||||||
|
version = response.text.strip()
|
||||||
|
logger.debug(f"Latest claude-code version: {version}")
|
||||||
|
return version
|
||||||
|
else:
|
||||||
|
logger.warning(f"Unexpected response from claude.ai: {response.status_code}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
except requests.RequestException as e:
|
||||||
|
logger.error(f"Failed to check claude-code version: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_github_latest_release(repo: str) -> Optional[Dict]:
|
def get_github_latest_release(repo: str) -> Optional[Dict]:
|
||||||
"""
|
"""
|
||||||
Get the latest release from GitHub API.
|
Get the latest release from GitHub API.
|
||||||
@@ -266,7 +293,11 @@ def update_package_metadata(package_dir: Path, new_version: str, dry_run: bool =
|
|||||||
with open(metadata_file, 'r') as f:
|
with open(metadata_file, 'r') as f:
|
||||||
metadata = yaml.safe_load(f)
|
metadata = yaml.safe_load(f)
|
||||||
|
|
||||||
old_version = metadata.get('version', 'unknown')
|
builds = metadata.get('builds', [])
|
||||||
|
if builds and isinstance(builds, list) and builds[0].get('version') is not None:
|
||||||
|
old_version = str(builds[0].get('version', 'unknown'))
|
||||||
|
else:
|
||||||
|
old_version = metadata.get('version', 'unknown')
|
||||||
logger.info(f"Updating {metadata.get('name', 'unknown')} from {old_version} to {new_version}")
|
logger.info(f"Updating {metadata.get('name', 'unknown')} from {old_version} to {new_version}")
|
||||||
|
|
||||||
if dry_run:
|
if dry_run:
|
||||||
@@ -274,8 +305,15 @@ def update_package_metadata(package_dir: Path, new_version: str, dry_run: bool =
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
# Update version in metadata and reset release to 1
|
# Update version in metadata and reset release to 1
|
||||||
metadata['version'] = new_version
|
# Support both top-level version and builds[].version
|
||||||
metadata['release'] = 1
|
builds = metadata.get('builds', [])
|
||||||
|
if builds and isinstance(builds, list) and builds[0].get('version') is not None:
|
||||||
|
for build in builds:
|
||||||
|
build['version'] = new_version
|
||||||
|
build['release'] = 1
|
||||||
|
else:
|
||||||
|
metadata['version'] = new_version
|
||||||
|
metadata['release'] = 1
|
||||||
|
|
||||||
# Write updated metadata
|
# Write updated metadata
|
||||||
with open(metadata_file, 'w') as f:
|
with open(metadata_file, 'w') as f:
|
||||||
@@ -313,28 +351,38 @@ def check_package_updates(package_dir: Path, dry_run: bool = False) -> bool:
|
|||||||
metadata = yaml.safe_load(f)
|
metadata = yaml.safe_load(f)
|
||||||
|
|
||||||
package_name = metadata.get('name', package_dir.name)
|
package_name = metadata.get('name', package_dir.name)
|
||||||
current_version = metadata.get('version')
|
|
||||||
github_repo = metadata.get('github')
|
github_repo = metadata.get('github')
|
||||||
|
claude_ai = metadata.get('claude_ai', False)
|
||||||
|
|
||||||
if not github_repo:
|
if not github_repo and not claude_ai:
|
||||||
logger.debug(f"Package {package_name} has no GitHub repo configured")
|
logger.debug(f"Package {package_name} has no GitHub repo or claude_ai configured")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
# Support both top-level version and builds[].version
|
||||||
|
builds = metadata.get('builds', [])
|
||||||
|
if builds and isinstance(builds, list) and builds[0].get('version'):
|
||||||
|
current_version = str(builds[0].get('version'))
|
||||||
|
else:
|
||||||
|
current_version = metadata.get('version')
|
||||||
|
|
||||||
if not current_version:
|
if not current_version:
|
||||||
logger.warning(f"Package {package_name} has no version in metadata")
|
logger.warning(f"Package {package_name} has no version in metadata")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
logger.info(f"Checking {package_name} (current: {current_version}) from {github_repo}")
|
if claude_ai:
|
||||||
|
logger.info(f"Checking {package_name} (current: {current_version}) from downloads.claude.ai")
|
||||||
# Get latest release from GitHub
|
latest_version = get_claude_ai_latest_version()
|
||||||
latest_release = get_github_latest_release(github_repo)
|
if not latest_version:
|
||||||
if not latest_release:
|
return False
|
||||||
return False
|
else:
|
||||||
|
logger.info(f"Checking {package_name} (current: {current_version}) from {github_repo}")
|
||||||
latest_version = normalize_version(latest_release.get('tag_name', ''))
|
latest_release = get_github_latest_release(github_repo)
|
||||||
if not latest_version:
|
if not latest_release:
|
||||||
logger.warning(f"Could not determine latest version for {package_name}")
|
return False
|
||||||
return False
|
latest_version = normalize_version(latest_release.get('tag_name', ''))
|
||||||
|
if not latest_version:
|
||||||
|
logger.warning(f"Could not determine latest version for {package_name}")
|
||||||
|
return False
|
||||||
|
|
||||||
# Compare versions
|
# Compare versions
|
||||||
if compare_versions(current_version, latest_version):
|
if compare_versions(current_version, latest_version):
|
||||||
@@ -373,7 +421,7 @@ def find_packages_with_github(rpms_dir: Path) -> List[Path]:
|
|||||||
with open(metadata_file, 'r') as f:
|
with open(metadata_file, 'r') as f:
|
||||||
metadata = yaml.safe_load(f)
|
metadata = yaml.safe_load(f)
|
||||||
|
|
||||||
if metadata.get('github'):
|
if metadata.get('github') or metadata.get('claude_ai'):
|
||||||
github_packages.append(package_dir)
|
github_packages.append(package_dir)
|
||||||
except Exception:
|
except Exception:
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user