|
| 1 | +name: Create Release and .deb Files Project |
| 2 | + |
| 3 | +on: |
| 4 | + push: |
| 5 | + tags: |
| 6 | + - 'v*.*.*' |
| 7 | + - 'v*.*.*-rc*' |
| 8 | + |
| 9 | +env: |
| 10 | + GNUTLS_CPUID_OVERRIDE: 0x1 |
| 11 | + |
| 12 | +permissions: |
| 13 | + contents: write |
| 14 | + packages: write |
| 15 | + id-token: write |
| 16 | + |
| 17 | +jobs: |
| 18 | + build_test: |
| 19 | + uses: iit-DLSLab/cicd_tools/.github/workflows/dls2_build_test.yml@main |
| 20 | + with: |
| 21 | + test-command: "ls" |
| 22 | + output_workflow_artifact_name: build |
| 23 | + secrets: |
| 24 | + GHCR_USERNAME: ${{ secrets.GHCR_USERNAME }} |
| 25 | + CICD_PAT: ${{ secrets.CICD_PAT }} |
| 26 | + |
| 27 | + release_deb: |
| 28 | + needs: build_test |
| 29 | + uses: iit-DLSLab/cicd_tools/.github/workflows/create-release-deb.yml@main |
| 30 | + with: |
| 31 | + package-name: "dls2" |
| 32 | + # deb-script-source: caller |
| 33 | + deb-script-source: builtin |
| 34 | + builtin-deb-script-path: scripts/create-deb-deploy.sh |
| 35 | + container: "ghcr.io/iit-dlslab/dls2-dev:latest" |
| 36 | + workflow_artifact_name: ${{ needs.build_test.outputs.build_workflow_artifact_name }} |
| 37 | + artifact_download_path: "." |
| 38 | + secrets: |
| 39 | + GHCR_USERNAME: ${{ secrets.GHCR_USERNAME }} |
| 40 | + CICD_PAT: ${{ secrets.CICD_PAT }} |
| 41 | + |
| 42 | + validate_deb: |
| 43 | + needs: release_deb |
| 44 | + runs-on: ubuntu-24.04 |
| 45 | + steps: |
| 46 | + - name: Download runtime .deb artifact |
| 47 | + uses: actions/download-artifact@v4 |
| 48 | + with: |
| 49 | + name: ${{ needs.release_deb.outputs.runtime_deb_workflow_artifact_name }} |
| 50 | + path: runtime-deb |
| 51 | + |
| 52 | + - name: Download framework .deb artifact |
| 53 | + uses: actions/download-artifact@v4 |
| 54 | + with: |
| 55 | + name: ${{ needs.release_deb.outputs.framework_deb_workflow_artifact_name }} |
| 56 | + path: framework-deb |
| 57 | + |
| 58 | + - name: Validate packaged binaries |
| 59 | + shell: bash |
| 60 | + run: | |
| 61 | + set -euo pipefail |
| 62 | +
|
| 63 | + runtime_deb="runtime-deb/${{ needs.release_deb.outputs.runtime_deb_artifact_name }}" |
| 64 | + framework_deb="framework-deb/${{ needs.release_deb.outputs.framework_deb_artifact_name }}" |
| 65 | +
|
| 66 | + echo "Downloaded artifact contents:" |
| 67 | + find runtime-deb framework-deb -maxdepth 2 -type f -print | sort |
| 68 | +
|
| 69 | + for deb in "$runtime_deb" "$framework_deb"; do |
| 70 | + echo "Validating $deb" |
| 71 | + if [[ ! -f "$deb" ]]; then |
| 72 | + echo "ERROR: expected package file not found: $deb" |
| 73 | + exit 1 |
| 74 | + fi |
| 75 | +
|
| 76 | + echo "--- dpkg-deb --info $deb" |
| 77 | + dpkg-deb --info "$deb" |
| 78 | +
|
| 79 | + echo "--- matching entries in $deb" |
| 80 | + dpkg-deb -c "$deb" | awk ' |
| 81 | + /\.\/*usr\/bin\/dls($|\/)/ || /\.\/*usr\/local/ || /^drwx.*\.\/usr\/bin\/?$/ { print } |
| 82 | + ' |
| 83 | +
|
| 84 | + if ! dpkg-deb -c "$deb" | awk ' |
| 85 | + index($0, "./usr/bin/dls") { found=1 } |
| 86 | + END { exit(found ? 0 : 1) } |
| 87 | + '; then |
| 88 | + echo "ERROR: $deb does not contain /usr/bin/dls" |
| 89 | + exit 1 |
| 90 | + fi |
| 91 | + done |
| 92 | +
|
| 93 | + publish_runtime_image: |
| 94 | + needs: |
| 95 | + - release_deb |
| 96 | + - validate_deb |
| 97 | + uses: iit-DLSLab/cicd_tools/.github/workflows/docker-publish.yml@main |
| 98 | + with: |
| 99 | + image_name: dls2-runtime |
| 100 | + registry: ghcr.io |
| 101 | + context: external-docker/dockerfiles/dls2-dev-deb |
| 102 | + dockerfile: external-docker/dockerfiles/dls2-dev-deb/Dockerfile |
| 103 | + tag_override: ${{ needs.release_deb.outputs.version_tag }} |
| 104 | + workflow_artifact_name: ${{ needs.release_deb.outputs.runtime_deb_workflow_artifact_name }} |
| 105 | + artifact_download_path: external-docker/dockerfiles/dls2-dev-deb/artifacts |
| 106 | + extra_checkout_repository: iit-DLSLab/dls_docker |
| 107 | + extra_checkout_ref: deb |
| 108 | + extra_checkout_path: external-docker |
| 109 | + extra_build_args: | |
| 110 | + DLS2_DEB_FILE=${{ needs.release_deb.outputs.runtime_deb_artifact_name }} |
| 111 | + force_latest_tag: true |
| 112 | + secrets: |
| 113 | + CICD_PAT: ${{ secrets.CICD_PAT }} |
| 114 | + |
| 115 | + publish_framework_image: |
| 116 | + needs: |
| 117 | + - release_deb |
| 118 | + - validate_deb |
| 119 | + uses: iit-DLSLab/cicd_tools/.github/workflows/docker-publish.yml@main |
| 120 | + with: |
| 121 | + image_name: dls2-framework |
| 122 | + registry: ghcr.io |
| 123 | + context: external-docker/dockerfiles/dls2-dev-deb |
| 124 | + dockerfile: external-docker/dockerfiles/dls2-dev-deb/Dockerfile |
| 125 | + tag_override: ${{ needs.release_deb.outputs.version_tag }} |
| 126 | + workflow_artifact_name: ${{ needs.release_deb.outputs.framework_deb_workflow_artifact_name }} |
| 127 | + artifact_download_path: external-docker/dockerfiles/dls2-dev-deb/artifacts |
| 128 | + extra_checkout_repository: iit-DLSLab/dls_docker |
| 129 | + extra_checkout_ref: deb |
| 130 | + extra_checkout_path: external-docker |
| 131 | + extra_build_args: | |
| 132 | + DLS2_DEB_FILE=${{ needs.release_deb.outputs.framework_deb_artifact_name }} |
| 133 | + force_latest_tag: true |
| 134 | + secrets: |
| 135 | + CICD_PAT: ${{ secrets.CICD_PAT }} |
0 commit comments