WIP #7
Workflow file for this run
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: Skyetel | |
on: push | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: skyetel | |
outputs: | |
matrix: ${{ steps.set-deployment-matrix.outputs.matrix }} | |
matrixLength: ${{ steps.set-deployment-matrix.outputs.matrixLength }} | |
packageMatrix: ${{ steps.set-deployment-matrix.outputs.packageMatrix }} | |
release: ${{ steps.set-deployment-matrix.outputs.deploy }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
env: | |
BUNDLE_FROZEN: false | |
with: | |
working-directory: skyetel | |
bundler-cache: true | |
- name: Run the tests | |
run: bundle exec rake | |
- name: Set Deployment Matrix | |
id: set-deployment-matrix | |
run: | | |
branchName=$(echo '${{ github.ref }}' | sed 's,refs/heads/,,g') | |
matrixSource=$(cat << EOF | |
[ | |
{ | |
"environment": "staging", | |
"branch": "develop", | |
"image_tag": "beta", | |
"release": false | |
}, | |
{ | |
"environment": "production", | |
"branch": "main", | |
"image_tag": "latest", | |
"release": true | |
} | |
] | |
EOF | |
) | |
matrix=$(echo $matrixSource | jq --arg branchName "$branchName" 'map(. | select((.branch==$branchName)) )') | |
echo "matrix={\"include\":$(echo $matrix)}" >> $GITHUB_OUTPUT | |
echo "matrixLength=$(echo $matrix | jq length)" >> $GITHUB_OUTPUT | |
echo "packageMatrix={\"platform\":[\"amd64\",\"arm64\"],\"include\":$(echo $matrix)}" >> $GITHUB_OUTPUT | |
echo "release=$(echo $matrix | jq '.[0].release')" >> $GITHUB_OUTPUT | |
release: | |
name: Release | |
runs-on: ubuntu-latest | |
if: needs.build.outputs.release == 'true' | |
outputs: | |
release_created: ${{ steps.release-please.outputs.release_created }} | |
release_tag: ${{ steps.release-please.outputs.tag_name }} | |
needs: | |
- build | |
strategy: | |
matrix: ${{fromJSON(needs.build.outputs.packageMatrix)}} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- uses: googleapis/release-please-action@v4 | |
id: release-please | |
with: | |
token: ${{ secrets.SOMLENG_PERSONAL_ACCESS_TOKEN }} | |
build-packages: | |
name: Build Packages | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
- release | |
if: ${{ needs.release.outputs.release_created }} | |
strategy: | |
matrix: ${{fromJSON(needs.build.outputs.packageMatrix)}} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build Packages | |
run: | | |
docker buildx build --output type=local,dest=build --platform linux/${{ matrix.platform }} . | |
upload-packages: | |
name: Upload Packages | |
runs-on: ubuntu-latest | |
needs: | |
- build-packages | |
- release | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Extract metadata (tags, labels) for Docker | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
ghcr.io/somleng/somleng-skyetel | |
tags: | | |
# set latest tag for main branch | |
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }} | |
type=raw,value=${{ needs.release.outputs.release_tag }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build and push Docker image | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
push: true | |
platforms: linux/amd64 | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} |