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") 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