Skip to content

test

test #397

name: syslog-ng snapshot
on:
workflow_dispatch:
inputs:
repo:
description: 'syslog-ng repository'
required: true
default: 'syslog-ng/syslog-ng'
type: string
ref:
description: 'syslog-ng ref (branch, tag, commit id)'
required: true
default: 'master'
type: string
pull_request:
paths:
- 'syslog-ng/**'
- '.github/workflows/**'
push:
paths:
- 'syslog-ng/**'
- '.github/workflows/**'
schedule:
- cron: '00 23 * * *'
jobs:
# tarball:
# name: create-source-tarball
# runs-on: ubuntu-latest
# outputs:
# snapshot-version: ${{ steps.snapshot-version.outputs.SNAPSHOT_VERSION }}
# steps:
# - name: Checkout syslog-ng source
# uses: actions/checkout@v4
# with:
# repository: ${{ inputs.repo || 'syslog-ng/syslog-ng' }}
# ref: ${{ inputs.ref || 'master' }}
# fetch-depth: 0
# - name: Prepare docker image
# run: ./dbld/rules cache-image-tarball
# - name: Create source tarball
# run: ./dbld/rules pkg-tarball
# - name: Determine snapshot version
# id: snapshot-version
# run: |
# tarball_filename="$(find dbld/build -name '*.tar.*' -printf '%f\n')"
# tarball_name="${tarball_filename/\.tar.*}"
# tarball_version="${tarball_name/syslog-ng-}"
# pkg_version="$(echo $tarball_version | sed -E 's|(([0-9]+\.){2}[0-9]+).*|\1|')_git$(date +%Y%m%d)"
# echo "SNAPSHOT_VERSION=${pkg_version}" >> $GITHUB_OUTPUT
# - name: Store source tarball as artifact
# uses: actions/upload-artifact@v4
# with:
# name: source-tarball
# path: dbld/build/*.tar.*
# build-and-test:
# runs-on: ubuntu-latest
# needs: tarball
# steps:
# - name: Checkout source
# uses: actions/checkout@v4
# - name: Download source tarball artifact
# uses: actions/download-artifact@v4
# with:
# name: source-tarball
# path: syslog-ng/apkbuild/axoflow/syslog-ng
# - name: Build and export Docker image
# uses: docker/build-push-action@v5
# with:
# context: syslog-ng
# file: syslog-ng/alpine.dockerfile
# load: true
# tags: syslog-ng:test
# build-args: |
# PKG_TYPE=nightly
# SNAPSHOT_VERSION=${{ needs.tarball.outputs.snapshot-version }}
# - name: Smoke test
# run: |
# export SYSLOG_NG_IMAGE="syslog-ng:test"
# export SYSLOG_NG_VERSION="${{ needs.tarball.outputs.snapshot-version }}"
# syslog-ng/tests/smoke.sh
# publish-image:
# if: github.ref == 'refs/heads/main'
# uses: ./.github/workflows/syslog-ng-docker.yml
# needs: [tarball, build-and-test]
# with:
# pkg-type: nightly
# tarball-artifact: source-tarball
# snapshot-version: ${{ needs.tarball.outputs.snapshot-version }}
# https://github.com/actions/delete-package-versions/issues/90
cleanup-old-images:
# if: github.ref == 'refs/heads/main'
# needs: publish-image
runs-on: ubuntu-latest
steps:
- name: Clean up old images
uses: actions/github-script@v7
with:
script: |
const daysToKeep = 30
const snapshotTagPattern = /_git[0-9]+/
const package_name = "axosyslog"
const org = "alltilla"
const image = `${org}/${package_name}`
const allPackageVersions = await github.paginate(
github.rest.packages.getAllPackageVersionsForPackageOwnedByUser,
{ package_type: "container", package_name: package_name, org: org }
)
const oldPackageDate = new Date()
oldPackageDate.setDate(oldPackageDate.getDate() - daysToKeep)
const oldSnapshotVersions = allPackageVersions.filter((p) => {
return new Date(p.updated_at) < oldPackageDate && p.metadata.container && p.metadata.container.tags.length != 0 && p.metadata.container.tags.every((t) => snapshotTagPattern.test(t))
})
if (oldSnapshotVersions.length === 0) {
console.log("Nothing to remove")
return
}
const oldSnapshotTags = oldSnapshotVersions.flatMap(({ metadata }) => metadata.container.tags)
console.log(`Removing the following images: ${oldSnapshotTags}`)
# const manifestsRequests = oldSnapshotTags.map((t) => {
# const manifest = fetch(`https://ghcr.io/v2/${image}/manifests/${t}`, {
# method: "GET",
# headers: {
# "Authorization": "Bearer ${{ secrets.GITHUB_TOKEN }}",
# "Accept": "application/vnd.docker.distribution.manifest.list.v2+json",
# "Accept": "application/vnd.docker.distribution.manifest.v2+json",
# "Accept": "application/vnd.oci.image.manifest.v1+json",
# "Accept": "application/vnd.oci.image.index.v1+json",
# },
# }).then((d) => d.json())
# return manifest
# })
# const manifestsResponse = await Promise.all(manifestsRequests)
# const manifestsToDelete = manifestsResponse.filter((m) => m.manifests).flatMap((m) => m.manifests)
# await Promise.all(manifestsToDelete.map((m) => {
# const version = allPackageVersions.find((p) => p.name === m.digest)
# if (!version) {
# return;
# }
# return github.rest.packages.deletePackageVersionForOrg({ package_type: "container", package_name: package_name, org: org, package_version_id: version.id})
# }))
# await Promise.all(oldSnapshotVersions.map((v) => {
# return github.rest.packages.deletePackageVersionForOrg({ package_type: "container", package_name: package_name, org: org, package_version_id: v.id})
# }))