-
Notifications
You must be signed in to change notification settings - Fork 8
136 lines (129 loc) · 5.4 KB
/
ci.yaml
File metadata and controls
136 lines (129 loc) · 5.4 KB
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
# *******************************************************************************
# Copyright (c) 2026 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
#
# This program and the accompanying materials are made available under the
# terms of the Apache License Version 2.0 which is available at
# https://www.apache.org/licenses/LICENSE-2.0
#
# SPDX-License-Identifier: Apache-2.0
# *******************************************************************************
name: Validate DevContainer
description: This workflow is checking that updates do not break stuff. If on main branch, publish to "latest" tag.
on:
pull_request:
-types: [opened, synchronize, reopened, labeled]
push:
branches:
- main
merge_group:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build:
strategy:
matrix:
os: [arm64, amd64]
include:
- os: amd64
name: DevContainer (amd64)
runner: ubuntu-24.04
- os: arm64
name: DevContainer (arm64)
runner: ubuntu-24.04-arm
name: ${{ matrix.name }}
runs-on: ${{ matrix.runner }}
permissions:
contents: read
packages: write
id-token: write
steps:
- uses: eclipse-score/more-disk-space@v1
- name: Checkout (GitHub)
uses: actions/checkout@v6
- name: Login to GitHub Container Registry
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# Use .devcontainer from THIS repo for building and testing
- name: Check, Build, Test, Publish
uses: devcontainers/ci@v0.3
with:
# The .devcontainer is never published as pre-built container.
# We want to only use it for building and testing the actual container, which resides in src/s-core-devcontainer.
push: never
runCmd: |
set -eux pipefail
# Check
pre-commit run --show-diff-on-failure --color=always --all-files || exit 1
# Create builder for multi-arch builds
./scripts/create_builder.sh
# Build
./scripts/build.sh --${{ matrix.os }} "main"
# Test
./scripts/test.sh
# Test consumer repository, arm64 is skipped because not all bazel dependencies are available for arm64
# By default this is skipped in pull requests, unless the label "test-consumer" is added
if [ "${{ matrix.os }}" = "amd64" ] && ( [ "${{ github.event_name }}" != "pull_request" ] || echo "${{ toJSON(github.event.pull_request.labels) }}" | grep -q "test-consumer" ); then
./scripts/test_consumer.sh "https://github.com/eclipse-score/inc_someip_gateway.git" "14a733a1f3d5f6fa76ac13365d57c8df30b62a86"
./scripts/test_consumer.sh "https://github.com/eclipse-score/score.git" "7cbb86d54dced80e33a6405bc92f8abe62200ad4"
fi
# Optionally: Publish
# We do not use the push feature of devcontainers/ci here, since that would push the wrong container.
# Instead, we use the publish script which pushes the correct container (residing in src/s-core-devcontainer).
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
# manually login to ghcr.io for publishing
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
./scripts/publish.sh --${{ matrix.os }} "main"
fi
overall-result:
name: build/overall-result
runs-on: ubuntu-24.04
needs: [build]
if: ${{ !cancelled() }}
steps:
- name: Successful verification
if: ${{ !(contains(needs.*.result, 'failure')) }}
run: exit 0
- name: Failing verification
if: ${{ contains(needs.*.result, 'failure') }}
run: exit 1
merge:
name: Merge Labels (main only)
needs: [build]
runs-on: ubuntu-24.04
if: github.ref == 'refs/heads/main'
permissions:
contents: read
packages: write
id-token: write
steps:
- uses: eclipse-score/more-disk-space@v1
- name: Checkout (GitHub)
uses: actions/checkout@v6
- name: Login to GitHub Container Registry
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# Use .devcontainer from THIS repo for building and testing
- name: Merge
uses: devcontainers/ci@v0.3
with:
# The .devcontainer is never published as pre-built container.
# We want to only use it for building and testing the actual container, which resides in src/s-core-devcontainer.
push: never
runCmd: |
set -eux pipefail
# Merge
# We do not use the push feature of devcontainers/ci here, since that would push the wrong container.
# Instead, we use the publish script which pushes the correct container (residing in src/s-core-devcontainer).
# manually login to ghcr.io for publishing
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
./scripts/merge.sh "main"