slogan3

Maak een aangepaste GitHub Actions workflow voor geautomatiseerd artifactbeheer

description

Maakt efficiënt en geautomatiseerd beheer van build-artifacts mogelijk, bespaart tijd en vermindert handmatige fouten bij opslag, versiebeheer en opruiming. Deze prompt helpt gebruikers workflows te maken die optimaal opslaggebruik behouden en consistent artifactbeheer over projecten waarborgen.

prompt

Help me een GitHub Actions workflow te bouwen die artifactbeheer automatiseert, inclusief het bouwen, opslaan, versiebeheer en opruimen van artifacts. Projecttype: <voer je projecttype in, bijvoorbeeld Docker, Java, P ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een GitHub Actions workflow die het bouwen, opslaan, versiebeheer en opruimen van Docker-artifacts automatiseert, met gebruik van GitHub Packages en een bewaarbeleid van 30 dagen: ```yaml name: Docker Build and Publish on: push: branches: - main workflow_dispatch: jobs: build-and-publish: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Log in to GitHub Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build Docker image run: | docker build -t ghcr.io/${{ github.repository }}:${{ github.sha }} . - name: Push Docker image run: | docker push ghcr.io/${{ github.repository }}:${{ github.sha }} - name: Tag latest run: | docker tag ghcr.io/${{ github.repository }}:${{ github.sha }} ghcr.io/${{ github.repository }}:latest docker push ghcr.io/${{ github.repository }}:latest # Automatisch opruimen van oude images na 30 dagen # Dit kan via een aparte workflow of via een script # Hier is een voorbeeld van een scheduled job die oude images verwijdert name: Cleanup old Docker images on: schedule: - cron: '0 0 * * *' # Elke dag om middernacht jobs: cleanup: runs-on: ubuntu-latest steps: - name: Log in to GitHub Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: List images and delete images older than 30 days run: | # Voorbeeldscript om oude images te verwijderen # Let op: GitHub biedt geen directe API voor het automatisch verwijderen van oude images via Actions # Je kunt gebruik maken van de GitHub Container Registry API of CLI tools zoals 'ghcr' CLI # Een eenvoudige manier is het gebruik van de gh CLI: # Installeren van gh CLI sudo apt-get install -y gh gh auth login --with-token < <(echo "${{ secrets.GITHUB_TOKEN }}") # Verkrijg lijst van images # Hier moet je de juiste API calls of CLI commands gebruiken # Voor complexere beheer, kan je een script schrijven die alle tags ophaalt en op datum filtert # Dit is een placeholder voor de opruimactie ``` **Opmerkingen:** - Vervang `${{ secrets.GITHUB_TOKEN }}` door je eigen token indien nodig. - De automatische opruiming van images ouder dan 30 dagen moet via een script of API worden geïmplementeerd, aangezien GitHub Actions hier geen standaard functionaliteit voor biedt. - Overweeg gebruik te maken van het [ghcr.io](https://docs.github.com/en/packages/working-with-a-github-packages-registry/about-github-container-registry) API of CLI voor geavanceerd beheer en verwijdering van oude images. Met deze workflow bouw en publiceert je Docker images automatisch bij elke push naar main, en wordt er een scheduled job toegevoegd om oude images op te ruimen volgens het bewaarbeleid van 30 dagen.
provider: deepseek
model: deepseek-chat
Hier is een GitHub Actions workflow voor Docker artifactbeheer met GitHub Packages: ```yaml name: Docker Build, Push and Cleanup on: push: branches: [ main, develop ] pull_request: branches: [ main ] schedule: - cron: '0 1 * * *' # Dagelijks om 01:00 UTC env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: build-and-push: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout repository uses: actions/checkout@v4 - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata for Docker id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=sha,prefix=,suffix=,format=long type=ref,event=branch type=ref,event=pr type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} - name: Build and push Docker image uses: docker/build-push-action@v5 with: context: . push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cleanup: runs-on: ubuntu-latest needs: build-and-push permissions: packages: write contents: read steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.9' - name: Install GitHub CLI run: | type -p curl >/dev/null || sudo apt install curl -y curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null sudo apt update sudo apt install gh -y - name: Delete old packages env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | # Verwijder packages ouder dan 30 dagen cutoff_date=$(date -d "30 days ago" +%Y-%m-%dT%H:%M:%SZ) # Haal package versies op en filter op oude versies packages=$(gh api /user/packages/container/${{ github.event.repository.name }}/versions --jq '.[] | select(.updated_at < "'$cutoff_date'") | .id') for package_id in $packages; do echo "Verwijderen package ID: $package_id" gh api --method DELETE /user/packages/container/${{ github.event.repository.name }}/versions/$package_id done - name: Cleanup complete run: echo "Cleanup van oude artifacts voltooid" ``` **Belangrijke configuraties:** 1. **Trigger**: Wordt uitgevoerd bij pushes naar main/develop branches, PR's en dagelijks om 01:00 UTC 2. **Build & Push**: - Gebruikt GitHub Container Registry (ghcr.io) - Automatische tagging met SHA, branch naam en semantische versies - Authenticatie met GITHUB_TOKEN 3. **Cleanup**: - Verwijderd automatisch packages ouder dan 30 dagen - Gebruikt GitHub CLI voor package management - Draait dagelijks via schedule trigger **Benodigde permissions** in repository settings: - `contents: read` - `packages: write` **Opmerking**: De cleanup functie gebruikt de GitHub CLI en heeft write permissions nodig voor packages. Zorg dat de GITHUB_TOKEN voldoende rechten heeft.