r11_workflows/action.yml
2025-01-13 16:53:02 +03:00

319 lines
12 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Build and Deploy
description: Build and deploy RPM packages
inputs:
PUBLICATOR:
description: Publicator token
required: true
CI_DEPLOY:
description: CI deploy token
required: true
runs:
using: "composite"
steps:
- name: Checkout code
run: |
git clone ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git ${GITHUB_WORKSPACE}
git checkout ${GITHUB_REF_NAME}
export SPECFILE=$(find . -type f -name "*.spec")
echo "SPECFILE=${SPECFILE}" > .env
source .env
echo "SPECFILE = ${SPECFILE}"
# - name: Debug Print environment variables
# run: |
# source .env
# env
# - name: Debug os version and check exists spec
# run: |
# cat /etc/*release*
# echo "check specfile" && [ -f ${SPECFILE} ] || exit 1
- name: Remove all repo
run: |
# if grep -q "djam_personal" /etc/urpmi/urpmi.cfg; then sudo urpmi.removemedia djam_personal; fi
# Убираем все старые источники
sudo urpmi.removemedia -a
# Переключаемся на mirror.rosa.ru
# sudo urpmi.addmedia --wget -v --distrib --mirrorbrain https://mirror.rosa.ru/rosa/rosa2016.1/$ARCH
sudo urpmi.addmedia --distrib --mirrorlist https://tvoygit.ru/Djam/r11_mirrorlist/raw/branch/main/rosa2016.1.x86_64.list
- name: Update repo and pre-install
run: |
sudo urpmi.update -fa
sudo urpmi --auto \
https://packages.buildkite.com/r11-team/r11-x86-64/files/branding-configs-r11-3.0-3-mdv.x86_64.rpm \
https://packages.buildkite.com/r11-team/r11-x86-64/files/branding-configs-common-3.0-3-mdv.x86_64.rpm
- name: Download sources artifacts
run: |
abfyml=.abf.yml
if [ -e "${abfyml}" ]; then
echo "parsing file '${abfyml}'"
sed -ne '/^[Ss]ources\:.*$/,$p' ${abfyml} | \
sed -rn '$G;s/^[\"'\''[:space:]]*([^[:space:]:\"'\'']+)[\"'\''[:space:]]*.*[\"'\''[:space:]]*([0-9a-fA-F]{40})[\"'\''[:space:]]*$/\1 \2/p' | \
while read -r file sha; do
echo -n "found entry: file=${file} ... "
if [ -e "${file}" ]; then
if echo "${sha} ${file}" | sha1sum -c --status; then
echo "sha1sum correct"
else
echo "sha1sum INCORRECT! skipping..."
fi
else
echo -n "try to download... "
if curl -L "https://file-store.rosalinux.ru/download/${sha}" -o "${file}"; then
echo "ok"
echo -n "check sum... "
if echo "${sha} ${file}" | sha1sum -c --status; then
echo "ok"
else
echo "sha1sum INCORRECT! skipping..."
echo "remove file ${file}"
rm -f "${file}"
fi
else
echo "filed! skipping..."
fi
fi
done
fi
- name: Copy all source to rpm source dir
run: |
mkdir -p /home/builder/rpmbuild/SOURCES
cp -a * /home/builder/rpmbuild/SOURCES/
- name: RPM linter
run: |
source .env
rpmlint ${SPECFILE}
- name: Install dependies
run: |
source .env
SPEC_FILE=${SPECFILE}
BASE_URL="https://packages.buildkite.com/r11-team/r11-x86-64/files/"
echo "Processing spec file: $SPECFILE"
echo "Base URL: $BASE_URL"
# Функция для установки зависимостей
install_dependencies() {
# Массив для хранения всех зависимостей
declare -a all_dependencies
# Извлекаем все строки с BuildRequires
while IFS= read -r line; do
if [[ $line =~ ^BuildRequires: ]]; then
# echo "Processing line: $line"
# Нормализация пробелов
normalized_line=$(echo "$line" | sed 's/[[:space:]]\+/ /g')
# echo "Normalized line: $normalized_line"
# Извлекаем зависимость
dependency=$(echo "$normalized_line" | cut -d ' ' -f2-)
# echo "Dependency: $dependency"
case "$dependency" in
*go*)
go_dependencies="golang-1.23.4-1-rosa0.1.x86_64"
if [[ -n "$go_dependencies" ]]; then
echo "Found Go dependency: $go_dependencies"
all_dependencies+=("$BASE_URL/$go_dependencies.rpm")
fi
;;
*pkgconfig\(openssl3\.3\)*)
openssl_dependencies="openssl3.3-devel-3.3.1-2-R11.x86_64"
if [[ -n "$openssl_dependencies" ]]; then
echo "Found OpenSSL dependency: $openssl_dependencies"
all_dependencies+=("$BASE_URL/$openssl_dependencies.rpm")
all_dependencies+=("$BASE_URL/openssl3.3-3.3.1-2-R11.x86_64.rpm")
fi
;;
*llvm17*|*%{llvm}*|*%{llvmver}*|*%{llvm_ver}*)
llvm17_dependency="llvm17-17.0.1-1-rosa2016.1.x86_64"
if [[ -n "$llvm17_dependency" ]]; then
echo "Found LLVM17 dependency: $llvm17_dependency"
all_dependencies+=("$BASE_URL/$llvm17_dependency.rpm")
fi
;;
*stdc++-gcc10-devel*)
gcc10_dependency="stdc++-gcc10-devel-10.2.1-1-rosa0.1.x86_64"
if [[ -n "$gcc10_dependency" ]]; then
echo "Found GCC10 dependency: $gcc10_dependency"
all_dependencies+=("$BASE_URL/$gcc10_dependency.rpm")
fi
;;
*qt515*)
qt515_dependency="qt515-5.15.12-1-rosa2016.1.x86_64"
if [[ -n "$qt515_dependency" ]]; then
echo "Found Qt515 dependency: $qt515_dependency"
all_dependencies+=("$BASE_URL/$qt515_dependency.rpm")
fi
;;
*cmake*)
cmake_dependency="cmake-3.20.0-1-mdv2016.1.x86_64"
if [[ -n "$cmake_dependency" ]]; then
echo "Found cmake: $cmake_dependency"
all_dependencies+=("$BASE_URL/$cmake_dependency.rpm")
fi
;;
*trivy*)
trivy_dependency="trivy-0.58.1-1-rosa0.1.x86_64"
if [[ -n "$trivy_dependency" ]]; then
echo "Found trivy: $trivy_dependency"
all_dependencies+=("$BASE_URL/$trivy_dependency.rpm")
fi
;;
*pkgconfig\(toxcore\)*)
toxcore_dependency="c-toxcore-0.2.18-1-rosa2016.1.x86_64"
if [[ -n "$toxcore_dependency" ]]; then
echo "Found toxcore: $toxcore_dependency"
all_dependencies+=("$BASE_URL/$toxcore_dependency.rpm")
;;
esac
# Вывод текущего состояния массива all_dependencies
echo "Current dependencies: ${all_dependencies[@]}"
fi
done < "$SPECFILE"
# Установка всех найденных зависимостей
if [[ ${#all_dependencies[@]} -gt 0 ]]; then
echo "Installing all dependencies: ${all_dependencies[@]}"
sudo urpmi --auto "${all_dependencies[@]}"
else
echo "No dependencies found."
fi
}
# Установка всех зависимостей
install_dependencies
# Установка всех остальных зависимостей
sudo urpmi --buildrequires --auto ${SPECFILE}
- name: Build rpm
run: |
source .env
rpmbuild -ba ${SPECFILE}
# - name: DEBUG tokens
# env:
# CI_DEPLOY_SEC: ${{ secrets.CI_DEPLOY }}
# CI_DEPLOY: ${{ inputs.CI_DEPLOY }}
# PUBLICATOR: ${{ inputs.PUBLICATOR }}
# run: |
# echo "Deploying artifacts..."
# echo "********************************************************************"
# if [ -n "${CI_DEPLOY_SEC}" ]; then
# echo "CI_DEPLOY_SEC: ${CI_DEPLOY_SEC:0:3}***${CI_DEPLOY_SEC: -3}"
# else
# echo "CI_DEPLOY: не передан"
# fi
# if [ -n "${CI_DEPLOY}" ]; then
# echo "CI deploy token: ${CI_DEPLOY:0:3}***${CI_DEPLOY: -3}"
# else
# echo "CI deploy token: не передан"
# fi
# if [ -n "${PUBLICATOR}" ]; then
# echo "Publicator token: ${PUBLICATOR:0:3}***${PUBLICATOR: -3}"
# else
# echo "Publicator token: не передан"
# fi
# echo "********************************************************************"
- name: Deploy in repos packages
if: github.ref == 'refs/heads/rosa2016.1'
env:
RPMBUILDROOT: /home/builder/rpmbuild
run: |
send_package() {
local file=$1
local arch=$2
local type=$3
if [ "$arch" = "noarch" ]; then
url="${{ github.server_url }}/api/packages/${{ github.repository_owner }}/generic/r11_rpms/noarch/${file}"
else
url="${{ github.server_url }}/api/packages/${{ github.repository_owner }}/generic/r11_rpms/${arch}/${file}"
fi
if [ "$type" = "srpm" ]; then
url="${{ github.server_url }}/api/packages/${{ github.repository_owner }}/generic/r11_rpms/srpms/${file}"
fi
curl --user ${{ github.repository_owner }}:${{ inputs.CI_DEPLOY }} \
--upload-file "$file" \
"$url"
curl --user ${{ github.repository_owner }}:${{ inputs.CI_DEPLOY }} \
--upload-file "$file" \
"${{ github.server_url }}/api/packages/${{ github.repository_owner }}/generic/${{ github.event.repository.name }}/rpm/${file}"
}
for dir in SRPMS RPMS/*; do
if [ -d "${RPMBUILDROOT}/${dir}" ]; then
for file in "${RPMBUILDROOT}/${dir}"/*.rpm; do
if [ -f "$file" ]; then
if [ "$dir" = "SRPMS" ]; then
arch="srpms"
type="srpm"
elif [ "$dir" = "noarch" ]; then
arch="noarch"
type="rpm"
else
arch=$(basename "${dir}")
type="rpm"
fi
echo "********************************************************"
echo "file: " "$file"
echo "arch: " "$arch"
echo "type: " "$type"
echo "********************************************************"
send_package "$file" "$arch" "$type"
fi
done
fi
done
# cd /home/builder/rpmbuild/SRPMS/
# for file in *.rpm; do
# curl --user ${GITHUB_REPOSITORY_OWNER}:${{ inputs.CI_DEPLOY }} \
# --upload-file "$file" \
# ${GITHUB_SERVER_URL}/api/packages/${GITHUB_REPOSITORY_OWNER}/generic/srpms/"$file"
# done
# for file in /home/builder/rpmbuild/RPMS/x86_64/*.rpm; do
# curl --user ${GITHUB_REPOSITORY_OWNER}:${{ inputs.CI_DEPLOY }} \
# --upload-file "$file" \
# ${GITHUB_SERVER_URL}/api/packages/${GITHUB_REPOSITORY_OWNER}/rpm/upload
# done
- name: Deploy in buildkitie
if: github.ref == 'refs/heads/rosa2016.1'
run: |
echo "Deploying src artifacts..."
for file in /home/builder/rpmbuild/SRPMS/*.rpm; do
curl -X POST https://api.buildkite.com/v2/packages/organizations/r11-team/registries/r11-srpms/packages \
-H "Authorization: Bearer ${{ inputs.PUBLICATOR }}" \
-F "file=@$file"
done
echo "Deploying rpm artifacts..."
for file in /home/builder/rpmbuild/RPMS/x86_64/*.rpm; do
curl -X POST https://api.buildkite.com/v2/packages/organizations/r11-team/registries/r11-x86-64/packages \
-H "Authorization: Bearer ${{ inputs.PUBLICATOR }}" \
-F "file=@$file"
done
container:
image: packages.buildkite.com/r11-team/r11/builder:latest