tasks/firecracker.tasks.ps1

# <copyright file="firecracker.tasks.ps1" company="Endjin Limited">
# Copyright (c) Endjin Limited. All rights reserved.
# </copyright>

$kernelVersion = "4.20"

task DownloadKernel -If {$IsLinux} {
    $arch = exec { uname -m }
    $sourceKernelFilename = "vmlinux.bin"
    $targetKernelFilename = "vmlinux-$kernelVersion-$arch.bin"

    if (!(Test-Path $PackagesDir/$targetKernelFilename)) {
        $kernelContainerImage = "endjin.azurecr.io/firecracker/kernel:$kernelVersion"

        $copiedFile = Copy-FilesFromContainerImage -SourceImageName $kernelContainerImage `
                                                   -DestinationFolderPath $PackagesDir `
                                                   -Filter $sourceKernelFilename `
                                                   -PassThru `
                                                   -Verbose:$VerbosePreference

        Rename-Item $copiedFile $targetKernelFilename
    }
    else {
        Write-Build White "Kernel already downloaded"
    }
}

# NOTE: 'GenerateContainerBuildTag' is defined in the Endjin.RecommendedPractices.Build extension,
# which is referenced as a dependency.
task BuildDiskImages -If {$IsLinux} -After PackageCore GenerateContainerBuildTag,DownloadKernel,{

    $ContainersToBuild |
        Where-Object { $_.CreateDiskImage } |
        ForEach-Object {
            # NOTE: 'containerBuildTag' is set by the external GenerateContainerBuildTag task
            $sourceImageWithTag = "$($_.ImageName):$containerBuildTag"

            Write-Build Green "Creating disk image for app container: $imageWithTag"
            $diskImagePath = New-DiskImageFromContainerisedRootFS -SourceImageName $sourceImageWithTag `
                                                                  -DestinationFolderPath $PackagesDir `
                                                                  -DiskSizeMB $_.DiskImageSizeMB
            
            if ($_.ContainsKey("IncludeInGitHubRelease") -and $_.IncludeInGitHubRelease) {
                $script:GitHubReleaseArtefacts += $diskImagePath
            }

            # Write-Build Green "Packaging disk image: $diskImagePath"
            # Export-DiskImageToContainerImage -SourceImageName $container.ImageName -DiskImagePath $diskImagePath -DiskSizeMB $diskImageSizeRequirements[$distro]
    }
}