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
| Koncept | Beskrivning |
|---|---|
| Workflow | En YAML-fil som definierar automatiseringsprocessen |
| Job | En samling steg som körs på samma runner |
| Step | En individuell uppgift (kör ett kommando eller en Action) |
| Action | En återanvändbar enhet av kod |
| Runner | En server som kör dina workflows |
| Event | En 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
- Använd caching för NuGet: Spara tid genom att cacha NuGet-paket
- Parallellisera tester: Kör tester i parallell för snabbare feedback
- Separera bygge och deployment: Håll bygge och deployment separerade
- Använd matrix builds: Testa mot flera versioner och operativsystem
- 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”!