diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml index 812fbc7..7732586 100644 --- a/.github/workflows/Release.yml +++ b/.github/workflows/Release.yml @@ -210,10 +210,12 @@ jobs: if: github.event_name != 'pull_request' runs-on: windows-latest environment: Docker Hub + defaults: + run: + shell: pwsh steps: - uses: actions/checkout@v4 - - name: Docker meta - id: meta + - id: meta uses: docker/metadata-action@v5 with: images: | @@ -227,31 +229,97 @@ jobs: type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} type=sha - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Login to DockerHub - uses: docker/login-action@v3 + - name: Install containerd + run: | + # source: # https://github.com/containerd/containerd/blob/main/docs/getting-started.md#installing-containerd-on-windows + $url = "https://api.github.com/repos/containerd/containerd/releases/latest" + $Version = (Invoke-RestMethod -Uri $url -UseBasicParsing).tag_name.TrimStart('v') + $Arch = "amd64" # arm64 also available + curl.exe -LO https://github.com/containerd/containerd/releases/download/v$Version/containerd-$Version-windows-$Arch.tar.gz + tar.exe xvf .\containerd-$Version-windows-amd64.tar.gz + Copy-Item -Path .\bin -Destination $Env:ProgramFiles\containerd -Recurse -Force + $Path = [Environment]::GetEnvironmentVariable("PATH", "Machine") + [IO.Path]::PathSeparator + "$Env:ProgramFiles\containerd" + [Environment]::SetEnvironmentVariable( "Path", $Path, "Machine") + $Env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") + containerd.exe config default | Out-File $Env:ProgramFiles\containerd\config.toml -Encoding ascii + containerd.exe --register-service + Start-Service containerd + - name: Setup windows-container-networking-cni + run: | + # source: https://github.com/moby/buildkit/blob/master/docs/windows.md + $networkName = 'nat' + $natInfo = Get-HnsNetwork -ErrorAction Ignore | Where-Object { $_.Name -eq $networkName } + $gateway = $natInfo.Subnets[0].GatewayAddress + $subnet = $natInfo.Subnets[0].AddressPrefix + $cniConfPath = "$env:ProgramFiles\containerd\cni\conf\0-containerd-nat.conf" + $cniBinDir = "$env:ProgramFiles\containerd\cni\bin" + $url = "https://api.github.com/repos/microsoft/windows-container-networking/releases/latest" + # fix $cniVersion to 0.3.0 as buildkit does not support windows-cni 0.3.1+ (at the time of writing this workflow) + $cniVersion = '0.3.0' # (Invoke-RestMethod -Uri $url -UseBasicParsing).tag_name.TrimStart('v') + mkdir $cniBinDir -Force + curl.exe -LO https://github.com/microsoft/windows-container-networking/releases/download/v$cniVersion/windows-container-networking-cni-amd64-v$cniVersion.zip + tar xvf windows-container-networking-cni-amd64-v$cniVersion.zip -C $cniBinDir + $natConfig = @" + { + "cniVersion": "$cniVersion", + "name": "$networkName", + "type": "nat", + "master": "Ethernet", + "ipam": { + "subnet": "$subnet", + "routes": [ + { + "gateway": "$gateway" + } + ] + }, + "capabilities": { + "portMappings": true, + "dns": true + } + } + "@ + Set-Content -Path $cniConfPath -Value $natConfig + - name: Setup Buildkit + run: | + # source: https://github.com/moby/buildkit/blob/master/docs/windows.md + $url = "https://api.github.com/repos/moby/buildkit/releases/latest" + $version = (Invoke-RestMethod -Uri $url -UseBasicParsing).tag_name + $arch = "amd64" # arm64 binary available too + curl.exe -LO https://github.com/moby/buildkit/releases/download/$version/buildkit-$version.windows-$arch.tar.gz + mv bin bin2 + tar.exe xvf .\buildkit-$version.windows-$arch.tar.gz + Copy-Item -Path ".\bin" -Destination "$Env:ProgramFiles\buildkit" -Recurse -Force + $Path = [Environment]::GetEnvironmentVariable("PATH", "Machine") + [IO.Path]::PathSeparator + "$Env:ProgramFiles\buildkit" + [Environment]::SetEnvironmentVariable( "Path", $Path, "Machine") + $Env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") + buildkitd --register-service --service-name buildkitd --containerd-cni-config-path="C:\Program Files\containerd\cni\conf\0-containerd-nat.conf" --containerd-cni-binary-dir="C:\Program Files\containerd\cni\bin" + Start-Service buildkitd + - uses: docker/setup-buildx-action@v3 + with: + # https://github.com/microsoft/Windows-Containers/blob/Main/helpful_tools/GitHubActions/install_buildkit_workflow.yaml + driver: remote + endpoint: npipe:////./pipe/buildkitd + - uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 + - uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: docker build - uses: docker/build-push-action@v6 + - uses: docker/build-push-action@v6 with: context: . + file: Dockerfile.windows platforms: windows/amd64 push: ${{ github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max - - name: Docker Hub Description - uses: peter-evans/dockerhub-description@v4 + - uses: peter-evans/dockerhub-description@v4 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }}