Skip to content

Source database builder #10

Source database builder

Source database builder #10

Workflow file for this run

name: Source database builder
on:
workflow_dispatch:
schedule:
- cron: "0 12 10 */6 *"
jobs:
builder:
name: Database builder
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Run Docker Compose
working-directory: build/sources
run: docker compose up
- name: Find latest release tag
id: get_release
uses: actions/github-script@v7
with:
script: |
const releases = await github.rest.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo
});
if (releases.data.length === 0) {
throw new Error("No releases found.");
}
const latest = releases.data.find(r => !r.draft);
core.setOutput("upload_url", latest.upload_url);
core.setOutput("tag_name", latest.tag_name);
- name: Upload new artifacts to latest release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.get_release.outputs.tag_name }}
files: build/sources/release/*.source.tar.xz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Remove old artifacts
uses: actions/github-script@v7
with:
script: |
const tag = "${{ steps.get_release.outputs.tag_name }}";
const { repo, owner } = context.repo;
const release = await github.rest.repos.getReleaseByTag({ owner, repo, tag });
const assets = await github.rest.repos.listReleaseAssets({
owner,
repo,
release_id: release.data.id,
per_page: 100
});
const sourceAssets = assets.data.filter(a => a.name.endsWith('.source.tar.xz'));
const assetGroups = {};
for (const asset of sourceAssets) {
const match = asset.name.match(/^(.+?)_(\d{8})\.source\.tar\.xz$/);
if (!match) continue;
const [_, base, date] = match;
if (!assetGroups[base]) assetGroups[base] = [];
assetGroups[base].push({ name: asset.name, id: asset.id, date });
}
for (const [base, group] of Object.entries(assetGroups)) {
group.sort((a, b) => b.date.localeCompare(a.date));
const toDelete = group.slice(1);
for (const asset of toDelete) {
console.log(`Deleting old asset: ${asset.name}`);
await github.rest.repos.deleteReleaseAsset({
owner,
repo,
asset_id: asset.id
});
}
}