Skip to content

Added account Factory + slight refactoring #139

Added account Factory + slight refactoring

Added account Factory + slight refactoring #139

Workflow file for this run

name: C++ CI
on:
push:
branches: [ '*' ] # NOTE: replace/update with appropriate branch name(s)
tags: [ '*' ]
pull_request:
types: [closed]
branches: [ '*' ] # NOTE: replace/update with appropriate branch name(s)
workflow_dispatch:
inputs:
build_type:
description: Build type
required: false
default: 'Debug'
type: choice
options:
- Debug
- Release
- RelWithDebInfo
- MinSizeRel
env:
BUILD_TYPE: ${{ inputs.build_type || 'Debug' }}
SRC_EXECUTABLE_NAME: "Password-Keeper-src"
TEST_EXECUTABLE_NAME: "Password-Keeper-Test-Runner"
INPUT_FILENAME: "tastatura.txt"
BIN_DIR: "bin" # update in cmake/Options.cmake:6 if changing name here
BUILD_DIR: "build"
EXT_DIR: "ext"
GEN_DIR: "generated"
DB_NAME: ${{ secrets.DB_NAME }}
DB_USER: ${{ secrets.DB_USER }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
DB_HOST: ${{ secrets.DB_HOST }}
DB_PORT: ${{ secrets.DB_PORT }}
defaults:
run:
# Use a bash shell, so we can use the same syntax for environment variable
# access regardless of the host operating system
# https://github.com/saxbophone/CPP20-Cross-Platform-Template
shell: bash
jobs:
cppcheck:
name: "Cppcheck"
# concurrency:
# group: "Cppcheck"
runs-on: ubuntu-22.04
timeout-minutes: 5
env:
# check https://github.com/danmar/cppcheck/releases for latest version
# NOTE: consider updating this value in scripts/build_cppcheck.sh:4 when changing this value
CPPCHECK_VER: "2.14.2"
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Run cppcheck
uses: ./.github/actions/cppcheck
clang-tidy:
name: "Clang-Tidy"
# concurrency:
# group: "Clang-Tidy"
runs-on: ubuntu-22.04
timeout-minutes: 5
env:
CLANG_VER: 18
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Run clang-tidy
uses: ./.github/actions/clang-tidy
build:
name: ${{ matrix.name }}
# concurrency:
# group: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
timeout-minutes: 15
permissions:
attestations: write
contents: write
id-token: write
env:
CC: ${{ matrix.c }}
CXX: ${{ matrix.cxx }}
VSCMD_SKIP_SENDTELEMETRY: 1
# NOTE: replace with another version if this one does not work
# For more versions, see https://winlibs.com or
# https://github.com/brechtsanders/winlibs_mingw/releases/
MINGW_VER: "13.3.0posix-11.0.1-msvcrt-r1/winlibs-x86_64-posix-seh-gcc-13.3.0-mingw-w64msvcrt-11.0.1-r1.7z"
# Example:
# MINGW_VER: "13.3.0posix-11.0.1-ucrt-r1/winlibs-x86_64-posix-seh-gcc-13.3.0-mingw-w64ucrt-11.0.1-r1.7z"
# MINGW_VER: "14.1.0posix-18.1.7-12.0.0-ucrt-r2/winlibs-x86_64-posix-seh-gcc-14.1.0-mingw-w64ucrt-12.0.0-r2.7z"
# MINGW_VER: "14.1.0posix-18.1.7-12.0.0-msvcrt-r2/winlibs-x86_64-posix-seh-gcc-14.1.0-mingw-w64msvcrt-12.0.0-r2.7z"
strategy:
fail-fast: false
matrix:
include:
# - os: ubuntu-22.04
# c: clang-18
# cxx: clang++-18
# clang_ver: "18"
# clang_ver_full: "18.1.8"
# name: "MSan: Ubuntu 22.04 Clang 18"
# cmake_flags: "-DUSE_MSAN=ON"
# cmake_generator: Ninja
# # This env runs memory sanitizers
# runs_msan: true
- os: ubuntu-22.04
c: gcc-12
cxx: g++-12
name: "ASan: Ubuntu 22.04 GCC 12"
cmake_flags: "-DUSE_ASAN=ON"
cmake_generator: Ninja
# This env runs address sanitizers
runs_asan: true
# this is used to add a suffix to the archive name since we use the same compiler version
asan_name: "-asan"
- os: ubuntu-22.04
c: gcc-12
cxx: g++-12
name: "Valgrind: Ubuntu 22.04 GCC 12"
# cmake_flags:
cmake_generator: Ninja
# This env runs valgrind
runs_valgrind: true
- os: macos-14
c: clang
cxx: clang++
name: "macOS 14 Apple Clang 15"
cmake_flags: "-DUSE_ASAN=OFF"
# cmake_generator:
# This env runs address sanitizers
runs_asan: false
- os: macos-14
c: gcc-13
cxx: g++-13
name: "macOS 14 GCC 13"
# cmake_flags:
# cmake_generator: Ninja
# - os: windows-2022
# c: cl
# cxx: cl
# name: "ASan: Windows 2022 MSVC 19.41"
# cmake_flags: "-DUSE_ASAN=ON"
# # Ninja is not faster on MSVC because... MSVC
# # cmake_generator: "Ninja"
# # cmake_generator: "Ninja Multi-Config"
# # This env runs address sanitizers
# runs_asan: true
- os: windows-2022
c: gcc
cxx: g++
name: "Windows 2022 MinGW GCC 13"
# cmake_flags:
cmake_generator: Ninja
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Install PostgreSQL
uses: ./.github/actions/install-postgres
- name: Set timestamp and zip name
run: |
echo "TIMESTAMP=$(date +%Y-%m-%d-%H-%M-%S)" >> ${GITHUB_ENV}
# use the full name as prefix: {user_name}_{repo_name} (replace / with _)
echo "ZIP_NAME=$(echo "${GITHUB_REPOSITORY}_${{ env.BUILD_TYPE }}_${{ matrix.os }}_${{ matrix.cxx }}${{ matrix.asan_name }}" | sed 's|/|_|')" >> ${GITHUB_ENV}
# or use only the repo name (github does not have a predefined environment variable for this)
# the regex splits by / and keeps everything after / without the / character
# echo "ZIP_NAME=$(echo "${GITHUB_REPOSITORY}_${{ env.BUILD_TYPE }}_${{ matrix.os }}_${{ matrix.cxx }}${{ matrix.asan_name }}" | sed -E 's|.+/(.+)|\1|')" >> ${GITHUB_ENV}
- name: Install packages
uses: ./.github/actions/install-packages
- name: Configure CMake
uses: ./.github/actions/configure-cmake
with:
custom_flags: ${{ matrix.cmake_flags }}
warnings_as_errors: 'ON'
- name: Build
run: |
bash ./scripts/cmake.sh build -t ${{ env.BUILD_TYPE }}
- name: Install
# Use CMake to "install" build artifacts (only interested in CMake registered targets) to our custom artifacts directory
run: |
bash ./scripts/cmake.sh install -i artifacts -t ${{ env.BUILD_TYPE }}
- name: Move artifacts
run: |
mkdir ${{ env.ZIP_NAME }}
mv artifacts/${{ env.BIN_DIR }}/* ${{ env.ZIP_NAME }}
ls -la ${{ env.ZIP_NAME }}
- name: Process artifacts
uses: ./.github/actions/process-artifacts
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ env.ZIP_NAME }}_${{ env.TIMESTAMP }}
path: ${{ env.ZIP_NAME }}
retention-days: 30
- name: Runtime checks
uses: ./.github/actions/runtime-checks
- name: Create release
uses: ./.github/actions/create-release
if: startsWith(github.ref, 'refs/tags/')
test:
name: "Test"
runs-on: ubuntu-latest
needs: build
timeout-minutes: 5
services:
postgres:
image: postgres:latest
env:
POSTGRES_USER: pipeline_test_user
POSTGRES_PASSWORD: pipeline_test_password
POSTGRES_DB: pipeline_test_password_keeper
options: >-
--health-cmd "pg_isready -U pipeline_test_user"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
env:
DB_HOST: localhost
DB_NAME: pipeline_test_password_keeper
DB_USER: pipeline_test_user
DB_PASSWORD: pipeline_test_password
DB_PORT: 5432
RUNS_TESTS: 1
steps:
- name: "Checkout code"
uses: actions/checkout@v4
- name: "Set up GCC"
run: sudo apt-get install -y build-essential gcc
- name: "Install dependencies"
run: |
sudo apt-get update
sudo apt-get install -y postgresql
- name: "Install CMake and Ninja"
run: |
sudo apt-get install -y cmake ninja-build
- name: "Build project"
run: |
cmake -S . -B build -G Ninja -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DRUN_TESTS=ON -DSKIP_BUILD_TEST=ON
cmake --build build
- name: "Postgres setup"
run: |
export PGPASSWORD=pipeline_test_password
psql -h localhost -U pipeline_test_user -d pipeline_test_password_keeper -c "CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
passwordSalt VARCHAR(150) NOT NULL,
passwordHash VARCHAR(150) NOT NULL
);"
- name: "Run tests"
env:
DB_HOST: ${{ env.DB_HOST }}
DB_NAME: ${{ env.DB_NAME }}
DB_USER: ${{ env.DB_USER }}
DB_PASSWORD: ${{ env.DB_PASSWORD }}
DB_PORT: ${{ env.DB_PORT }}
run: |
cd build
ctest --verbose --no-compress-output