commit 4f18c0f58076888591c0aa663742909cd9ed762c Author: Alex Davies Date: Wed Mar 6 16:42:32 2024 -0400 Initial commit diff --git a/.copier/answers.meta.yml b/.copier/answers.meta.yml new file mode 100644 index 0000000..9076053 --- /dev/null +++ b/.copier/answers.meta.yml @@ -0,0 +1,4 @@ +# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY +_commit: v1.0.0 +_src_path: https://git.spirirobotics.com/Spiri/template-meta.git +project_name: service-ros1-catkin diff --git a/README.md b/README.md new file mode 100644 index 0000000..c06d4d0 --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +This is a template for use with [copier](https://github.com/copier-org/copier). + +To get started run `copier copy https://git.spirirobotics.com/Spiri/template-service-ros1-catkin.git ./` inside your git repo. + +If copier overwrites files you can use `git difftool` to see what changes it has made. + +You can use `find .copier/ -type f -exec copier update --skip-answered -a {} \;` to update all applied templates. + diff --git a/copier.yml b/copier.yml new file mode 100644 index 0000000..c70dc44 --- /dev/null +++ b/copier.yml @@ -0,0 +1,5 @@ +_subdirectory: src +_answers_file: .copier/answers.service-ros1-catkin.yml +RUN_COMMAND: /launch video_stream_opencv stereo_cameras.launch port_camera_device:="/dev/video0" starboard_camera_device:="/dev/video1" +SOURCE: ./ +HEALTHCHECK: --start-period=60s CMD /ros_entrypoint.sh rostopic list diff --git a/src/.copier/answers.dockerbuild.yml b/src/.copier/answers.dockerbuild.yml new file mode 100644 index 0000000..744ca51 --- /dev/null +++ b/src/.copier/answers.dockerbuild.yml @@ -0,0 +1,4 @@ +# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY +_commit: v1.1.2 +_src_path: https://git.spirirobotics.com/Spiri/template-dockerbuild.git +platforms: linux/amd64,linux/arm64 diff --git a/src/.copier/{{ _copier_conf.answers_file }}.jinja b/src/.copier/{{ _copier_conf.answers_file }}.jinja new file mode 100644 index 0000000..69141bb --- /dev/null +++ b/src/.copier/{{ _copier_conf.answers_file }}.jinja @@ -0,0 +1,2 @@ +# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY +{{ _copier_answers|to_nice_yaml -}} diff --git a/src/.github/workflows/build-docker.yaml b/src/.github/workflows/build-docker.yaml new file mode 100644 index 0000000..de0ee64 --- /dev/null +++ b/src/.github/workflows/build-docker.yaml @@ -0,0 +1,67 @@ + +name: Create and publish a Docker image + +on: + push: + +# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. +env: + REGISTRY: git.spirirobotics.com + IMAGE_NAME: ${{ github.repository }} + +# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu. +jobs: + build-and-push-image: + runs-on: ubuntu-latest + container: ghcr.io/catthehacker/ubuntu:act-latest + + # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. + permissions: + contents: read + packages: write + # + steps: + #- name: install docker + # run: apt install moby-cli -y + - name: Checkout repository + uses: actions/checkout@v4 + with: + lfs: true + submodules: true + # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here. + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.WORKFLOW_REGISTRY_TOKEN }} + # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels. + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + # - name: Set up QEMU + # uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages. + # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository. + # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step. + - name: Build Docker image + uses: docker/build-push-action@v5 + env: + #Hack for gitea/github weirdness. + ACTIONS_RUNTIME_TOKEN: '' + with: + context: . + + platforms: linux/amd64,linux/arm64 + + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + diff --git a/src/Dockerfile.jinja b/src/Dockerfile.jinja new file mode 100644 index 0000000..f0af761 --- /dev/null +++ b/src/Dockerfile.jinja @@ -0,0 +1,41 @@ +# Stage 1: Build Stage +FROM git.spirirobotics.com/spiri/services-ros1-core:main AS builder + +RUN apt-get update --yes && apt-get install --yes git build-essential + # ros-noetic-cv-bridge \ + # ros-noetic-vision-opencv \ + # ros-noetic-image-transport + +RUN apt-get install --yes python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential + +WORKDIR /root/catkin_ws/src + +{% if SOURCE.startwith("git+") %} +RUN git clone https://github.com/ros-drivers/video_stream_opencv.git +{% else %} +COPY {{SOURCE}} ./ +{% endif %} + +WORKDIR /root/catkin_ws +RUN /bin/bash -c "source /opt/ros/noetic/setup.bash && rosdep init" +RUN /bin/bash -c "source /opt/ros/noetic/setup.bash && rosdep update" +RUN /bin/bash -c "source /opt/ros/noetic/setup.bash && rosdep install --from-paths src -y" +RUN /bin/bash -c "source /opt/ros/noetic/setup.bash && catkin_make" +RUN /bin/bash -c "source /opt/ros/noetic/setup.bash && catkin_make install" + +# # Stage 2: Runtime Stage +# FROM git.spirirobotics.com/spiri/services-ros1-core:main +# +# # Copy only the built artifacts from the previous stage +# COPY --from=builder /root/catkin_ws/devel /root/catkin_ws/devel + +# Set the working directory +WORKDIR /root/catkin_ws + + +RUN apt-get clean +HEALTHCHECK {{HEALTHCHECK}} + +# Command to run your application +CMD {{RUN_COMMAND}} +