7.1 GitHub Actions

Diese Seite zeigt, wie Sie OpenSSL mit GitHub Actions automatisch bauen.


Was ist GitHub Actions?

GitHub Actions ist die CI/CD-Plattform von GitHub:

  • Direkt in GitHub integriert
  • Kostenlos für öffentliche Repositories
  • YAML-basierte Konfiguration

Grundkonzepte

Begriff Bedeutung
——————–
Workflow Die gesamte Automatisierung (.yml Datei)
Job Eine Gruppe von Schritten (z.B. „build-windows“)
Step Ein einzelner Befehl oder Action
Runner Der Server, der den Job ausführt
Artifact Das Ergebnis (z.B. die DLLs)

Workflow-Datei erstellen

Erstellen Sie die Datei .github/workflows/build-openssl.yml:

# OpenSSL Build Workflow
name: Build OpenSSL 3.6
 
# Wann wird gebaut?
on:
  push:
    branches: [ main ]           # Bei Push auf main
  pull_request:
    branches: [ main ]           # Bei Pull Requests
  workflow_dispatch:             # Manuell starten
  schedule:
    - cron: '0 2 * * 0'          # Jeden Sonntag 2:00 Uhr

jobs:
  # ============================================
  # Windows x64 Build
  # ============================================
  build-windows:
    runs-on: windows-latest

    steps:
      # 1. Repository auschecken
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: true
 
      # 2. Perl installieren
      - name: Install Strawberry Perl
        run: choco install strawberryperl -y
 
      # 3. NASM installieren
      - name: Install NASM
        run: choco install nasm -y
 
      # 4. Build
      - name: Build OpenSSL
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
          set PATH=C:\Strawberry\perl\bin;C:\Program Files\NASM;%PATH%
          cd src
          perl Configure VC-WIN64A --prefix=%GITHUB_WORKSPACE%\bin
          nmake
          nmake install_sw

      # 5. Version prüfen
      - name: Verify Build
        run: |
          bin\bin\openssl.exe version -a
          bin\bin\openssl.exe list -signature-algorithms | findstr mldsa

      # 6. Artefakt hochladen
      - name: Upload Artifact
        uses: actions/upload-artifact@v4
        with:
          name: openssl-3.6.0-win-x64
          path: bin/
          retention-days: 30
 
  # ============================================
  # Linux x64 Build
  # ============================================
  build-linux:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install Dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y build-essential perl nasm

      - name: Build OpenSSL
        run: |
          cd src
          ./Configure linux-x86_64 --prefix=$GITHUB_WORKSPACE/linux-build
          make -j$(nproc)
          make install

      - name: Verify Build
        run: |
          linux-build/bin/openssl version -a

      - name: Upload Artifact
        uses: actions/upload-artifact@v4
        with:
          name: openssl-3.6.0-linux-x64
          path: linux-build/
          retention-days: 30

Workflow-Struktur erklärt

Trigger (on:)

on:
  push:
    branches: [ main ]      # Nur main-Branch
    paths:
      - 'src/**'            # Nur wenn src/ geändert
  workflow_dispatch:        # Manuell im GitHub UI

Jobs

jobs:
  job-name:
    runs-on: windows-latest   # oder ubuntu-latest
    needs: [andere-jobs]      # Abhängigkeiten
    if: github.event_name == 'push'  # Bedingung

Schritte

steps:
  - name: Beschreibender Name
    uses: action/name@v4      # Vorgefertigte Action
    with:
      parameter: wert

  - name: Shell-Befehl
    run: echo "Hello"
    shell: bash               # oder cmd, pwsh

Secrets für private Builds

Falls Sie private Builds veröffentlichen:

1. Secret in GitHub erstellen

Repository → Settings → Secrets → New secret

  • NUGET_API_KEY - Ihr NuGet-Schlüssel
  • AZURE_STORAGE_KEY - Für Blob-Upload

2. In Workflow verwenden

- name: Publish NuGet
  run: dotnet nuget push *.nupkg --api-key ${{ secrets.NUGET_API_KEY }}
  env:
    NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}

Release erstellen

Automatisch Release bei Tag:

on:
  push:
    tags:
      - 'v*'    # z.B. v3.6.0

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
 
      # ... Build-Schritte ...

      - name: Create Release
        uses: softprops/action-gh-release@v1
        with:
          files: |
            openssl-3.6.0-win-x64.zip
            openssl-3.6.0-linux-x64.tar.gz
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Matrix-Builds

Mehrere Konfigurationen gleichzeitig:

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [windows-latest, ubuntu-latest]
        include:
          - os: windows-latest
            target: VC-WIN64A
          - os: ubuntu-latest
            target: linux-x86_64

    steps:
      - name: Configure
        run: perl Configure ${{ matrix.target }}

Workflow manuell starten

  1. Gehen Sie zu „Actions“ Tab in GitHub
  2. Wählen Sie den Workflow
  3. Klicken Sie „Run workflow“
  4. Wählen Sie Branch
  5. Klicken Sie „Run workflow“

Häufige Probleme

"nmake: command not found"

Visual Studio Umgebung nicht geladen:

- name: Build
  shell: cmd
  run: |
    call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
    nmake

Build dauert zu lange

Cache verwenden:

- name: Cache OpenSSL Build
  uses: actions/cache@v4
  with:
    path: src/
    key: openssl-${{ hashFiles('src/VERSION') }}

Weiter zu


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional

Zuletzt geändert: den 29.01.2026 um 15:14