1e01aa904Sopenharmony_ciname: Build Deploy Container
2e01aa904Sopenharmony_ci
3e01aa904Sopenharmony_cion:
4e01aa904Sopenharmony_ci
5e01aa904Sopenharmony_ci  # Always have a base image ready to go - this is a nightly build
6e01aa904Sopenharmony_ci  schedule:
7e01aa904Sopenharmony_ci    - cron: 0 3 * * *
8e01aa904Sopenharmony_ci
9e01aa904Sopenharmony_ci  # Allow manual trigger of a build
10e01aa904Sopenharmony_ci  workflow_dispatch:
11e01aa904Sopenharmony_ci    inputs:
12e01aa904Sopenharmony_ci      whatever:
13e01aa904Sopenharmony_ci        description: 'This variable does not matter, its a GHA bug.'
14e01aa904Sopenharmony_ci
15e01aa904Sopenharmony_ci  # On push to main we build and deploy images
16e01aa904Sopenharmony_ci  push:
17e01aa904Sopenharmony_ci    branches:
18e01aa904Sopenharmony_ci      - develop
19e01aa904Sopenharmony_ci
20e01aa904Sopenharmony_ci  # Do build to test works on PR
21e01aa904Sopenharmony_ci  pull_request: []
22e01aa904Sopenharmony_ci
23e01aa904Sopenharmony_ci  # Publish packages on release
24e01aa904Sopenharmony_ci  release:
25e01aa904Sopenharmony_ci    types: [published]
26e01aa904Sopenharmony_ci
27e01aa904Sopenharmony_cijobs:
28e01aa904Sopenharmony_ci  build:
29e01aa904Sopenharmony_ci    permissions:
30e01aa904Sopenharmony_ci      packages: write
31e01aa904Sopenharmony_ci    strategy:
32e01aa904Sopenharmony_ci      fail-fast: false
33e01aa904Sopenharmony_ci      matrix:
34e01aa904Sopenharmony_ci
35e01aa904Sopenharmony_ci        # Dockerfiles to build, container names to use, and to tag as libabigail:latest?
36e01aa904Sopenharmony_ci        container: [["Dockerfile.fedora", "ghcr.io/woodard/libabigail-fedora", true],
37e01aa904Sopenharmony_ci                    ["Dockerfile.ubuntu", "ghcr.io/woodard/libabigail-ubuntu-22.04", false],
38e01aa904Sopenharmony_ci                    ["Dockerfile.fedora-base", "ghcr.io/woodard/libabigail-fedora-base", false]]
39e01aa904Sopenharmony_ci
40e01aa904Sopenharmony_ci    runs-on: ubuntu-latest
41e01aa904Sopenharmony_ci    name: Build
42e01aa904Sopenharmony_ci    steps:
43e01aa904Sopenharmony_ci      - name: Checkout
44e01aa904Sopenharmony_ci        uses: actions/checkout@v3
45e01aa904Sopenharmony_ci
46e01aa904Sopenharmony_ci      - name: Make Space For Build
47e01aa904Sopenharmony_ci        run: |
48e01aa904Sopenharmony_ci          sudo rm -rf /usr/share/dotnet
49e01aa904Sopenharmony_ci          sudo rm -rf /opt/ghc
50e01aa904Sopenharmony_ci
51e01aa904Sopenharmony_ci       # It's easier to reference named variables than indexes of the matrix
52e01aa904Sopenharmony_ci      - name: Set Environment
53e01aa904Sopenharmony_ci        env:
54e01aa904Sopenharmony_ci          dockerfile: ${{ matrix.container[0] }}
55e01aa904Sopenharmony_ci          uri: ${{ matrix.container[1] }}
56e01aa904Sopenharmony_ci          isLatest: ${{ matrix.container[2] }}
57e01aa904Sopenharmony_ci        run: |
58e01aa904Sopenharmony_ci          echo "dockerfile=$dockerfile" >> $GITHUB_ENV
59e01aa904Sopenharmony_ci          echo "uri=$uri" >> $GITHUB_ENV
60e01aa904Sopenharmony_ci          echo "isLatest=$isLatest" >> $GITHUB_ENV
61e01aa904Sopenharmony_ci
62e01aa904Sopenharmony_ci      - name: Pull previous layers for cache
63e01aa904Sopenharmony_ci        run: docker pull ${uri}:latest || echo "No container to pull"
64e01aa904Sopenharmony_ci
65e01aa904Sopenharmony_ci      - name: Build Container
66e01aa904Sopenharmony_ci        run: |
67e01aa904Sopenharmony_ci           container=$uri:latest
68e01aa904Sopenharmony_ci           docker build -f docker/${dockerfile} -t ${container} .
69e01aa904Sopenharmony_ci           if [[ "${isLatest}" == "true" ]]; then
70e01aa904Sopenharmony_ci               docker tag ${container} ghcr.io/woodard/libabigail:latest
71e01aa904Sopenharmony_ci           fi
72e01aa904Sopenharmony_ci           echo "container=$container" >> $GITHUB_ENV
73e01aa904Sopenharmony_ci
74e01aa904Sopenharmony_ci      - name: GHCR Login
75e01aa904Sopenharmony_ci        if: (github.event_name != 'pull_request')
76e01aa904Sopenharmony_ci        uses: docker/login-action@v1
77e01aa904Sopenharmony_ci        with:
78e01aa904Sopenharmony_ci          registry: ghcr.io
79e01aa904Sopenharmony_ci          username: ${{ github.actor }}
80e01aa904Sopenharmony_ci          password: ${{ secrets.GITHUB_TOKEN }}
81e01aa904Sopenharmony_ci
82e01aa904Sopenharmony_ci      - name: Deploy
83e01aa904Sopenharmony_ci        if: (github.event_name != 'pull_request')
84e01aa904Sopenharmony_ci        run: |
85e01aa904Sopenharmony_ci            docker push ${container}
86e01aa904Sopenharmony_ci            if [[ "${isLatest}" == "true" ]]; then
87e01aa904Sopenharmony_ci               docker push ghcr.io/woodard/libabigail:latest
88e01aa904Sopenharmony_ci            fi
89e01aa904Sopenharmony_ci
90e01aa904Sopenharmony_ci      - name: Tag and Push Release
91e01aa904Sopenharmony_ci        if: (github.event_name == 'release')
92e01aa904Sopenharmony_ci        run: |
93e01aa904Sopenharmony_ci            tag=${GITHUB_REF#refs/tags/}
94e01aa904Sopenharmony_ci            echo "Tagging and releasing ${uri}:${tag}"
95e01aa904Sopenharmony_ci            docker tag ${uri}:latest ${uri}:${tag}
96e01aa904Sopenharmony_ci            docker push ${uri}:${tag}
97e01aa904Sopenharmony_ci            if [[ "${isLatest}" == "true" ]]; then
98e01aa904Sopenharmony_ci                docker tag ${uri}:latest ghcr.io/woodard/libabigail:${tag}
99e01aa904Sopenharmony_ci                docker push ghcr.io/woodard/libabigail:${tag}
100e01aa904Sopenharmony_ci            fi
101