aboutsummaryrefslogtreecommitdiff
path: root/ci/container/Taskfile.yaml
blob: 19ce71ca79a74d0f1189d6682b52af0710fc4bd6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# https://taskfile.dev

#Called by the vnbuild system to produce builds for my website
#https://www.vaughnnugent.com/resources/software

version: "3"

vars:
  BUILDS_URL: https://www.vaughnnugent.com/public/resources/software/builds
  PACKAGE_FILE_NAME: "sb-alpine3.19-oci.tgz"
  INCLUDE_FILES: "Dockerfile, docker-compose.yaml"

includes:
  install:
    taskfile: ../install.taskfile.yaml
    optional: true #not needed for inside container build

tasks:
  
  #called from inside the container to build native libraries
  build-libs:
    vars:
      OUT_DIR: "{{.USER_WORKING_DIR}}/out"

    #build stage generates the following libraries
    generates:
     - "{{.USER_WORKING_DIR}}/out/libargon2.so"
     - "{{.USER_WORKING_DIR}}/out/libvn_rpmalloc.so"
     - "{{.USER_WORKING_DIR}}/out/libvn_compress.so"

    cmds:
      #build argon2 lib
      - cd lib/argon2/ && task && cp build/libargon2.so {{.OUT_DIR}}/libargon2.so     
      #build rpmalloc library
      - cd lib/vnlib_rpmalloc/ && task && cp build/libvn_rpmalloc.so {{.OUT_DIR}}/libvn_rpmalloc.so 
      #install zlib and brotli native libraries from the source repos (they dont have active releases anymore :()
      - mkdir -p lib/third-party
      - cd lib/third-party && git clone https://github.com/cloudflare/zlib.git
      - cd lib/third-party && git clone https://github.com/google/brotli.git  
      #build native compression lib and put in lib dir
      - cd lib/vnlib_compress && cmake -B./build && cmake --build build/ --config Release && cp build/libvn_compress.so {{.OUT_DIR}}/libvn_compress.so 


  #called from ci pipline to build the package
  build:
    vars:
      SQLITE_RUNTIMES: 'build/app/plugins/assets/VNLib.Plugins.Extensions.Loading.Sql.SQLite/runtimes' 
    cmds:
     - cmd: wsl dos2unix ./run.sh
     #make build directory
     - cmd: powershell -Command "mkdir build, build/app, build/app/config-templates/, build/app/static/ -Force"
     #copy the existing linux-x64 build to the build folder
     - cmd: powershell -Command "cp -Recurse -Force ../build/linux-x64/* build/app/"
     #copy local scripts into the build folder
     - cmd: powershell -Command "cp -Force run.sh, Taskfile.yaml build/app/"
     - cmd: powershell -Command "cp -Force Dockerfile, docker-compose.yaml build/"    
     - cmd: powershell -Command "cp -Force static/* build/app/static/"
     - cmd: powershell -Command "cp -Force config-templates/* build/app/config-templates/"
     #remove the default config file as it's not needed in the container
     - cmd: powershell -Command "rm -Force build/app/config.json"
     - cmd: powershell -Command "rm -Force -Recurse build/app/config/"
  
     #move the linux-musl-x64 directory out of assets before removing the rest of the runtimes and then move it back
     - cmd: powershell -Command "mv {{.SQLITE_RUNTIMES}}/linux-musl-x64 build/linux-musl-x64"
     - cmd: powershell -Command "rm -Recurse -Force {{.SQLITE_RUNTIMES}}" && powershell -Command "mkdir {{.SQLITE_RUNTIMES}}"
     - cmd: powershell -Command "mv build/linux-musl-x64 {{.SQLITE_RUNTIMES}}/linux-musl-x64 "

     #install rpmalloc
     - task: install-rpmalloc-lib

  postbuild_success:
    cmds:
     #tar up the build directory and move it to the output bin directory
     - cmd: cd build/ && tar -czf ../../bin/{{.PACKAGE_FILE_NAME}} .

  clean:
    ignore_error: true
    cmds:
    - cmd: powershell -Command "rm -Recurse -Force ./build"


  install-rpmalloc-lib:
    internal: true
    cmds:
    #install compressor plugin
    - task: install:install
      vars:
        PROJECT_NAME: 'vnlib_rpmalloc'
        MODULE_NAME: "VNLib.Core"
        FILE_NAME: "src.tgz"
        DIR: './build/app/lib/vnlib_rpmalloc'