name: Release Binaries on: release: types: [published] jobs: build: runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: include: - arch: amd64 platform: linux/amd64 image: ocaml/opam:ubuntu-22.04-ocaml-5.4 runner: linux-amd64 static: "" upx_install: "sudo apt install -y upx" - arch: arm64 platform: linux/arm64 image: ocaml/opam:alpine-ocaml-5.4 runner: linux-arm64 static: "OCAMLPARAM='_,ccopt=-static,cclib=-static'" upx_install: "sudo apk add upx" steps: - name: Checkout uses: actions/checkout@v4 - name: Build (${{ matrix.arch }}) run: | set -o pipefail # Crea il container senza avviarlo CID=$(docker create \ --platform ${{ matrix.platform }} \ -w /src \ ${{ matrix.image }} \ sleep infinity) # Copia i sorgenti dentro con docker cp (funziona anche in DinD) docker cp "${{ github.workspace }}/." "$CID:/src" # Avvia ed esegui la build docker start "$CID" docker exec "$CID" bash -c " ${{ matrix.upx_install }} sudo chown -R opam:opam /src opam update opam install . --deps-only -y --no-depexts ${{ matrix.static }} opam exec -- dune build @install --release opam exec -- dune install --prefix /src/dist upx /src/dist/bin/ical2rem " 2>&1 | cat # Copia il binario fuori docker cp "$CID:/src/dist/bin/ical2rem" \ "${{ github.workspace }}/ical2rem-linux-${{ matrix.arch }}" docker rm -f "$CID" - name: Carica artefatto sulla release env: TOKEN: ${{ secrets.GITHUB_TOKEN }} RELEASE_ID: ${{ github.event.release.id }} run: | FILENAME="ical2rem-linux-${{ matrix.arch }}" curl -s -X POST \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases/${RELEASE_ID}/assets?name=${FILENAME}" \ -H "Authorization: token ${TOKEN}" \ -H "Content-Type: application/octet-stream" \ --data-binary "@${FILENAME}"