name: Dexoron Packages Index on: workflow_dispatch: workflow_run: workflows: ["Release"] types: - completed permissions: contents: read jobs: update-packages-index: runs-on: ubuntu-latest if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }} steps: - name: Checkout Central Packages Repo uses: actions/checkout@v4 with: repository: 'dexoron/packages' token: ${{ secrets.PACKAGES_REPO_TOKEN }} path: 'central-packages' # --- СКАЧИВАНИЕ АРТЕФАКТОВ ИЗ РЕЛИЗА --- - name: Download Arch package artifact if: ${{ github.event_name == 'workflow_run' }} uses: actions/download-artifact@v4 with: name: arch-package path: central-packages/archlinux/x86_64/ github-token: ${{ secrets.PACKAGES_REPO_TOKEN }} run-id: ${{ github.event.workflow_run.id }} continue-on-error: true - name: Download Debian package artifact if: ${{ github.event_name == 'workflow_run' }} uses: actions/download-artifact@v4 with: name: debian-package path: central-packages/debian/ github-token: ${{ secrets.PACKAGES_REPO_TOKEN }} run-id: ${{ github.event.workflow_run.id }} continue-on-error: true - name: Download RPM package artifact if: ${{ github.event_name == 'workflow_run' }} uses: actions/download-artifact@v4 with: name: rpm-package path: central-packages/rpm/x86_64/ github-token: ${{ secrets.PACKAGES_REPO_TOKEN }} run-id: ${{ github.event.workflow_run.id }} continue-on-error: true # --- ИНДЕКСАЦИЯ REPO --- - name: Update Pacman Database (Inside Arch Container) run: | docker run --rm \ -v ${{ github.workspace }}/central-packages:/packages \ archlinux:latest \ bash -c ' cd /packages/archlinux/x86_64 && \ rm -f dexoron.db dexoron.files && \ shopt -s nullglob packages=(*.pkg.tar.zst) if [ ${#packages[@]} -gt 0 ]; then echo "Found ${#packages[@]} Arch packages. Updating database..." repo-add dexoron.db.tar.gz "${packages[@]}" && \ ln -sf dexoron.db.tar.gz dexoron.db && \ ln -sf dexoron.files.tar.gz dexoron.files else echo "No .pkg.tar.zst files found. Skipping." fi ' - name: Update Debian APT Repository Index run: | sudo apt-get update && sudo apt-get install -y dpkg-dev cd central-packages/debian shopt -s nullglob deb_packages=(*.deb) if [ ${#deb_packages[@]} -gt 0 ]; then echo "Found ${#deb_packages[@]} Debian packages. Generating Packages.gz..." # Генерируем индекс для плоского (flat) репозитория dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz else echo "No .deb files found. Skipping Debian index update." fi - name: Update Fedora DNF Repository Index run: | sudo apt-get update && sudo apt-get install -y createrepo-c cd central-packages/rpm/x86_64 shopt -s nullglob rpm_packages=(*.rpm) if [ ${#rpm_packages[@]} -gt 0 ]; then echo "Found ${#rpm_packages[@]} RPM packages. Generating repodata..." # Пересоздаем метаданные для dnf createrepo_c . else echo "No .rpm files found. Skipping Fedora index update." fi # --- ПУШ ИЗМЕНЕНИЙ --- - name: Push to dexoron/packages run: | cd central-packages git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" # Проверяем изменения во всех трех целевых папках if [ -n "$(git status --porcelain)" ]; then git add archlinux/ debian/ rpm/ git commit -m "chore: update repositories index (arch, debian, rpm)" git push else echo "No changes detected in repository databases." fi