mirror of
https://github.com/savoirfairelinux/opendht.git
synced 2026-11-08 04:21:51 +00:00
384 lines
11 KiB
YAML
384 lines
11 KiB
YAML
name: Release actions
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
env:
|
|
REGISTRY: ghcr.io
|
|
IMAGE_NAME_DEPS: ${{ github.repository }}/opendht-deps
|
|
IMAGE_NAME: ${{ github.repository }}/opendht
|
|
IMAGE_NAME_DEPS_LLVM: ${{ github.repository }}/opendht-deps-llvm
|
|
IMAGE_NAME_LLVM: ${{ github.repository }}/opendht-llvm
|
|
IMAGE_NAME_DHTNODE: ${{ github.repository }}/dhtnode
|
|
IMAGE_NAME_ALPINE: ${{ github.repository }}/opendht-alpine
|
|
IMAGE_NAME_ALPINE_DEPS: ${{ github.repository }}/opendht-deps-alpine
|
|
|
|
jobs:
|
|
build-and-push-deps-image:
|
|
name: Dependency Docker image
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Log in to the Container registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Extract metadata (tags, labels) for Docker
|
|
id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_DEPS }}
|
|
|
|
- name: Build and push Docker image
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
file: docker/DockerfileDeps
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
|
|
build-and-push-image:
|
|
name: OpenDHT Docker image
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Log in to the Container registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Extract metadata (tags, labels) for Docker
|
|
id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: |
|
|
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
|
|
- name: Build and push Docker image
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
file: docker/Dockerfile
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
|
|
build-and-push-deps-image-llvm:
|
|
name: Dependency Docker image (LLVM)
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Log in to the Container registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Extract metadata (tags, labels) for Docker
|
|
id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_DEPS_LLVM }}
|
|
|
|
- name: Build and push Docker image
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
file: docker/DockerfileDepsLlvm
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
|
|
build-and-push-image-llvm:
|
|
name: OpenDHT Docker image (LLVM)
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Log in to the Container registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Extract metadata (tags, labels) for Docker
|
|
id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: |
|
|
${{ env.REGISTRY }}/${{ env.IMAGE_NAME_LLVM }}
|
|
|
|
- name: Build and push Docker image
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
file: docker/DockerfileLlvm
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
|
|
build-and-push-image-dhtnode:
|
|
name: dhtnode Docker image
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Log in to the Container registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Extract metadata (tags, labels) for Docker
|
|
id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: |
|
|
${{ env.REGISTRY }}/${{ env.IMAGE_NAME_DHTNODE }}
|
|
|
|
- name: Build and push Docker image
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
file: docker/DockerfileDhtnode
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
|
|
build-and-push-image-alpine-deps:
|
|
name: Alpine Deps Docker image
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Log in to the Container registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Extract metadata (tags, labels) for Docker
|
|
id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: |
|
|
${{ env.REGISTRY }}/${{ env.IMAGE_NAME_ALPINE_DEPS }}
|
|
|
|
- name: Build and push Docker image
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
file: docker/DockerfileDepsAlpine
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
|
|
build-and-push-image-alpine:
|
|
name: Alpine Docker image
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Log in to the Container registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Extract metadata (tags, labels) for Docker
|
|
id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: |
|
|
${{ env.REGISTRY }}/${{ env.IMAGE_NAME_ALPINE }}
|
|
|
|
- name: Build and push Docker image
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
file: docker/DockerfileAlpine
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
|
|
build-windows-msi:
|
|
name: Build Windows MSI Installer
|
|
runs-on: windows-latest
|
|
env:
|
|
VCPKG_VERSION: "2025.04.09"
|
|
VCPKG_DISABLE_METRICS: "1"
|
|
VCPKG_DEFAULT_TRIPLET: x64-windows
|
|
VCPKG_ROOT: "C:\\vcpkg"
|
|
permissions:
|
|
contents: read
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Set up MSVC developer environment
|
|
uses: microsoft/setup-msbuild@v2
|
|
|
|
- name: Configure CMake for MSI
|
|
shell: pwsh
|
|
run: |
|
|
mkdir build -ErrorAction SilentlyContinue
|
|
cmake -B build `
|
|
-S . `
|
|
-DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake `
|
|
-DCMAKE_BUILD_TYPE=Release `
|
|
-DOPENDHT_C=On `
|
|
-DOPENDHT_TOOLS=On `
|
|
-DOPENDHT_PYTHON=Off `
|
|
-DOPENDHT_PEER_DISCOVERY=On `
|
|
-DOPENDHT_PROXY_SERVER=On `
|
|
-DOPENDHT_PROXY_CLIENT=On `
|
|
-DOPENDHT_HTTP=On `
|
|
-DBUILD_TESTING=Off `
|
|
-A x64
|
|
|
|
- name: Build with MSVC
|
|
shell: pwsh
|
|
run: |
|
|
cmake --build build --config Release --parallel $([System.Environment]::ProcessorCount)
|
|
|
|
- name: Package MSI with CPack
|
|
shell: pwsh
|
|
id: cpack_msi
|
|
run: |
|
|
cd build
|
|
cpack -C Release -G WIX
|
|
$msiFile = Get-ChildItem -Path . -Recurse -Filter *.msi | Select-Object -First 1
|
|
if ($msiFile) {
|
|
$msiOutputPath = "opendht-installer.msi" # Standardized artifact name
|
|
Copy-Item $msiFile.FullName -Destination $msiOutputPath
|
|
echo "msi_path=$msiOutputPath" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
|
Write-Host "MSI created at build/$msiOutputPath"
|
|
} else {
|
|
Write-Error "MSI file not found after cpack execution!"
|
|
exit 1
|
|
}
|
|
|
|
- name: Upload MSI Artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: opendht-windows-msi
|
|
path: build/${{ steps.cpack_msi.outputs.msi_path }} # Path to the MSI in the build directory
|
|
retention-days: 7
|
|
|
|
build-python-wheels:
|
|
name: Build Python Wheels
|
|
runs-on: ubuntu-latest
|
|
container: ghcr.io/savoirfairelinux/opendht/opendht-deps:latest
|
|
permissions:
|
|
contents: read
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: cmake (for Python wheel)
|
|
run: |
|
|
mkdir build_python && cd build_python && \
|
|
cmake .. -DCMAKE_INSTALL_PREFIX=/usr \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DBUILD_SHARED_LIBS=On \
|
|
-DOPENDHT_PYTHON=On \
|
|
-DOPENDHT_C=Off \
|
|
-DOPENDHT_PEER_DISCOVERY=On \
|
|
-DOPENDHT_TOOLS=Off \
|
|
-DOPENDHT_PROXY_SERVER=On \
|
|
-DOPENDHT_PROXY_CLIENT=On
|
|
|
|
- name: build (for Python wheel)
|
|
run: cd build_python && make dist
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: opendht-wheels-linux
|
|
path: build_python/python/dist/*.whl
|
|
retention-days: 7
|
|
|
|
create-github-release:
|
|
name: Create GitHub Release
|
|
runs-on: ubuntu-latest
|
|
needs: [build-windows-msi, build-python-wheels]
|
|
permissions:
|
|
contents: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Download Windows MSI artifact
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: opendht-windows-msi
|
|
path: downloaded_artifacts/windows_msi
|
|
|
|
- name: Download Linux Wheels artifact
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: opendht-wheels-linux
|
|
path: downloaded_artifacts/linux_wheels
|
|
|
|
- name: Create Release
|
|
id: create_release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
draft: true
|
|
files: |
|
|
downloaded_artifacts/linux_wheels/*.whl
|
|
downloaded_artifacts/windows_msi/*.msi
|