reusable-app-build-image.yml 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. name: Reusable build app container image workflow
  2. on:
  3. workflow_call:
  4. inputs:
  5. tag-version:
  6. type: string
  7. default: latest
  8. secrets:
  9. AWS_ROLE_TO_ASSUME_FOR_OIDC:
  10. required: true
  11. DOCKER_REGISTRY_PASSWORD:
  12. required: true
  13. DOCKER_REGISTRY_ON_GITHUB_PASSWORD:
  14. required: true
  15. jobs:
  16. build-image:
  17. runs-on: ubuntu-latest
  18. # These permissions are needed to interact with GitHub's OIDC Token endpoint.
  19. permissions:
  20. id-token: write
  21. contents: write
  22. strategy:
  23. matrix:
  24. platform: [amd64, arm64]
  25. steps:
  26. - uses: actions/checkout@v3
  27. - name: Configure AWS Credentials
  28. uses: aws-actions/configure-aws-credentials@v1
  29. with:
  30. aws-region: ap-northeast-1
  31. role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME_FOR_OIDC }}
  32. role-session-name: SessionForReleaseGROWI-RC
  33. - name: Run CodeBuild
  34. uses: aws-actions/aws-codebuild-run-build@v1
  35. with:
  36. project-name: growi-official-image-builder
  37. buildspec-override: packages/app/docker/codebuild/buildspec/image.yml
  38. image-override: ${{ (matrix.platform == 'amd64' && 'aws/codebuild/standard:6.0') || 'aws/codebuild/amazonlinux2-aarch64-standard:2.0' }}
  39. environment-type-override: ${{ (matrix.platform == 'amd64' && 'LINUX_CONTAINER') || 'ARM_CONTAINER' }}
  40. env-vars-for-codebuild: |
  41. TAG_VERSION,
  42. TAG_SUFFIX
  43. env:
  44. TAG_VERSION: ${{ inputs.tag-version }}
  45. TAG_SUFFIX: ${{ matrix.platform }}
  46. create-manifest:
  47. needs: [build-image]
  48. runs-on: ubuntu-latest
  49. strategy:
  50. matrix:
  51. # registry: [docker.io, ghcr.io]
  52. registry: [docker.io]
  53. steps:
  54. - uses: actions/checkout@v3
  55. - name: Retrieve information from package.json
  56. uses: myrotvorets/info-from-package-json-action@1.2.0
  57. id: package-json
  58. - name: Docker meta for base-image
  59. id: meta-base-image
  60. uses: docker/metadata-action@v4
  61. with:
  62. images: ${{ matrix.registry }}/weseek/growi-codebuild-test
  63. sep-tags: ','
  64. tags: |
  65. type=raw,value=${{ steps.package-json.outputs.packageVersion }}
  66. type=raw,value=${{ steps.package-json.outputs.packageVersion }}.{{sha}}
  67. - name: Docker meta for extra-images
  68. id: meta-extra-images
  69. uses: docker/metadata-action@v4
  70. with:
  71. images: ${{ matrix.registry }}/weseek/growi-codebuild-test
  72. sep-tags: ','
  73. tags: |
  74. type=raw,value=${{ inputs.tag-version }}-amd64
  75. type=raw,value=${{ inputs.tag-version }}-arm64
  76. - name: Login to Container Registry
  77. uses: docker/login-action@v2
  78. with:
  79. registry: ${{ matrix.registry }}
  80. username: wsmoogle
  81. password: ${{ (startsWith(matrix.registry, 'docker') && secrets.DOCKER_REGISTRY_PASSWORD) || secrets.DOCKER_REGISTRY_ON_GITHUB_PASSWORD }}
  82. - name: Create and push manifest images for ${{ matrix.registry }}
  83. uses: Noelware/docker-manifest-action@master
  84. with:
  85. base-image: ${{ steps.meta-base-image.outputs.tags }}
  86. extra-images: ${{ steps.meta-extra-images.outputs.tags }}
  87. push: true