Skip to content

Feature/backend/self implemented counter #215

Feature/backend/self implemented counter

Feature/backend/self implemented counter #215

name: Lint🌸, Test🧪 and Build🏗️ golang
on:
pull_request:
branches: ["develop"]
paths: [
"occupi-backend/cmd/**",
"occupi-backend/configs/**",
"occupi-backend/pkg/**",
"occupi-backend/.golangci.yml",
"occupi-backend/tests/**",
".github/workflows/lint-test-build-golang.yml"
]
workflow_dispatch:
defaults:
run:
working-directory: occupi-backend
jobs:
lint:
name: 🌸 Lint
runs-on: ubuntu-latest
steps:
- name: ⬇️ Checkout code
uses: actions/checkout@v4
- name: 🏗 Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.21' # Specify the Go version you are using
- name: 📦 Install golangci-lint
run: |
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
- name: 🌸 Run golangci-lint
run: |
golangci-lint run
test:
name: 🧪 Test
runs-on: ubuntu-latest
services:
mongo:
image: mongo:latest
ports:
- 27017:27017
options: >-
--health-cmd "mongosh --eval 'db.adminCommand({ping: 1})'"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: ⬇️ Checkout code
uses: actions/checkout@v4
- name: 📦 Install mongosh
run: |
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
sudo apt-get update
sudo apt-get install -y mongodb-mongosh
- name: ⌛ Wait for MongoDB to be ready
run: |
for i in {1..30}; do
if mongosh --eval 'db.adminCommand({ping: 1})' ${{ secrets.MONGO_DB_TEST_URL }}; then
echo "MongoDB is up"
break
fi
echo "Waiting for MongoDB to be ready..."
sleep 2
done
- name: 🏗 Create MongoDB User
env:
MONGO_INITDB_ROOT_USERNAME: ${{ secrets.MONGO_DB_TEST_USERNAME }}
MONGO_INITDB_ROOT_PASSWORD: ${{ secrets.MONGO_DB_TEST_PASSWORD }}
MONGO_INITDB_DATABASE: ${{ secrets.MONGO_DB_TEST_DB }}
run: |
mongosh ${{ secrets.MONGO_DB_TEST_URL }}/admin --eval "
db.createUser({
user: '${MONGO_INITDB_ROOT_USERNAME}',
pwd: '${MONGO_INITDB_ROOT_PASSWORD}',
roles: [
{ role: 'readWrite', db: '${MONGO_INITDB_DATABASE}' }
]
});
"
- name: 🏗 Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.21' # Specify the Go version you are using
- name: 🔓 Decrypt default variables
run: |
echo "${{ secrets.GPG_PASSPHRASE }}" | gpg --quiet --batch --yes --decrypt --passphrase-fd 0 configs/config.yaml.gpg > configs/config.yaml
- name: 🔓 Decrypt test variables
run: |
echo "${{ secrets.GPG_PASSPHRASE }}" | gpg --quiet --batch --yes --decrypt --passphrase-fd 0 configs/test.yaml.gpg > configs/test.yaml
- name: 📦 Install gotestsum
run: |
go install gotest.tools/gotestsum@latest
- name: 📂 Make tmptest-result dir
run: |
mkdir -p tmp/test-results
- name: 🧪 Run tests
run: |
gotestsum --format testname --junitfile tmp/test-results/gotestsum-report.xml -- -v -coverpkg=github.com/COS301-SE-2024/occupi/occupi-backend/pkg/analytics,github.com/COS301-SE-2024/occupi/occupi-backend/pkg/authenticator,github.com/COS301-SE-2024/occupi/occupi-backend/pkg/cache,github.com/COS301-SE-2024/occupi/occupi-backend/pkg/database,github.com/COS301-SE-2024/occupi/occupi-backend/pkg/middleware,github.com/COS301-SE-2024/occupi/occupi-backend/pkg/utils ./tests/... -coverprofile=coverage.out
- name: 📋 Upload coverage reports to Codecov
uses: codecov/[email protected]
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
verbose: true
- name: 📋 Upload test results to BuildPulse for flaky test detection 🚩
uses: buildpulse/buildpulse-action@main
with:
account: ${{ secrets.BUILDPULSE_ACCOUNT_ID }}
repository: ${{ secrets.BUILDPULSE_REPOSITORY_ID }}
path: |
tmp/test-results/gotestsum-report.xml
key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }}
secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }}
build:
name: 🏗️ Build
runs-on: ubuntu-latest
steps:
- name: ⬇️ Checkout code
uses: actions/checkout@v4
- name: 🏗 Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.21' # Specify the Go version you are using
- name: 🚀 Build the code
run: |
go build -v cmd/occupi-backend/main.go