-
Notifications
You must be signed in to change notification settings - Fork 4
131 lines (120 loc) · 4.71 KB
/
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
name: build
on:
push:
branches:
- main
release:
types:
- published
- edited
jobs:
docker_build:
runs-on: self-hosted
outputs:
tag: ${{ steps.build_tag.outputs.tag }}
steps:
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: hippocampusgirl
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to container registry
uses: docker/login-action@v3
with:
registry: ${{ secrets.REGISTRY }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Set up build tag
id: build_tag
shell: bash
env:
github_ref: ${{ github.ref }}
github_repository: ${{ github.repository }}
run: |
version=$(echo "${github_ref}" | cut -d '/' -f 3)
if [[ "$version" == "main" ]]; then
version=latest
fi
owner=$( \
echo "${github_repository}" | \
cut -d'/' -f1 | \
tr '[:upper:]' '[:lower:]' \
)
name=$( \
echo "${github_repository}" | \
cut -d'/' -f2 | \
sed -r 's/([A-Za-z0-9])([A-Z])([a-z0-9])/\1-\L\2\3/g' | \
tr '[:upper:]' '[:lower:]' \
)
echo "repo=${name}" >> ${GITHUB_OUTPUT}
echo "tag=${name}:${version}" >> ${GITHUB_OUTPUT}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Checkout
uses: actions/checkout@v4
- name: Build and push to container registry
uses: docker/build-push-action@v5
with:
context: "."
file: "./Dockerfile"
platforms: linux/amd64
cache-from: type=registry,ref=${{ secrets.REGISTRY }}/${{ steps.build_tag.outputs.repo }}:buildcache
cache-to: type=registry,ref=${{ secrets.REGISTRY }}/${{ steps.build_tag.outputs.repo }}:buildcache,compression=zstd,mode=max
outputs: type=image,name=${{ secrets.REGISTRY }}/${{ steps.build_tag.outputs.tag }},push=true,compression=gzip,compression-level=9,force-compression=true
labels: |
org.opencontainers.image.title=${{ github.event.repository.name }}
org.opencontainers.image.url=${{ github.event.repository.html_url }}
org.opencontainers.image.source=${{ github.event.repository.html_url }}
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.created=${{ github.event.repository.updated_at}}
singularity_build:
runs-on: self-hosted
needs:
- docker_build
defaults:
run:
shell: bash --login -x -e {0}
steps:
- uses: conda-incubator/setup-miniconda@v2
with:
miniforge-variant: Mambaforge
miniforge-version: latest
auto-activate-base: true
activate-environment: ""
use-mamba: true
- name: Set up Singularity
run: |
mamba install --yes singularity
- name: Singularity build
id: singularity_build
env:
docker_build_tag: ${{ needs.docker_build.outputs.tag }}
run: |
# Configure Singularity to not use the host's /tmp folder
# because it is too small
export SINGULARITY_TMPDIR="${PWD}"
# Build Singularity image from Docker image
singularity_build_name=$(echo -n ${docker_build_tag} | tr -c '[:alnum:]' '-')
singularity build --disable-cache \
${singularity_build_name}.sif \
docker://${{ secrets.REGISTRY }}/${docker_build_tag}
echo "name=${singularity_build_name}" >> ${GITHUB_OUTPUT}
- name: Upload to DigitalOcean
env:
digitalocean_access_key: ${{ secrets.DIGITALOCEAN_ACCESS_KEY }}
digitalocean_secret_key: ${{ secrets.DIGITALOCEAN_SECRET_KEY }}
digitalocean_region: ${{ secrets.DIGITALOCEAN_REGION }}
digitalocean_space_name: ${{ secrets.DIGITALOCEAN_SPACE_NAME }}
singularity_build_name: ${{ steps.singularity_build.outputs.name }}
run: |
pip install s3cmd
s3cmd --stop-on-error \
--ssl --no-encrypt \
--access_key="${digitalocean_access_key}" \
--secret_key="${digitalocean_secret_key}" \
--host="${digitalocean_region}.digitaloceanspaces.com" \
--host-bucket="%(bucket)s.${digitalocean_region}.digitaloceanspaces.com" \
--dump-config \
> ${HOME}/.s3cfg
s3cmd put ${singularity_build_name}.sif s3://${digitalocean_space_name}/singularity/
s3cmd setacl s3://${digitalocean_space_name}/singularity/${singularity_build_name}.sif --acl-public