ci:tweak - packages #285
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: CI | |
on: | |
push: | |
branches: ["ci", "dev", "build*", "implementation*"] | |
# pull_request: | |
# branches: [ "main" ] | |
env: | |
TZ: 'Asia/Tokyo' | |
DATE: $(TZ='Asia/Tokyo' date '+%Y-%m-%d') | |
DATETIME: $(TZ='Asia/Tokyo' date '+%Y-%m-%d-%H-%M-%S') | |
REGISTRY: ghcr.io | |
IMAGE_NAME: ${{ github.repository }} | |
IMAGE_AUTOMATION_TEST: automation-test | |
IMAGE_PHP: php-latest | |
IMAGE_PHP_BETA: php-beta | |
IMAGE_PUPPETEER: puppeteer-latest | |
IMAGE_REDIS: redis-latest | |
IMAGE_UBUNTU: ubuntu-latest | |
DOCKERFILE_PHP: ./php/latest.Dockerfile | |
DOCKERFILE_PHP_BETA: ./php/beta.Dockerfile | |
DOCKERFILE_PUPPETEER: ./puppeteer/latest.Dockerfile | |
DOCKERFILE_REDIS: ./database/redis/latest.Dockerfile | |
DOCKERFILE_UBUNTU: ./ubuntu/latest.Dockerfile | |
jobs: | |
# job inspect-code | |
inspect-code: | |
name: 'Inspect' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
fetch-depth: 2 | |
- name: Set up Node.js | |
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Install dependencies | |
run: npm ci | |
env: | |
TEST: true | |
- name: Check code | |
run: ls -all | |
# job manual, workflow manual | |
manual: | |
name: 'Manual' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
fetch-depth: 2 | |
- name: Set up Node.js | |
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Install dependencies | |
run: npm ci | |
env: | |
TEST: true | |
- name: Check code | |
run: ls -all | |
# job automation, workflow automation | |
automation: | |
name: 'Automation' | |
runs-on: ubuntu-latest | |
environment: CI | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
fetch-depth: 2 | |
- name: Set up Node.js | |
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Install dependencies | |
run: npm ci | |
env: | |
TEST: true | |
- name: Check code | |
run: | | |
ls -all;pwd;whoami; | |
- name: Set up date and time variable | |
run: | | |
echo "DATE_TIME=$(TZ='Asia/Tokyo' date '+%Y-%m-%d-%H-%M-%S')" >> $GITHUB_ENV | |
- name: Output date and time | |
run: | | |
echo "GLOBAL ENV DATETIME: ${{ env.DATETIME }}" | |
echo "LOCAL ENV DATE_TIME: ${{ env.DATE_TIME }}" | |
echo "type=raw,enable=true,value=${{ env.IMAGE_AUTOMATION_TEST }}-${{ env.DATETIME }}" | |
- name: Log in to Docker Hub # https://github.com/docker/login-action | |
# uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Log in to the Container registry # https://github.com/docker/login-action | |
# uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Extract metadata (tags, labels) for Docker # https://github.com/docker/metadata-action | |
id: meta | |
# uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 # using hash | |
uses: docker/metadata-action@v5 | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
tags: | | |
type=schedule,enable=true,prefix=${{ env.IMAGE_AUTOMATION_TEST }}-,pattern={{date 'YYYYMMDD-hhmmss' tz='Asia/Tokyo'}} | |
type=raw,enable=true,value=${{ env.IMAGE_AUTOMATION_TEST }}-${{ env.DATETIME }} | |
type=ref,enable=true,priority=600,prefix=${{ env.IMAGE_AUTOMATION_TEST }}-,event=branch | |
type=ref,enable=true,priority=600,prefix=${{ env.IMAGE_AUTOMATION_TEST }}-,event=pr | |
type=semver,enable=true,pattern={{raw}} # TODO release only | |
type=sha,enable=true | |
# OS | |
# Ubuntu - manual build and test | |
# job build ubuntu latest manual | |
build-ubuntu-latest-manual: | |
name: '[Manual] Build Ubuntu latest' | |
needs: manual | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Output date and time | |
run: | | |
ls -all;pwd;whoami; | |
echo "Date and Time: ${{ env.DATETIME }}" | |
- name: Test build | |
run: | | |
#docker login --username ${{ github.actor }} --password ${{ secrets.GITHUB_PAT }} ghcr.io | |
docker login --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} ghcr.io | |
docker build . --file ${{ env.DOCKERFILE_UBUNTU }} --tag "lecaoquochung/docker-images:ubuntu-latest-${{ env.DATETIME }}" | |
docker images | |
# docker tag "lecaoquochung/docker-images:ubuntu-latest-${{ env.DATETIME }}" "ghcr.io/lecaoquochung/docker-images:ubuntu-latest-${{ env.DATETIME }}" | |
# docker push "lecaoquochung/docker-images:ubuntu-latest-${{ env.DATETIME }}" | |
- name: ubuntu-lastest | |
run: | | |
# docker build . --file ./ubuntu/latest.Dockerfile --tag "ubuntu-latest:$(date +%Y-%m-%d-%H:%M:%S)" | |
# docker login --username lecaoquochung --password ${{ secrets.GITHUB_TOKEN }} ghcr.io | |
docker login --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} ghcr.io | |
docker build . --file ./ubuntu/latest.Dockerfile --tag "ghcr.io/lecaoquochung/docker-images:ubuntu-latest-${{ env.DATETIME }}" | |
docker images | |
# docker push ubuntu-latest:${{ env.DATETIME }} | |
# docker push ghcr.io/lecaoquochung/ubuntu-latest:${{ env.DATETIME }} | |
# Ubuntu - automation build and push | |
# type=ref,enable=true,priority=600,prefix=${{ env.IMAGE_UBUNTU }}-,event=branch | |
# type=ref,enable=true,priority=600,prefix=${{ env.IMAGE_UBUNTU }}-,event=pr | |
# type=schedule,pattern={{date 'YYYYMMDD-hhmmss' tz='Asia/Tokyo'}} | |
# type=semver,pattern={{raw}} # TODO release only | |
# type=sha # TODO release only | |
build-ubuntu-latest: | |
name: '[Auto] Build Ubuntu latest' | |
needs: automation | |
runs-on: ubuntu-latest | |
environment: CI | |
permissions: | |
packages: write | |
contents: read | |
attestations: write | |
id-token: write | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Log in to Docker Hub # https://github.com/docker/login-action | |
# uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Log in to the Container registry # https://github.com/docker/login-action | |
# uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Extract metadata (tags, labels) for Docker # https://github.com/docker/metadata-action | |
id: meta | |
# uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 # using hash | |
uses: docker/metadata-action@v5 | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
tags: | | |
type=raw,enable=true,value=${{ env.IMAGE_UBUNTU }}-build | |
- name: Build and push Docker images # https://github.com/docker/build-push-action | |
id: push | |
# uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671 | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ${{ env.DOCKERFILE_UBUNTU }} | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
- name: Generate artifact attestation | |
uses: actions/attest-build-provenance@v2 | |
with: | |
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} | |
subject-digest: ${{ steps.push.outputs.digest }} | |
push-to-registry: false | |
# MacOS | |
# https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md | |
build-macos-latest-manual: | |
name: '[Manual] Build MacOS latest' | |
needs: manual | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build-in dependencies | |
working-directory: ./swift | |
run: | | |
env | |
ls -all | |
sw_vers -productName | |
sw_vers -productVersion | |
sw_vers -buildVersion | |
pip list | |
npm --version | |
swift --version | |
swift package init --name HelloWorld --type executable | |
ls -all | |
cat Package.swift | |
cat Sources/main.swift | |
# cat /Tests/HelloWorldTests.swift | |
- name: Build | |
working-directory: ./swift | |
run: swift build -v | |
- name: Run tests | |
working-directory: ./swift | |
run: | | |
ls -all | |
# swift test -v | |
# INFO: https://github.com/lecaoquochung/docker-images/pull/5/files#r1775196802 | |
# Windows | |
# https://github.com/actions/runner-images/blob/main/images/windows/Windows2022-Readme.md | |
build-windows-latest-manual: | |
name: '[Manual] Build Windows latest' | |
needs: manual | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v4 | |
# Setup Node.js | |
# https://github.com/lecaoquochung/docker-images/pull/5/files#r1775196810 | |
# - name: Setup Node.js | |
# uses: actions/setup-node@v3 | |
# with: | |
# node-version: '14' # Or your preferred version | |
# Windows build-in dependencies | |
- name: Build-in dependencies | |
shell: pwsh | |
run: | | |
env | |
ls # no -all | |
systeminfo | findstr /B /C:"OS Name" /B /C:"OS Version" | |
systeminfo | |
# Powsershell | |
$env:Path | |
Get-ChildItem | |
Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsBuildNumber | |
Get-Acl | |
Get-Command | |
Get-Package | |
Get-Process | |
# QA | |
# Build Ubuntu for QA | |
build-ubuntu-qa-manual: | |
name: '[Manual] Build Ubuntu QA' | |
needs: manual | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: ubuntu-qa | |
run: docker build . --file ./ubuntu/qa.Dockerfile --tag "ubuntu-qa:$(date +%s)" | |
build-ubuntu-noble-manual: | |
name: '[Manual] Build Ubuntu Noble' | |
needs: manual | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: ubuntu-noble | |
run: docker build . --file ./ubuntu/noble.Dockerfile --tag "ubuntu-noble:$(date +%s)" | |
build-qa-scala-manual: | |
name: '[Manual] Build QA Scala' | |
needs: manual | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: qa-scala | |
run: docker build . --file ./qa/build/scala.Dockerfile --tag "qa-scals:$(date +%s)" | |
# PROGRAMMING LANGUAGE | |
# Build latest PHP version | |
# job build php latest manual | |
build-php-latest-manual: | |
name: '[Manual] Build PHP latest' | |
needs: manual | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: php-fpm | |
run: docker build . --file ${{ env.DOCKERFILE_PHP }} --tag "php:$(date +%s)" | |
# job build php latest automation | |
# type=ref,enable=true,priority=600,prefix=${{ env.IMAGE_PHP }}-,event=branch | |
# type=ref,enable=true,priority=600,prefix=${{ env.IMAGE_PHP }}-,event=pr | |
build-php-latest: | |
name: '[Auto] Build PHP latest' | |
needs: automation | |
runs-on: ubuntu-latest | |
environment: CI | |
permissions: | |
packages: write | |
contents: read | |
attestations: write | |
id-token: write | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Log in to the Container registry | |
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Extract metadata (tags, labels) for Docker # https://github.com/docker/metadata-action | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
tags: | | |
type=raw,enable=true,value=${{ env.IMAGE_PHP }}-build | |
- name: Build and push Docker images | |
id: push | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ${{ env.DOCKERFILE_PHP }} | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
- name: Generate artifact attestation | |
uses: actions/attest-build-provenance@v2 | |
with: | |
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} | |
subject-digest: ${{ steps.push.outputs.digest }} | |
push-to-registry: false | |
# job build php beta manual | |
# docker build . --file ${{ env.DOCKERFILE_PHP_BETA }} --tag "php:$(date +%s)" | |
# docker run -d --name php_container "php:$(date +%s)" | |
build-php-beta-manual: | |
name: '[Manual] Build PHP beta' | |
needs: manual | |
runs-on: ubuntu-latest | |
environment: CI | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Log in to the Container registry | |
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build Docker image | |
run: | | |
docker build --help | |
docker build . --file ${{ env.DOCKERFILE_PHP_BETA }} --tag "${{ env.IMAGE_PHP_BETA }}-${{ env.DATE }}" | |
- name: Start Docker container | |
run: | | |
docker images | |
docker run --help | |
docker run -d --name php_container "${{ env.IMAGE_PHP_BETA }}-${{ env.DATE }}" | |
- name: Verify build | |
run: docker exec php_container cat /etc/os-release | |
# job build php beta | |
# type=ref,enable=true,priority=600,prefix=${{ env.IMAGE_PHP_BETA }}-,event=branch | |
# type=ref,enable=true,priority=600,prefix=${{ env.IMAGE_PHP_BETA }}-,event=pr | |
build-php-beta: | |
name: '[Auto] Build PHP beta' | |
needs: automation | |
runs-on: ubuntu-latest | |
environment: CI | |
permissions: | |
packages: write | |
contents: read | |
attestations: write | |
id-token: write | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Log in to the Container registry | |
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Extract metadata (tags, labels) for Docker # https://github.com/docker/metadata-action | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
tags: | | |
type=raw,enable=true,value=${{ env.IMAGE_PHP_BETA }}-build | |
- name: Build and push Docker images | |
id: push | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ${{ env.DOCKERFILE_PHP_BETA }} | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
- name: Generate artifact attestation | |
uses: actions/attest-build-provenance@v2 | |
with: | |
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} | |
subject-digest: ${{ steps.push.outputs.digest }} | |
push-to-registry: false | |
# Build latest SCALA version | |
build-scala-latest-manual: | |
name: '[Manual] Build Scala latest' | |
needs: manual | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: scala-latest | |
run: docker build . --file ./scala/build/latest.Dockerfile --tag "scala-latest:$(date +%s)" | |
build-scala-bionic-manual: | |
name: '[Manual] Build Scala bionic' | |
needs: manual | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: scala-bionic | |
run: docker build . --file ./scala/build/bionic.Dockerfile --tag "scala-bionic:$(date +%s)" | |
# Deprecated - v2024.4.1 | |
# build-scala-mantic: | |
# runs-on: ubuntu-latest | |
# steps: | |
# - uses: actions/checkout@v4 | |
# - name: scala-mantic | |
# run: docker build . --file ./scala/build/mantic.Dockerfile --tag "scala-mantic:$(date +%s)" | |
# Build maintenance SCALA version | |
build-scala-maintenance-manual: | |
name: '[Manual] Build Scala maintenance' | |
needs: manual | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: scala-maintenance | |
run: docker build . --file ./scala/build/maintenance.Dockerfile --tag "scala-maintenance:$(date +%s)" | |
# APPLICATIONS | |
# Build latest JENKINS version | |
build-jenkins-latest-manual: | |
name: '[Manual] Build Jenkins latest' | |
needs: manual | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: jenkins-latest | |
run: docker build . --file ./jenkins/latest.Dockerfile --tag "jenkins-latest:$(date +%s)" | |
# PUPPETEER | |
# Build latest PUPPETEER version | |
build-puppeteer-latest-manual: | |
name: '[Manual] Build Puppeteer latest' | |
needs: manual | |
runs-on: ubuntu-latest | |
environment: CI | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Log in to the Container registry | |
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build Docker image | |
run: | | |
docker build . --file ${{ env.DOCKERFILE_PUPPETEER }} --tag "${{ env.IMAGE_PUPPETEER }}-${{ env.DATE }}" | |
- name: Start Docker container | |
run: | | |
docker images | |
docker run -d --name puppeteer-me "${{ env.IMAGE_PUPPETEER }}-${{ env.DATE }}" | |
- name: Verify build container | |
run: | | |
docker ps -a | |
docker exec puppeteer-me cat /etc/os-release | |
- name: Verify Puppeteer | |
run: | | |
docker ps | grep puppeteer-me || (echo "puppeteer-me container is not running" && exit 1) | |
docker exec puppeteer-me ls -all || (echo "Failed to list files" && exit 1) | |
# docker exec puppeteer-me npx puppeteer --version || (echo "Failed to get Puppeteer version" && exit 1) | |
# job build puppeteer latest automation | |
# type=schedule,enable=true,prefix=${{ env.IMAGE_PUPPETEER }}-,pattern={{date 'YYYYMMDD-hhmmss' tz='Asia/Tokyo'}} | |
build-puppeteer-latest: | |
name: '[Auto] Build Puppeteer latest' | |
needs: automation | |
runs-on: ubuntu-latest | |
environment: CI | |
permissions: | |
packages: write | |
contents: read | |
attestations: write | |
id-token: write | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Log in to the Container registry | |
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Extract metadata (tags, labels) for Docker # https://github.com/docker/metadata-action | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
tags: | | |
type=raw,enable=true,value=${{ env.IMAGE_PUPPETEER }}-build | |
- name: Build and push Docker images | |
id: push | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ${{ env.DOCKERFILE_PUPPETEER }} | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
- name: Generate artifact attestation | |
uses: actions/attest-build-provenance@v2 | |
with: | |
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} | |
subject-digest: ${{ steps.push.outputs.digest }} | |
push-to-registry: false | |
# REDIS | |
# Build latest REDIS version | |
# job build redis latest manual | |
build-redis-latest-manual: | |
name: '[Manual] Build Redis latest' | |
needs: manual | |
runs-on: ubuntu-latest | |
environment: CI | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Log in to the Container registry | |
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build Docker image | |
run: | | |
docker build . --file ${{ env.DOCKERFILE_REDIS }} --tag "${{ env.IMAGE_REDIS }}-${{ env.DATE }}" | |
- name: Start Docker container | |
run: | | |
docker images | |
docker run -d --name redis-me "${{ env.IMAGE_REDIS }}-${{ env.DATE }}" | |
- name: Verify build container | |
run: | | |
docker ps -a | |
docker exec redis-me cat /etc/os-release | |
- name: Verify Redis coonnection | |
run: | | |
docker exec redis-me redis-cli --version || exit 1 | |
docker exec redis-me redis-cli PING || exit 1 | |
docker exec redis-me redis-cli INFO || exit 1 | |
docker exec redis-me redis-cli SET "key" "Hello, Docker Image Redis!" || exit 1 | |
docker exec redis-me redis-cli GET "key" || exit 1 | |
# job build redis latest automation | |
# type=ref,enable=true,priority=600,prefix=${{ env.IMAGE_REDIS }}-,event=branch | |
# type=ref,enable=true,priority=600,prefix=${{ env.IMAGE_REDIS }}-,event=pr | |
build-redis-latest: | |
name: '[Auto] Build Redis latest' | |
needs: automation | |
runs-on: ubuntu-latest | |
environment: CI | |
permissions: | |
packages: write | |
contents: read | |
attestations: write | |
id-token: write | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Log in to the Container registry | |
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Extract metadata (tags, labels) for Docker # https://github.com/docker/metadata-action | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
tags: | | |
type=raw,enable=true,value=${{ env.IMAGE_REDIS }}-build | |
- name: Build and push Docker images | |
id: push | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ${{ env.DOCKERFILE_REDIS }} | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
- name: Generate artifact attestation | |
uses: actions/attest-build-provenance@v2 | |
with: | |
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} | |
subject-digest: ${{ steps.push.outputs.digest }} | |
push-to-registry: false | |
# TEST | |
# API TEST WITH POSTMAN | |
# MacOS: curl -sL https://dl-cli.pstmn.io/install/osx_64.sh | bash | |
# https://cloudy-shadow-800513.postman.co/workspace/lecaoquochung~885e6b40-0422-488c-8ab6-2f85ee3179ca/api/1512548b-2196-422a-8a3c-b8d374f227f9?action=share&creator=15804725&active-environment=15804725-addaf00d-1d92-4909-9256-0fa91ac840ac | |
test-postman: | |
name: '[Test] Postman' | |
needs: build-ubuntu-latest | |
runs-on: ubuntu-latest | |
environment: CI | |
steps: | |
- uses: actions/checkout@v4 | |
- name: ENV | |
run: | | |
env | |
- name: Environment variables | |
run: | | |
echo "Github environment indirect : " "$CONTACT_VAR" | |
echo "Github environment direct : " ${{ vars.CONTACT }} | |
env: | |
CONTACT_VAR: ${{ vars.CONTACT }} | |
- name: Install Postman CLI | |
run: | | |
curl -o- "https://dl-cli.pstmn.io/install/linux64.sh" | sh | |
- name: Login to Postman CLI | |
run: postman login --with-api-key ${{ secrets.POSTMAN_API_KEY }} | |
- name: Run API tests - Postman | |
run: | | |
postman collection run "15804725-1deca745-1604-4657-9f7e-353bdf2adac7" -e "15804725-addaf00d-1d92-4909-9256-0fa91ac840ac" --integration-id "168584-${{ github.run_id }}" | |
# API TEST WITH NEWMAN | |
# https://github.com/lecaoquochung/docker-images/issues/21 | |
# Test Commit | |
# Config update | |
test-newman: | |
name: '[Test] Newman' | |
needs: build-ubuntu-latest | |
runs-on: ubuntu-latest | |
environment: CI | |
steps: | |
- uses: actions/checkout@v4 | |
- name: ENV | |
run: | | |
env | |
- name: Environment variables | |
run: | | |
echo "Github environment indirect : $CONTACT_VAR" | |
echo "Github environment direct : " ${{ vars.CONTACT }} | |
env: | |
CONTACT_VAR: ${{ vars.CONTACT }} | |
- name: Install Newman CLI | |
run: | | |
npm install -g newman | |
npm update -g newman | |
newman --version | |
- name: Run API tests - Newman - Collection Cloud (Shared JSON) | |
run: | | |
newman run https://api.postman.com/collections/15804725-2460c2a8-98d1-434d-9412-c7a0ab130f8e?access_key=${{ vars.POSTMAN_ACCESS_KEY_ME }} -e ./postman/SAMPLE.postman_environment.json | |
- name: Run API tests - Newman - Collection JSON (Export) | |
run: | | |
newman run ./postman/ME.postman_collection.json -e ./postman/SAMPLE.postman_environment.json | |
# REDASH SETUP | |
test-redash-setup: | |
name: '[Test] Redash Setup' | |
needs: build-ubuntu-latest | |
runs-on: ubuntu-latest | |
environment: CI | |
steps: | |
- uses: actions/checkout@v4 | |
- name: ENV | |
run: | | |
env | |
- name: Environment variables | |
run: | | |
echo "Github environment indirect : $CONTACT_VAR" | |
echo "Github environment direct : " ${{ vars.CONTACT }} | |
env: | |
CONTACT_VAR: ${{ vars.CONTACT }} | |
- name: Checkout Redash setup | |
uses: actions/checkout@master | |
with: | |
repository: getredash/setup | |
- name: Dependencies | |
run: | | |
sudo apt-get update | |
sudo apt install -y pwgen | |
pwgen 32 1 | |
- name: Run setup.sh script | |
run: | | |
ls -all | |
# cd setup | |
sudo ./setup.sh startup | |
sudo ./setup.sh | |
# REDASH SETUP MACOS | |
test-redash-setup-macos: | |
name: '[Test] Redash Setup MacOS' | |
needs: build-macos-latest-manual | |
runs-on: macos-latest | |
environment: CI | |
steps: | |
- uses: actions/checkout@v4 | |
- name: ENV | |
run: | | |
env | |
- name: Environment variables | |
run: | | |
echo "Github environment indirect : $CONTACT_VAR" | |
echo "Github environment direct : " ${{ vars.CONTACT }} | |
env: | |
CONTACT_VAR: ${{ vars.CONTACT }} | |
- name: Checkout Redash setup | |
uses: actions/checkout@master | |
with: | |
repository: getredash/setup | |
- name: Dependencies (*For Testing purpose only) | |
run: | | |
# Homebrew is pre-installed on GitHub-hosted macOS runners | |
# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" | |
brew install pwgen | |
pwgen 32 1 | |
- name: Run setup.sh script | |
run: | | |
ls -all | |
chmod +x ./setup.sh | |
./setup.sh startup || { echo "Redash startup failed"; exit 1; } | |
./setup.sh || { echo "Redash setup failed"; exit 1; } | |
# TEST REDASH DOCKER | |
test-redash-docker: | |
name: '[Test] Redash Docker' | |
needs: build-windows-latest-manual | |
runs-on: windows-latest | |
environment: CI | |
steps: | |
- uses: actions/checkout@v4 | |
- name: ENV | |
run: | | |
env | |
- name: Environment variables | |
run: | | |
echo "Github environment indirect : $CONTACT_VAR" | |
echo "Github environment direct : " ${{ vars.CONTACT }} | |
env: | |
CONTACT_VAR: ${{ vars.CONTACT }} | |
- name: Run docker-compose up | |
working-directory: ./redash | |
run: | | |
cp env .env | |
docker --version | |
docker compose --version | |
docker compose up -d | |
docker compose ps | |
docker compose logs | |
docker compose down | |
# Install docker-compose | |
# https://docs.docker.com/compose/install/standalone/#on-windows-server | |
# [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 | |
# Start-BitsTransfer -Source "https://github.com/docker/compose/releases/download/v2.29.6/docker-compose-windows-x86_64.exe" -Destination $Env:ProgramFiles\Docker\docker-compose.exe | |
# docker-compose --version | |
# Docker Compose alternative | |
# https://docs.docker.com/compose/gettingstarted/ | |
- name: Test Redash | |
working-directory: ./redash | |
run: | | |
# Init | |
docker compose run --rm redash-server create_db | |
# Should response | |
# [2024-09-29 02:43:15,704][PID:1][INFO][alembic.runtime.migration] Context impl PostgresqlImpl. | |
# [2024-09-29 02:43:15,704][PID:1][INFO][alembic.runtime.migration] Will assume transactional DDL. | |
# [2024-09-29 02:43:16,124][PID:1][INFO][alembic.runtime.migration] Running stamp_revision -> 89bc7873a3e0 | |
# NEED REPORT - Github Action Windows latest runner not supported | |
# no matching manifest for windows/amd64 10.0.20348 in the manifest list entries | |
# https://github.com/lecaoquochung/docker-images/actions/runs/11089568047/job/30810875892#step:6:25 | |
# Start | |
docker compose up -d | |
docker compose ps | |
docker compose logs | |
# should response | |
# docker-images-redash-worker | Starting RQ scheduler... | |
# docker-images-redash-server | [2024-09-29 02:43:27 +0000] [1] [INFO] Starting gunicorn 20.0.4 | |
# docker-images-redash-server | [2024-09-29 02:43:27 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1) | |
# Test | |
# Verify localhost:5500 response by curl | |
# npm install -g wait-on | |
# npx wait-on http://localhost:5500 -t 60000 -l | |
# curl http://localhost:5500 -vd | |
# TEST SCALA CODING | |
# job test scala coding | |
test-scala-coding: | |
name: '[Test] Scala Coding' | |
runs-on: ubuntu-latest | |
environment: CI | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up JDK 21 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '21' | |
distribution: 'temurin' | |
cache: 'sbt' | |
- name: Install sbt | |
run: | | |
echo "deb https://repo.scala-sbt.org/scalasbt/debian all main" | sudo tee /etc/apt/sources.list.d/sbt.list | |
echo "deb https://repo.scala-sbt.org/scalasbt/debian /" | sudo tee /etc/apt/sources.list.d/sbt_old.list | |
curl -sL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x99E82A75642AC823" | sudo apt-key add | |
sudo apt-get update | |
sudo apt-get install sbt | |
- name: Run tests | |
working-directory: ./scala/coding | |
run: | | |
sbt clean coverage test coverageReport | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN}} | |
with: | |
fail_ci_if_error: true | |
# job test redis connection | |
test-redis-connection-docker: | |
name: '[Test] Redis Docker Connection' | |
needs: build-redis-latest-manual | |
runs-on: ubuntu-latest | |
environment: CI | |
steps: | |
- name: Check out the repository | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
run: | | |
# install npm | |
sudo apt-get update | |
sudo apt-get install -y npm | |
npm install -g redis-cli | |
rdcli --version | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Set up Docker Compose | |
run: sudo apt-get update && sudo apt-get install -y docker-compose | |
- name: Run Docker Compose | |
run: docker-compose -f database/redis/test/connection/docker-compose.yml up -d | |
- name: Verify Docker Compose services | |
run: docker-compose -f database/redis/test/connection/docker-compose.yml ps | |
- name: Verify Redis connection | |
run: | | |
docker exec redis-test redis-cli PING || exit 1 | |
docker exec redis-test redis-cli SET test_key "Hello, Docker Redis!" || exit 1 | |
value=$(docker exec redis-test redis-cli GET test_key) | |
if [ "$value" != "Hello, Docker Redis!" ]; then | |
echo "Redis GET returned unexpected value: $value" | |
exit 1 | |
fi | |
docker logs redis-test | |