ce7cb702218693d08ea6d83464d2457c9250027c
This commit is contained in:
commit
34c5f8963c
1 changed files with 145336 additions and 0 deletions
|
|
@ -0,0 +1,54 @@
|
|||
#load "contract.fsx"
|
||||
|
||||
open System
|
||||
open System.IO
|
||||
open System.IO.Compression
|
||||
open System.Net.Http
|
||||
open System.Net.Http.Headers
|
||||
open Contract
|
||||
|
||||
let repository = Environment.GetEnvironmentVariable "SOURCE_REPOSITORY"
|
||||
let revision = Environment.GetEnvironmentVariable "SOURCE_REVISION"
|
||||
let archive = "/source/tmp/source.tar.gz"
|
||||
let incoming = "/source/archive"
|
||||
let destination = "/source/repository"
|
||||
|
||||
require (repository = "https://forge.quorate.internal/quorate/cluster") "invalid source repository"
|
||||
require (validRevision revision) "invalid source revision"
|
||||
require (File.Exists "/source-auth/token") "source authentication unavailable"
|
||||
require (Directory.EnumerateFileSystemEntries(destination) |> Seq.isEmpty) "source destination is not empty"
|
||||
|
||||
let token = File.ReadAllText("/source-auth/token").Trim()
|
||||
require (not <| String.IsNullOrWhiteSpace token) "source authentication unavailable"
|
||||
|
||||
let download () =
|
||||
use request =
|
||||
new HttpRequestMessage(
|
||||
HttpMethod.Get,
|
||||
$"http://forgejo-http.forgejo.svc.cluster.local.:3000/api/v1/repos/quorate/cluster/archive/{revision}.tar.gz"
|
||||
)
|
||||
|
||||
request.Headers.Authorization <- AuthenticationHeaderValue("token", token)
|
||||
use client = new HttpClient(Timeout = TimeSpan.FromMinutes 10.0)
|
||||
|
||||
use reply =
|
||||
client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken)
|
||||
|
||||
require reply.IsSuccessStatusCode $"source download failed: {int reply.StatusCode}"
|
||||
use input = reply.Content.ReadAsStream(cancellationToken)
|
||||
use output = File.Create archive
|
||||
input.CopyTo output
|
||||
|
||||
download ()
|
||||
extractGzip archive incoming
|
||||
|
||||
let root =
|
||||
Directory.EnumerateFileSystemEntries incoming
|
||||
|> Seq.tryExactlyOne
|
||||
|> Option.defaultWith (fun () -> fail "source archive has an invalid root")
|
||||
|
||||
require (Directory.Exists root) "source archive root is not a directory"
|
||||
Directory.Delete(destination)
|
||||
Directory.Move(root, destination)
|
||||
File.WriteAllText("/source/.ready", revision + "\n")
|
||||
printfn "source=primary revision=%s" revision
|
||||
Loading…
Reference in a new issue