Skip to content

Commit a18e2dd

Browse files
author
KDr2
committed
use Yggdrasil to host binary
1 parent 4e201c5 commit a18e2dd

File tree

3 files changed

+65
-59
lines changed

3 files changed

+65
-59
lines changed
File renamed without changes.

.github/workflows/BuildDylib.yaml

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ on:
44
push:
55
branches:
66
- master
7-
# tags: '*'
8-
release:
9-
types:
10-
- created
7+
# release:
8+
# types:
9+
# - created
1110
pull_request:
1211
types: [opened, synchronize, reopened]
1312

@@ -36,7 +35,7 @@ jobs:
3635
BINARYBUILDER_DOWNLOADS_CACHE: downloads
3736
BINARYBUILDER_AUTOMATIC_APPLE: true
3837
run: julia deps/build_tarballs.jl
39-
- name: Upload to release
40-
env:
41-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
42-
run: deps/gh-update-to-release
38+
# - name: Upload to release
39+
# env:
40+
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41+
# run: deps/gh-update-to-release

deps/build.jl

Lines changed: 58 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,72 @@
1-
function find_prev_tag(tag)
2-
project_root = (@__DIR__) |> dirname |> abspath
3-
run(`git -C $project_root fetch --tags`)
4-
tags = readlines(`git -C $project_root tag`)
5-
sort!(tags)
6-
idx = indexin([tag], tags)[1]
7-
if idx == nothing return "NO-PREV-TAG" end
8-
return get(tags, idx - 1, "NO-PREV-TAG")
9-
end
1+
using BinaryProvider # requires BinaryProvider 0.3.0 or later
2+
3+
rel_version = v"0.3.0+0"
4+
pkg_version = v"0.3.0"
105

11-
# modify build-tmp.jl to only check correct version libs
12-
function install_products_filter(build_file)
13-
prod_filter = raw"""products_tmp = filter(products) do prod
6+
# Parse some basic command-line arguments
7+
const verbose = "--verbose" in ARGS
8+
const gethash = "--gethash" in ARGS # calculate the hash
9+
const prefix = Prefix(joinpath(@__DIR__, "usr"))
10+
products = [
11+
LibraryProduct(prefix, ["libtask_v1_0"], :libtask_v1_0),
12+
LibraryProduct(prefix, ["libtask_v1_1"], :libtask_v1_1),
13+
LibraryProduct(prefix, ["libtask_v1_2"], :libtask_v1_2),
14+
LibraryProduct(prefix, ["libtask_v1_3"], :libtask_v1_3),
15+
]
16+
17+
products_tmp = filter(products) do prod
1418
endswith(prod.libnames[1], "$(VERSION.major)_$(VERSION.minor)")
1519
end
1620
length(products_tmp) == 0 && (products_tmp = [products[end]])
1721
products = products_tmp
18-
"""
19-
lines = open(build_file) do io
20-
read(io, String) |> x -> split(x, "\n")
21-
end
22-
prod_in, prod_out, filter_written = false, false, false
23-
open(build_file, "w") do io
24-
for line in lines
25-
if occursin("products = [", line)
26-
prod_in = true
27-
end
28-
if prod_in && line == "]"
29-
prod_out = true
30-
end
31-
write(io, line * "\n")
32-
if prod_out && !filter_written
33-
write(io, prod_filter * "\n")
34-
filter_written = true
22+
23+
24+
# Download binaries from hosted location
25+
dl_url(arch) = "https://github.com/JuliaBinaryWrappers/Libtask_jll.jl/releases/download/Libtask-v$(rel_version)/Libtask.v$(pkg_version).$(arch).tar.gz"
26+
27+
# Listing of files generated by BinaryBuilder:
28+
download_info = Dict(
29+
Linux(:aarch64, libc=:glibc) => (dl_url("aarch64-linux-gnu"), "e541c0df11d48b45e9334018c014ae0d012b75f92ffbc49fc4ab6eed35593731"),
30+
# Linux(:armv7l, libc=:glibc, call_abi=:eabihf) => (dl_url("Libtask.v0.3.0.arm-linux-gnueabihf.tar.gz"), "..."),
31+
Linux(:i686, libc=:glibc) => (dl_url("i686-linux-gnu"), "7f68bd21609adf35878f9b16f56151ab5f6f609999a40291ed270c1a4d0331a0"),
32+
Windows(:i686) => (dl_url("i686-w64-mingw32"), "62950b53a892fb8c699ddbb4ccc9f19b12681f64fbf85a546345d5b0f23dc8d7"),
33+
MacOS(:x86_64) => (dl_url("x86_64-apple-darwin14"), "fff6523dde93e6dc12b96a8bf1e3c35a78d8dba7cdc95cd0e5dd13225d1972df"),
34+
Linux(:x86_64, libc=:glibc) => (dl_url("x86_64-linux-gnu"), "be4c590e8f13df31855be20f31c1c4ce98f499fc5173cd35c8e8b72b79e0dc5a"),
35+
Windows(:x86_64) => (dl_url("x86_64-w64-mingw32"), "267473eb211e5060b98cede7f30336d2a7453542617521f27941d353dcfe42e8"),
36+
)
37+
38+
if gethash
39+
# using SHA
40+
mktempdir() do d
41+
for (p, url) in download_info
42+
filepath = download(url[1])
43+
# Hash it
44+
hash = open(filepath) do file
45+
print(url[1] * ":\n")
46+
print(bytes2hex(sha256(file)))
47+
print("\n\n")
3548
end
3649
end
3750
end
51+
exit(0)
3852
end
3953

40-
function include_build_script(version_str, try_prev=false)
41-
build_script_url = "https://github.com/TuringLang/Libtask.jl/releases/download/v$(version_str)/build_LibtaskDylib.v$(version_str).jl"
42-
build_script = joinpath(@__DIR__, "tmp-build.jl")
43-
build_script = try download(build_script_url, build_script) catch end
44-
if build_script == nothing && try_prev # no such file
45-
version_str = find_prev_tag("v$version_str") |> strip |> (x) -> lstrip(x, ['v'])
46-
return include_build_script(version_str, false)
47-
end
48-
install_products_filter(build_script)
49-
include(build_script)
54+
# Install unsatisfied or updated dependencies:
55+
unsatisfied = any(!satisfied(p; verbose=verbose) for p in products)
56+
dl_info = choose_download(download_info, platform_key_abi())
57+
if dl_info === nothing && unsatisfied
58+
# If we don't have a compatible .tar.gz to download, complain.
59+
# Alternatively, you could attempt to install from a separate provider,
60+
# build from source or something even more ambitious here.
61+
error("Your platform (\"$(Sys.MACHINE)\", parsed as \"$(triplet(platform_key_abi()))\") is not supported by this package!")
5062
end
5163

52-
function get_version_str()
53-
path = joinpath(@__DIR__, "../Project.toml")
54-
version_reg = r"version\s*=\s*\"(.*)\""
55-
open(path) do file
56-
lines = readlines(file)
57-
for line in lines
58-
m = match(version_reg, line)
59-
if isa(m, RegexMatch) return m.captures[1] end
60-
end
61-
end
64+
# If we have a download, and we are unsatisfied (or the version we're
65+
# trying to install is not itself installed) then load it up!
66+
if unsatisfied || !isinstalled(dl_info...; prefix=prefix)
67+
# Download and install binaries
68+
install(dl_info...; prefix=prefix, force=true, verbose=verbose)
6269
end
6370

64-
version_str = get_version_str() |> strip |> (x) -> lstrip(x, ['v'])
65-
include_build_script(version_str, true)
71+
# Write out a deps.jl file that will contain mappings for our products
72+
write_deps_file(joinpath(@__DIR__, "deps.jl"), products, verbose=verbose)

0 commit comments

Comments
 (0)