Create and Publish Docker Image #99
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Create and Publish Docker Image | |
on: | |
schedule: | |
- cron: '0 0 * * *' | |
workflow_dispatch: | |
push: | |
branches: [ "master" ] | |
paths: | |
- 'Dockerfile' | |
pull_request: | |
types: | |
- closed | |
branches: [ "master" ] | |
paths: | |
- 'Dockerfile' | |
env: | |
REGISTRY: ghcr.io | |
IMAGE_NAME: ${{ github.repository }}/siepic_klayout | |
jobs: | |
build-and-push-image: | |
runs-on: ubuntu-latest | |
permissions: | |
#contents: read | |
packages: write | |
steps: | |
- name: Debug GitHub Token | |
run: | | |
echo "GitHub Token: ${{ secrets.GITHUB_TOKEN }}" | |
- name: Check pull request was merged | |
if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == false | |
run: | | |
echo "Error: Pull request is not merged." | |
exit 1 | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: install jq | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install jq -y | |
# docker image always built with latest version | |
- name: get latest version of siepic ebeam pdk | |
id: ebeampdk | |
run: | | |
EBEAM_PDK=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ | |
"https://api.github.com/repos/SiEPIC/SiEPIC_EBeam_PDK/releases/latest" \ | |
| jq -r .tag_name) | |
echo "EBEAM_PDK=$EBEAM_PDK" >> $GITHUB_ENV | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
#docker image always built with latest version | |
- name: get latest version of siepic tools | |
id: siepictools | |
run: | | |
SIEPIC_TOOLS=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ | |
"https://api.github.com/repos/SiEPIC/SiEPIC-Tools/releases/latest" \ | |
| jq -r .tag_name) | |
echo "SIEPIC_TOOLS=$SIEPIC_TOOLS" >> $GITHUB_ENV | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Update ReadME version table | |
run: | | |
start_table="<!-- start-table -->" | |
end_table="<!-- end-table -->" | |
# read current table and check if it needs to be updated with a new version | |
table_content=$(sed -n "/$start_table/,/$end_table/p" README.md) | |
table_ebeam_pdk=$(echo "$table_content" | awk -F'|' 'NR==3 {gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2}') | |
table_siepic_tools=$(echo "$table_content" | awk -F'|' 'NR==4 {gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2}') | |
# change to !=, keep as == for testing | |
if [ "$table_ebeam_pdk" == "$EBEAM_PDK" ] || [ "$table_siepic_tools" == "$SIEPIC_TOOLS" ]; then | |
echo "Update version table Ebeam PDK to $EBEAM_PDK and SiEPIC Tools to $SIEPIC_TOOLS" | |
# remove current URL | |
sed -i "/$start_table/,/$end_table/d" README.md | |
# set table variable | |
TABLE=$(cat <<-EOF | |
| Tool | Version | | |
| -------------------- | --------------- | | |
| SiEPIC EBeam PDK | $(echo "${{ steps.ebeampdk.outputs.ebeampdk }}") | | |
| SiEPIC Tools | $(echo "${{ steps.siepictools.outputs.siepictools }}") | | |
| KLayout | 0.28.13 | | |
| Python | `<python>` | | |
EOF | |
) | |
# add new URL | |
printf "$start_table\n$TABLE\n$end_table\n" >> README.md | |
else | |
echo "No updates needed to version table" | |
fi | |
- name: commit and push changes to README | |
run: | | |
git diff | |
git config --local user.email "${{ github.actor }}@users.noreply.github.com" | |
git config --local user.name "${{ github.actor }}" | |
git add README.md | |
git commit -m "update README version table" | |
git push origin version-table | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Log in to the container registry | |
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 | |
with: | |
registry: ${{ env.REGISTRY }} | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Extract metadata (tags, labels) for Docker | |
id: meta | |
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
- name: Build and push Docker image as latest image | |
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 | |
with: | |
context: . | |
push: true | |
tags: ${{ steps.meta.outputs.tags }}-latest | |
labels: ${{ steps.meta.outputs.labels }} | |
# note that the order is siepic_ebeam_pdk and then siepic_tools for version numbers in the tag | |
- name: Build and push Docker image as unique image | |
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 | |
with: | |
context: . | |
push: true | |
tags: "${{ steps.meta.outputs.tags }}.${{ env.EBEAM_PDK }}.${{ env.SIEPIC_TOOLS }}" | |
labels: ${{ steps.meta.outputs.labels }} | |