-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
128 lines (115 loc) · 4.26 KB
/
maintenance-linux.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
name: Build Linux
on:
push:
pull_request:
workflow_dispatch:
inputs:
crystal_version:
required: true
default: "master"
type: string
previous_crystal_version:
required: true
default: "1.10.1"
type: string
env:
CRYSTAL_VERSION: "${{ inputs.crystal_version || 'master' }}"
CRYSTAL_SHA1: "${{ inputs.crystal_version || 'master' }}"
PREVIOUS_CRYSTAL_VERSION: "${{ inputs.previous_crystal_version || '1.9.2' }}"
jobs:
build-linux:
name: Buildx ${{ matrix.arch }} Linux tarballs
runs-on: ${{ matrix.runs-on }}
strategy:
include:
- arch: x86_64
runs-on: ubuntu-latest
previous_crystal_release: https://github.com/crystal-lang/crystal/releases/download/${{ env.PREVIOUS_CRYSTAL_VERSION }}/crystal-${{ env.PREVIOUS_CRYSTAL_VERSION }}-1-linux-${{ matrix.arch }}.tar.gz
- arch: aarch64
runs-on: [linux, ARM64]
previous_crystal_release: https://dev.alpinelinux.org/archive/crystal/crystal-${{ env.PREVIOUS_CRYSTAL_VERSION }}-${{ env.arch }}-alpine-linux-musl.tar.gz
steps:
- name: Build statically linked compiler
uses: docker/build-push-action@v5
with:
context: https://github.com/crystal-lang/distribution-scripts.git#refactor/linux-makefile-build-context
file: linux/Dockerfile
build-args: |
previous_crystal_release=https://github.com/crystal-lang/crystal/releases/download/${{ env.PREVIOUS_CRYSTAL_VERSION }}/crystal-${{ env.PREVIOUS_CRYSTAL_VERSION }}-1-linux-${{ matrix.arch }}.tar.gz
crystal_version=${{ env.CRYSTAL_VERSION }}
crystal_sha1=${{ env.CRYSTAL_SHA1 }}
outputs: |
type=tar,path=linux/crystal-${{ env.CRYSTAL_VERSION }}-1-linux-${{ matrix.arch }}.tar
- name: Build tar.gz
run: gzip -c linux/crystal-${{ env.CRYSTAL_VERSION }}-1-linux-${{ matrix.arch }}.tar > linux/crystal-${{ env.CRYSTAL_VERSION }}-1-linux-${{ matrix.arch }}.tar.gz
- name: Upload tarballs as artifacts
uses: actions/upload-artifact@v3
with:
name: release-${{ env.CRYSTAL_VERSION }}-${{ matrix.arch }}
path: linux/*.tar.gz
- name: Upload tarball for use in the next step
uses: actions/upload-artifact@v3
with:
name: tarball
path: |
linux/*.tar.gz
!linux/*-bundled.tar.gz
package-docker:
name: Build the docker images
runs-on: ubuntu-latest
needs:
- build-x86_64
- build-aarch64
env:
tag: "crystallang/crystal:${{ inputs.crystal_version || 'master' }}"
steps:
- name: Download the linux tarballs
uses: actions/download-artifact@v3
with:
name: tarball
path: linux/build/
- run: ls linux/build/
- name: Build ubuntu runtime image
uses: docker/build-push-action@v5
with:
target: runtime
file: docker/ubuntu.Dockerfile
build-contexts: tarball=linux/build/
push: false
load: true
tags: "${{ env.tag }}"
- name: Build ubuntu build image
uses: docker/build-push-action@v5
with:
target: build
file: docker/ubuntu.Dockerfile
build-contexts: tarball=linux/build/
push: false
load: true
tags: "${{ env.tag }}-build"
- name: Build alpine runtime image
uses: docker/build-push-action@v5
with:
target: runtime
file: docker/alpine.Dockerfile
build-contexts: tarball=linux/build/
push: false
load: true
tags: "${{ env.tag }}-alpine"
- name: Build alpine build image
uses: docker/build-push-action@v5
with:
target: build
file: docker/alpine.Dockerfile
build-contexts: tarball=linux/build/
push: false
load: true
tags: "${{ env.tag }}-alpine-build"
- name: Inspect ubuntu
run: docker image inspect "${{ env.tag }}"
- name: Inspect ubuntu
run: docker image inspect "${{ env.tag }}-build"
- name: Inspect alpine
run: docker image inspect "${{ env.tag }}-alpine"
- name: Inspect alpine
run: docker image inspect "${{ env.tag }}-alpine-build"