-
Notifications
You must be signed in to change notification settings - Fork 0
160 lines (134 loc) · 4.97 KB
/
main-build.yml
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
name: main build
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name}}
cancel-in-progress: true
on:
workflow_dispatch:
inputs:
push_containers:
type: boolean
required: false
default: false
description: push the containers to the registry
target_tag:
type: string
required: false
default: main_build
description: Version tag of existing containers to use. Is `main_build` by default.
push:
branches: [ 'main' ]
jobs:
# phase 1
list:
runs-on: ubuntu-latest
outputs:
component_matrix: ${{ steps.set_matrix.outputs.matrix }}
cache_key: ${{ steps.cache.outputs.cache_key }}
steps:
- name: Branch to checkout (use existing target branch if it exists)
id: get_checkout_branch
run: |
if ! git ls-remote --heads --exit-code https://github.com/data-intuitive/rnaseq.vsh.git ${{ github.ref_name }}_build > /dev/null; then
echo "Remote branch does not exist, fetching current branch and building on top of it"
echo "checkout_branch=${{ github.ref_name }}" >> "$GITHUB_OUTPUT"
else
echo "Remote branch exists, checking out existing branch"
echo "checkout_branch=${{ github.ref_name }}_build" >> "$GITHUB_OUTPUT"
fi
- uses: actions/checkout@v4
with:
ref: ${{ steps.get_checkout_branch.outputs.checkout_branch }}
- name: Fetch changes from main
run: |
git fetch origin ${{github.ref_name}}
git checkout -f --no-overlay origin/${{github.ref_name}} -- '.'
- uses: viash-io/viash-actions/setup@v4
- name: Remove target folder from .gitignore
run: |
# allow publishing the target folder
sed -i '/^\/target\/$/d' .gitignore
- uses: viash-io/viash-actions/ns-build@v4
with:
config_mod: |
.functionality.version := '${{ github.ref_name }}_build'
.platforms[.type == 'docker'].target_tag := '${{ github.event_name == 'push' && 'main_build' || github.event.inputs.target_tag }}'
parallel: true
query: ^(?!workflows)
- uses: viash-io/viash-actions/ns-build@v4
with:
config_mod: .functionality.version := '${{ github.ref_name }}_build'
parallel: true
query: ^workflows
# - name: Build nextflow schemas
# uses: viash-io/viash-actions/pro/build-nextflow-schemas@v4
# with:
# components: src
# workflows: src
# viash_pro_token: ${{ secrets.GITHUB_TOKEN }}
# tools_version: 'main_build'
# - name: Build parameter files
# uses: viash-io/viash-actions/pro/build-nextflow-params@v4
# with:
# workflows: src
# components: src
# viash_pro_token: ${{ secrets.GTHB_PAT }}
# tools_version: 'main_build'
- name: Deploy to target branch
uses: stefanzweifel/git-auto-commit-action@v5
with:
create_branch: true
commit_message: "deploy: ${{github.sha}}"
skip_dirty_check: true
branch: ${{ github.ref_name }}_build
- id: ns_list
uses: viash-io/viash-actions/ns-list@v4
with:
platform: docker
src: src
format: json
query_namespace: ^(?!workflows)
- id: set_matrix
run: |
echo "matrix=$(jq -c '[ .[] |
{
"name": (.functionality.namespace + "/" + .functionality.name),
"config": .info.config,
"dir": .info.config | capture("^(?<dir>.*\/)").dir
}
]' ${{ steps.ns_list.outputs.output_file }} )" >> $GITHUB_OUTPUT
# phase 2
build:
needs: list
if: ${{github.event_name == 'push' || github.event.inputs.push_containers == 'true' }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
component: ${{ fromJson(needs.list.outputs.component_matrix) }}
steps:
# Remove unnecessary files to free up space. Otherwise, we get 'no space left on device.'
- uses: data-intuitive/reclaim-the-bytes@v2
- uses: actions/checkout@v4
- uses: viash-io/viash-actions/setup@v4
- name: Build container
uses: viash-io/viash-actions/ns-build@v4
with:
config_mod: |
.functionality.version := '${{ github.event_name == 'push' && 'main_build' || github.event.inputs.target_tag }}'
.platforms[.type == 'docker'].target_tag := '${{ github.event_name == 'push' && 'main_build' || github.event.inputs.target_tag }}'
platform: docker
src: ${{ matrix.component.dir }}
setup: build
# - name: Login to container registry
# uses: docker/login-action@v3
# with:
# registry: ghcr.io
# username: ${{ secrets.GTHB_USER }}
# password: ${{ secrets.GTHB_PAT }}
- name: Push container
uses: viash-io/viash-actions/ns-build@v4
with:
config_mod: .functionality.version := '${{ github.ref_name }}_build'
platform: docker
src: ${{ matrix.component.dir }}
setup: push