GitHub Actions

GitHub Actions är en kraftfull automatiseringsfunktion som är inbyggd i GitHub-plattformen. Det är viktigt att förstå att GitHub Actions är en del av GitHub - inte ett separat verktyg. Med GitHub Actions kan du automatisera hela din utvecklingsprocess direkt i dina GitHub-repositorier.

Introduktion

GitHub Actions erbjuder en värld av möjligheter när det kommer till automatisering av C-Sharp-projekt. Men hur kan vi använda detta verktyg på ett effektivt och kreativt sätt? Vad kan vi åstadkomma som går bortom de vanliga arbetsflödena? Dessa frågor kommer att besvaras med hjälp av några inspirerande exempel specifikt för C-Sharp-utveckling.

TL;DR

GitHub Actions är GitHubs inbyggda CI/CD-verktyg som låter dig automatisera byggning, testning och deployment direkt i ditt repo. I detta avsnitt utforskar vi praktiska exempel specifikt för C-Sharp-projekt - från automatisk kodformatering till säkerhetsscanning och performance testing.

När du läst detta ska du kunna

  • Förstå att GitHub Actions är en del av GitHub-plattformen (inte ett separat verktyg)
  • Implementera automatiserade workflows för C-Sharp-projekt
  • Skapa CI/CD-pipelines för .NET-applikationer
  • Använda GitHub Actions för säkerhet, testing och deployment
  • Förstå best practices för C-Sharp-specifika GitHub Actions

Vad är GitHub Actions?

GitHub Actions är ett automatiseringsverktyg som är inbyggt i GitHub. Det gör att du kan skapa anpassade arbetsflöden (workflows) för att bygga, testa och distribuera din C-Sharp-kod - allt direkt från ditt GitHub-repository.

Huvudfunktioner

  • CI/CD inbyggt: Continuous Integration och Continuous Deployment direkt i GitHub
  • Event-driven: Workflows triggas av GitHub-events (push, PR, issues, etc.)
  • Flexibelt: Stöd för alla programmeringsspråk, inklusive C# och .NET
  • Marketplace: Tusentals färdiga Actions att använda
  • Gratis för publika repos: Begränsad gratiskvot för privata repos

Grundläggande koncept

KonceptBeskrivning
WorkflowEn YAML-fil som definierar automatiseringsprocessen
JobEn samling steg som körs på samma runner
StepEn individuell uppgift (kör ett kommando eller en Action)
ActionEn återanvändbar enhet av kod
RunnerEn server som kör dina workflows
EventEn GitHub-händelse som triggar ett workflow

Exempel 1: Automatisk C-Sharp Code Formatting

Automatisera kodformatering med dotnet format för att hålla din kod konsistent.


name: Auto Format Code
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  format:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          token: $

      - name: Setup .NET
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: "8.0.x"

      - name: Format code
        run: dotnet format --verify-no-changes --verbosity diagnostic

      - name: Commit formatted code
        run: |
          git config --local user.email "action@github.com"
          git config --local user.name "GitHub Action"
          git add .
          git diff --staged --quiet || git commit -m "Auto-format code"
          git push

Exempel 2: Automatisk NuGet Package Versioning

Automatisera versionshantering och publicering av NuGet-paket.


name: Publish NuGet Package
on:
  push:
    tags:
      - "v*"

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup .NET
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: "8.0.x"

      - name: Get version from tag
        id: get_version
        run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT

      - name: Pack NuGet package
        run: dotnet pack --configuration Release -p:PackageVersion=$

      - name: Publish to NuGet
        run: dotnet nuget push "**/*.nupkg" --api-key $ --source https://api.nuget.org/v3/index.json

Exempel 3: Automatisk Database Migration

Kör Entity Framework migrationer automatiskt vid deployment.


name: Deploy with Migrations
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup .NET
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: "8.0.x"

      - name: Install EF Tools
        run: dotnet tool install --global dotnet-ef

      - name: Update database
        env:
          CONNECTION_STRING: $
        run: |
          dotnet ef database update --connection "$CONNECTION_STRING"

      - name: Deploy application
        run: |
          dotnet publish --configuration Release
          # Deployment logic here

Exempel 4: Automatisk Performance Testing

Kör prestandatester och generera rapporter.


name: Performance Tests
on:
  schedule:
    - cron: "0 2 * * *" # Run daily at 2 AM
  workflow_dispatch: # Allow manual trigger

jobs:
  performance:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup .NET
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: "8.0.x"

      - name: Run BenchmarkDotNet tests
        run: dotnet run --project ./PerformanceTests --configuration Release

      - name: Upload performance results
        uses: actions/upload-artifact@v3
        with:
          name: performance-results
          path: BenchmarkDotNet.Artifacts/

Exempel 5: Automatisk Security Audit

Scanna efter säkerhetsrisker i dependencies.


name: Security Audit
on:
  push:
    branches: [main, develop]
  schedule:
    - cron: "0 6 * * 1" # Weekly on Monday

jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup .NET
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: "8.0.x"

      - name: Audit NuGet packages
        run: |
          dotnet list package --vulnerable --include-transitive > audit-results.txt
          cat audit-results.txt

      - name: Fail if vulnerabilities found
        run: |
          if grep -q "has the following vulnerable packages" audit-results.txt; then
            echo "Security vulnerabilities found!"
            exit 1
          fi

Exempel 6: Automatisk Documentation Generation

Generera API-dokumentation med DocFX.


name: Generate Documentation
on:
  push:
    branches: [main]

jobs:
  docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup .NET
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: "8.0.x"

      - name: Install DocFX
        run: dotnet tool install -g docfx

      - name: Generate documentation
        run: |
          docfx metadata
          docfx build

      - name: Deploy to GitHub Pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: $
          publish_dir: ./_site

Exempel 7: Multi-Target Framework Testing

Testa mot flera .NET-versioner samtidigt.


name: Multi-Framework Tests
on: [push, pull_request]

jobs:
  test:
    runs-on: $
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        dotnet-version: ["6.0.x", "7.0.x", "8.0.x"]

    steps:
      - uses: actions/checkout@v4

      - name: Setup .NET $
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: $

      - name: Run tests
        run: dotnet test --logger trx --results-directory TestResults/

      - name: Upload test results
        uses: actions/upload-artifact@v3
        if: always()
        with:
          name: test-results-$-$
          path: TestResults/

Best Practices för C-Sharp Actions

  1. Använd caching för NuGet: Spara tid genom att cacha NuGet-paket
  2. Parallellisera tester: Kör tester i parallell för snabbare feedback
  3. Separera bygge och deployment: Håll bygge och deployment separerade
  4. Använd matrix builds: Testa mot flera versioner och operativsystem
  5. Säkra secrets: Använd GitHub Secrets för känslig information

Slutsats

GitHub Actions är en av de mest kraftfulla funktionerna i GitHub-plattformen och gör det möjligt att automatisera hela din C-Sharp-utvecklingsprocess. Genom att använda de exempel och best practices som presenteras här kan du bygga robusta CI/CD-pipelines direkt i dina GitHub-repositorier.

Kom ihåg: GitHub Actions är en del av GitHub - du behöver inte installera eller konfigurera något separat verktyg. Allt du behöver är ett GitHub-repo och en .github/workflows/-mapp med dina YAML-filer.

För mer information om GitHub som plattform, se huvudsidan om GitHub.

Obligatorisk dad joke:

Varför tog GitHub Actions aldrig en paus? För att det var programmerat att alltid vara i “action”!


Upp

Upp


Licens: Apache 2.0 | © 2023 Marcus Medina, Campus Mölndal. Alla rättigheter förbehållna.
Du får använda och modifiera detta verk enligt villkoren i Apache License, Version 2.0. Du får inte använda detta verk för kommersiella ändamål utan tillstånd från upphovsmannen.