File: action.yml

package info (click to toggle)
kas 5.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,280 kB
  • sloc: python: 5,877; sh: 1,097; makefile: 210
file content (116 lines) | stat: -rw-r--r-- 4,186 bytes parent folder | download
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
name: docker-init

inputs:
  deploy-user:
    required: true
  deploy-token:
    required: true
  image-name:
    required: true
  distro-release:
    required: false

runs:
  using: composite
  steps:
    - name: Set up QEMU
      shell: bash
      env:
        QEMU_USER_STATIC_PACKAGE: qemu-user-static_7.2+dfsg-7+deb12u12_amd64.deb
        REPO_DATE: 20250130T084806Z
        PACKAGE_SHA256: 1a2696081c1f30d464f79fd300196822397c77f05440ea9ce6dc8e9658b595ec
      run: |
        # temporarily use Debian qemu-user-static until Ubuntu fixes theirs
        wget -q http://snapshot.debian.org/archive/debian/${REPO_DATE}/pool/main/q/qemu/${QEMU_USER_STATIC_PACKAGE}
        echo "${PACKAGE_SHA256} ${QEMU_USER_STATIC_PACKAGE}" | sha256sum -c
        sudo dpkg -i ${QEMU_USER_STATIC_PACKAGE}

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v3
      with:
        driver-opts: image=moby/buildkit:v0.16.0

    - name: Login to ghcr.io
      uses: docker/login-action@v3
      with:
        registry: ghcr.io
        username: ${{ inputs.deploy-user }}
        password: ${{ inputs.deploy-token }}

    - name: Set SOURCE_DATE_EPOCH
      run: |
        echo "SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV
      shell: bash

    - name: Determine Debian tag
      run: |
        if [[ ! "${{ inputs.distro-release }}" == debian-* ]]; then
          echo "Non debian 'distro-release' values are currently not supported"
          exit 1
        fi
        COMMIT_DATE=$(date -d @$(git log -1 --pretty=%ct) +%Y%m%d)
        DEBIAN_LATEST_RELEASE=$(grep -m 1 'ARG DEBIAN_TAG=' Dockerfile | sed 's/.*DEBIAN_TAG=\(.*\)-.*/\1/')
        if [ -n "${{ inputs.distro-release }}" ]; then
          DISTRO_RELEASE="${{ inputs.distro-release }}"
          DEBIAN_RELEASE="${DISTRO_RELEASE#debian-}"
        else
          DEBIAN_RELEASE=$DEBIAN_LATEST_RELEASE
        fi
        echo "DEBIAN_TAG=$(podman search --list-tags docker.io/debian --limit 1000000000 | \
                           grep "$DEBIAN_RELEASE-.*-slim" | sort -r | sed 's/.*[ ]\+//' | \
                           ./scripts/lower-bound.py $DEBIAN_RELEASE-$COMMIT_DATE-slim )" \
                           >> $GITHUB_ENV
        echo "DISTRO_LATEST_RELEASE=debian-$DEBIAN_LATEST_RELEASE" >> $GITHUB_ENV
      shell: bash

    - name: Prepare repository for COPY-in
      run: |
        git clone . /home/runner/kas-clone
      shell: bash

    - name: Define image metadata
      run: |
        case ${{ inputs.image-name }} in
        kas)
            echo "IMAGE_DESCRIPTION=kas build environment for Yocto/OpenEmbedded projects" >> $GITHUB_ENV
            ;;
        kas-isar)
            echo "IMAGE_DESCRIPTION=kas build environment for isar-based Debian projects" >> $GITHUB_ENV
            ;;
        esac
        # make image metadata reproducible (also for image re-builders)
        echo "IMAGE_COMMIT_DATE=$(date -d @$(git log -1 --pretty=%ct) --iso-8601=seconds)" >> $GITHUB_ENV
        echo "IMAGE_OFFICIAL_URL=https://github.com/siemens/kas" >> $GITHUB_ENV
      shell: bash

    - name: Extract metadata
      id: meta
      uses: docker/metadata-action@v5
      with:
        annotations: |
          org.opencontainers.image.description=${{ env.IMAGE_DESCRIPTION }}
          org.opencontainers.image.licenses=MIT and others
          org.opencontainers.image.created=${{ env.IMAGE_COMMIT_DATE }}
          org.opencontainers.image.source=${{ env.IMAGE_OFFICIAL_URL }}
          org.opencontainers.image.url=${{ env.IMAGE_OFFICIAL_URL }}
      env:
        DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index

    - name: Cache apt
      id: cache-apt
      uses: actions/cache@v4
      with:
        path: |
          var-cache-apt
          var-lib-apt
        key: cache-apt-${{ env.DEBIAN_TAG }}-${{ inputs.image-name }}

    - name: Inject cache into docker
      uses: reproducible-containers/buildkit-cache-dance@5b6db76d1da5c8b307d5d2e0706d266521b710de #v3.1.2
      with:
        cache-map: |
          {
            "var-cache-apt": "/var/cache/apt",
            "var-lib-apt": "/var/lib/apt"
          }
        skip-extraction: ${{ steps.cache.outputs.cache-hit }}