diff --git a/.dockerignore b/.dockerignore index 25eeda1..a214bb5 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,11 +1,16 @@ * !requirements.txt +!requirements_audio_enhancement.txt +!requirements_vad.txt !MANIFEST.in !setup.py !script/setup !script/run +!script/run_2mic +!script/run_4mic !wyoming_satellite/*.py !wyoming_satellite/utils !wyoming_satellite/VERSION !docker/run !sounds/*.wav +!examples/* diff --git a/.github/workflows/docker-build-nightly.yml b/.github/workflows/docker-build-nightly.yml new file mode 100644 index 0000000..a0d28ae --- /dev/null +++ b/.github/workflows/docker-build-nightly.yml @@ -0,0 +1,49 @@ +--- +name: Build and publish the voice sattelite docker image + +on: + push: + branches: + - "master" + +env: + REGISTRY: ghcr.io + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + id-token: write + attestations: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Log in to the Container registry + uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 # v3.1.0 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ github.token }} + # Build Docker Images (amd64 and arm64) + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Build and push Docker image + id: push + uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5.3.0 + with: + context: . + platforms: linux/amd64,linux/aarch64 + push: true + tags: ${{ env.REGISTRY }}/${{ github.repository }}:nightly + labels: "nightly" + - name: Generate artifact attestation + uses: actions/attest-build-provenance@v1.4.4 + with: + subject-name: ${{ env.REGISTRY }}/${{ github.repository }} + subject-digest: ${{ steps.push.outputs.digest }} + push-to-registry: true diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build-release.yml similarity index 79% rename from .github/workflows/docker-build.yml rename to .github/workflows/docker-build-release.yml index aff6e71..9f6ccea 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build-release.yml @@ -1,5 +1,5 @@ --- -name: Build and publish the docker image +name: Build and publish the voice sattelite stable docker image on: push: @@ -9,7 +9,6 @@ on: env: REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} jobs: build-and-push-image: @@ -29,11 +28,16 @@ jobs: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ github.token }} + # Build Docker Images (amd64 and arm64) + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - name: Extract metadata for Docker id: meta uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1 with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + images: ${{ env.REGISTRY }}/${{ github.repository }} # E.g. tag v1.2.0 produces 3 tags: '1.2.0', '1.2', and 'latest' # https://github.com/docker/metadata-action?tab=readme-ov-file#semver tags: | @@ -44,13 +48,14 @@ jobs: uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5.3.0 with: context: . + platforms: linux/amd64,linux/aarch64 push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - name: Generate artifact attestation uses: actions/attest-build-provenance@v1 with: - subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + subject-name: ${{ env.REGISTRY }}/${{ github.repository }} subject-digest: ${{ steps.push.outputs.digest }} push-to-registry: true ... diff --git a/Dockerfile b/Dockerfile index e0022a4..67d972e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,20 +4,35 @@ ENV LANG C.UTF-8 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ - apt-get install --yes --no-install-recommends avahi-utils alsa-utils pulseaudio-utils pipewire-bin + apt-get install --yes --no-install-recommends avahi-utils alsa-utils pulseaudio-utils pipewire-bin build-essential +# set workdir WORKDIR /app +# copy content for voice COPY sounds/ ./sounds/ COPY script/setup ./script/ -COPY setup.py requirements.txt MANIFEST.in ./ +COPY script/run ./script/ +COPY script/run_2mic ./script/ +COPY script/run_4mic ./script/ +COPY setup.py requirements.txt requirements_audio_enhancement.txt requirements_vad.txt MANIFEST.in ./ COPY wyoming_satellite/ ./wyoming_satellite/ +COPY docker/run ./ -RUN script/setup +# copy content for led +COPY examples/ ./examples/ -COPY script/run ./script/ -COPY docker/run ./ +# run installation +RUN python3 -m venv .venv +RUN .venv/bin/pip3 install --upgrade pip +RUN .venv/bin/pip3 install --upgrade wheel setuptools +RUN .venv/bin/pip3 install --extra-index-url 'https://www.piwheels.org/simple' -f 'https://synesthesiam.github.io/prebuilt-apps/' -r requirements.txt -r requirements_audio_enhancement.txt -r requirements_vad.txt -r examples/requirements.txt +#RUN .venv/bin/pip3 install 'pixel-ring' -EXPOSE 10700 +# set port for voice and led +EXPOSE 10700 10500 +# set start script +# add parameters in docker ENTRYPOINT ["/app/run"] +#ENTRYPOINT ["/app/script/run_2mic" "--uri" "tcp://0.0.0.0:10500"] for led diff --git a/examples/requirements.txt b/examples/requirements.txt new file mode 100644 index 0000000..0ae925d --- /dev/null +++ b/examples/requirements.txt @@ -0,0 +1,4 @@ +gpiozero==2.0.1 +spidev==3.6 +pigpio==1.78 +RPi.GPIO==0.7.1