Skip to content

Commit

Permalink
ci: Create multi architecture image (#31)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tiryoh authored Jan 3, 2022
1 parent 34ee17a commit a110268
Showing 1 changed file with 66 additions and 10 deletions.
76 changes: 66 additions & 10 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
strategy:
fail-fast: false
matrix:
ros-distro: [melodic, melodic-arm64, noetic, noetic-arm64]
ros-distro: [melodic-amd64, melodic-arm64, noetic-amd64, noetic-arm64]
experimental: [false]
include:
- ros-distro: noetic-testing
Expand All @@ -36,7 +36,7 @@ jobs:
env:
DOCKER_TAGNAME: ${{ matrix.ros-distro }}
run: |
cd $DOCKER_TAGNAME && docker build -t $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME .
cd ${DOCKER_TAGNAME%-amd64} && docker build -t $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME .
- name: Login to ghcr.io
uses: docker/login-action@v1
Expand All @@ -60,23 +60,19 @@ jobs:
# ghcr.io
docker tag $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME ghcr.io/$DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME
docker tag $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME ghcr.io/$DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME-$TIMESTAMP
docker tag $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME ghcr.io/$DOCKER_USERNAME/$DOCKER_IMAGENAME:${DOCKER_TAGNAME%-amd64}-$TIMESTAMP
docker push ghcr.io/$DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME
docker push ghcr.io/$DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME-$TIMESTAMP
docker push ghcr.io/$DOCKER_USERNAME/$DOCKER_IMAGENAME:${DOCKER_TAGNAME%-amd64}-$TIMESTAMP
# docker.io
docker push $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME
docker tag $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME-$TIMESTAMP
docker push $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME-$TIMESTAMP
docker tag $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME $DOCKER_USERNAME/$DOCKER_IMAGENAME:${DOCKER_TAGNAME%-amd64}-$TIMESTAMP
docker push $DOCKER_USERNAME/$DOCKER_IMAGENAME:${DOCKER_TAGNAME%-amd64}-$TIMESTAMP
echo ::set-output name=timestamp::$TIMESTAMP
echo ::set-output name=digest::$(docker inspect --format='{{index .RepoDigests 0}}' $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME-$TIMESTAMP)
- name: Publish docker image as latest
if: contains(matrix.ros-distro, 'noetic') == true
env:
DOCKER_TAGNAME: ${{ matrix.ros-distro }}
run: |
docker tag $DOCKER_USERNAME/$DOCKER_IMAGENAME:$DOCKER_TAGNAME $DOCKER_USERNAME/$DOCKER_IMAGENAME:latest
docker push $DOCKER_USERNAME/$DOCKER_IMAGENAME:latest
- name: Get Current Job Log URL
id: jobs
uses: Tiryoh/gha-jobid-action@v0
Expand Down Expand Up @@ -110,3 +106,63 @@ jobs:
git add ${{ matrix.ros-distro }}.md
git commit -m "Update ${{ matrix.ros-distro }}.md"
git fetch origin && git merge origin/master --no-edit && git push origin master
upload:
needs: [build-and-deploy]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ros-distro: [melodic, noetic]
steps:
- name: Prepare Docker
run: |
mkdir -p ~/.docker
grep -q '{' ~/.docker/config.json || echo '{}' | tee ~/.docker/config.json > /dev/null
jq '. |= .+ {"experimental": "enabled"}' ~/.docker/config.json > ~/docker-config.json && mv ~/docker-config.json ~/.docker/config.json
sudo service docker restart
- name: Login to ghcr.io
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Login to docker.io
uses: docker/login-action@v1
with:
username: ${{ env.DOCKER_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Prepare Docker Image
env:
ROS_DISTRO: ${{ matrix.ros-distro }}
run: |
docker pull ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-amd64
docker pull ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-arm64
docker pull ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-amd64
docker pull ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-arm64
- name: Publish Docker Image
env:
ROS_DISTRO: ${{ matrix.ros-distro }}
run: |
docker manifest create --amend ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO} ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-amd64 ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-arm64
docker manifest annotate ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO} ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-arm64 --arch arm64
docker manifest push ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}
docker manifest create --amend ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO} ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-amd64 ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-arm64
docker manifest annotate ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO} ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-arm64 --arch arm64
docker manifest push ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}
- name: Publish Docker Image as latest
if: contains(matrix.ros-distro, 'noetic') == true
env:
ROS_DISTRO: ${{ matrix.ros-distro }}
run: |
docker manifest create --amend ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:latest ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-amd64 ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-arm64
docker manifest annotate ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:latest ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-arm64 --arch arm64
docker manifest push ${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:latest
docker manifest create --amend ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:latest ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-amd64 ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-arm64
docker manifest annotate ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:latest ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:${ROS_DISTRO}-arm64 --arch arm64
docker manifest push ghcr.io/${DOCKER_USERNAME}/${DOCKER_IMAGENAME}:latest

0 comments on commit a110268

Please sign in to comment.