ADD: first version of project
This commit is contained in:
parent
b48b957b4f
commit
b3165878a5
45
CMakeLists.txt
Normal file
45
CMakeLists.txt
Normal file
@ -0,0 +1,45 @@
|
||||
# This file is part of the BuildIt software distribution (https://gitcloud.federationhq.de/byterazor/buildit)
|
||||
# Copyright (c) 2020 Dominik Meyer <dmeyer@federationhq.de>.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, version 3.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
cmake_minimum_required (VERSION 3.1 FATAL_ERROR)
|
||||
project (buildIt-server VERSION 0.1.0 LANGUAGES CXX)
|
||||
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules )
|
||||
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
|
||||
|
||||
include(doxygen)
|
||||
build_docs(PROCESS_DOXYFILE DOXYFILE_PATH "docs/Doxyfile.in" )
|
||||
|
||||
include(compdb)
|
||||
|
||||
# provide all source files for the server
|
||||
set(REPOBADGE_SOURCES
|
||||
include/repoBadge.hpp
|
||||
src/svg.hpp
|
||||
src/repoBadge.cpp
|
||||
)
|
||||
|
||||
add_library(repobadge STATIC ${REPOBADGE_SOURCES})
|
||||
target_include_directories(repobadge
|
||||
PUBLIC
|
||||
include
|
||||
PRIVATE
|
||||
src
|
||||
)
|
||||
|
||||
add_executable(badge src/main.cpp)
|
||||
target_link_libraries(badge repobadge)
|
23
docs/Doxyfile.in
Normal file
23
docs/Doxyfile.in
Normal file
@ -0,0 +1,23 @@
|
||||
DOXYFILE_ENCODING = UTF-8
|
||||
PROJECT_NAME = @PROJECT_NAME@
|
||||
PROJECT_NUMBER = "@GIT_BRANCH@ @GIT_COMMIT_HASH@"
|
||||
PROJECT_BRIEF = "library and executable for generating repository badges"
|
||||
OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@/doxygen/
|
||||
OUTPUT_LANGUAGE = English
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
TAB_SIZE = 4
|
||||
MARKDOWN_SUPPORT = YES
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
INPUT = @CMAKE_CURRENT_SOURCE_DIR@/README.md @CMAKE_CURRENT_SOURCE_DIR@/src/ @CMAKE_CURRENT_SOURCE_DIR@/include
|
||||
INPUT_ENCODING = UTF-8
|
||||
FILE_PATTERNS = *.hpp *.cpp *.md
|
||||
USE_MDFILE_AS_MAINPAGE = README.md
|
||||
RECURSIVE = YES
|
106
include/repoBadge.hpp
Normal file
106
include/repoBadge.hpp
Normal file
@ -0,0 +1,106 @@
|
||||
#pragma once
|
||||
/*
|
||||
* This file is part of the BuildIt software distribution (https://gitea.federationhq.de/byterazor/repobadge)
|
||||
* Copyright (c) 2020 Dominik Meyer <dmeyer@federationhq.de>.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 3.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file */
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
/**
|
||||
* @brief namespace for all repoBadge related classes and datatypes
|
||||
*/
|
||||
namespace repoBadge
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief some default values for colors
|
||||
*/
|
||||
enum class BadgeColor
|
||||
{
|
||||
BLUE,
|
||||
BRIGHTGREEN,
|
||||
GREEN,
|
||||
LIGHTGREY,
|
||||
ORANGE,
|
||||
RED,
|
||||
YELLOW,
|
||||
YELLOWGREEN
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @brief class representing a repository badge
|
||||
*
|
||||
* a repository badge is used to highlight the build status of a repository,
|
||||
* the code coverage of the tests, or any other metric you can come up with
|
||||
* for your repository.
|
||||
*
|
||||
* a repository badge consist of a left part used for describing the metric
|
||||
* and a right part used as the value of the metric. The right part is
|
||||
* highlighted by a different background color.
|
||||
*/
|
||||
class Badge
|
||||
{
|
||||
private:
|
||||
/// the string used for the left part of the badge
|
||||
std::string left_;
|
||||
|
||||
/// the string used for the right part of the badge
|
||||
std::string right_;
|
||||
|
||||
/// the background color used for the right part of the badge
|
||||
std::string color_;
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* @brief create a badge with the default color BRIGHTGREEN
|
||||
*
|
||||
* @param left - the word used for the left part of the badge
|
||||
* @param right - the word used for the right part of the badge
|
||||
*/
|
||||
Badge(const std::string &left, const std::string &right) : Badge(left,right,BadgeColor::BRIGHTGREEN) {}
|
||||
|
||||
/**
|
||||
* @brief create a badge with the color given as a hex rgb string
|
||||
*
|
||||
* @param left - the word used for the left part of the badge
|
||||
* @param right - the word used for the right part of the badge
|
||||
* @param color - the background color used for the right part of the badge given in hex rgb (#007ec6)
|
||||
*/
|
||||
Badge(const std::string &left, const std::string &right,const std::string &color) : left_(left), right_(right), color_(color){};
|
||||
|
||||
/**
|
||||
* @brief create a badge with the color given as one of the default enums
|
||||
*
|
||||
* @param left - the word used for the left part of the badge
|
||||
* @param right - the word used for the right part of the badge
|
||||
* @param color - the background color used for the right part of the badge given ad an repoBadge::BadgeColor enum
|
||||
*/
|
||||
Badge(const std::string &left, const std::string &right, BadgeColor color);
|
||||
|
||||
/**
|
||||
* @brief create the svg file and return it as a string
|
||||
*
|
||||
* @return - the svg file
|
||||
*/
|
||||
std::string create();
|
||||
|
||||
|
||||
}; //
|
||||
|
||||
}; // namespace repoBadge
|
61
src/main.cpp
Normal file
61
src/main.cpp
Normal file
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* This file is part of the BuildIt software distribution (https://gitea.federationhq.de/byterazor/repobadge)
|
||||
* Copyright (c) 2020 Dominik Meyer <dmeyer@federationhq.de>.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 3.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <repoBadge.hpp>
|
||||
#include <iostream>
|
||||
|
||||
void usage(std::string name)
|
||||
{
|
||||
std::cout << "USAGE: " << name << " <left string> <right string> <color>" << std::endl;
|
||||
std::cout << " color is optional" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
|
||||
// check for help request
|
||||
if (argc == 2)
|
||||
{
|
||||
if (std::string(argv[1]) == "-h" || std::string(argv[1]) == "--help")
|
||||
{
|
||||
usage(argv[0]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (argc == 3)
|
||||
{
|
||||
std::string left(argv[1]);
|
||||
std::string right(argv[2]);
|
||||
repoBadge::Badge badge(left, right, repoBadge::BadgeColor::BRIGHTGREEN);
|
||||
std::cout << badge.create();
|
||||
}
|
||||
else if (argc == 4)
|
||||
{
|
||||
std::string left(argv[1]);
|
||||
std::string right(argv[2]);
|
||||
std::string color(argv[3]);
|
||||
repoBadge::Badge badge(left, right, color );
|
||||
std::cout << badge.create();
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "Error: parameter missing" << std::endl;
|
||||
usage(std::string(argv[0]));
|
||||
return 1;
|
||||
}
|
||||
|
||||
};
|
92
src/repoBadge.cpp
Normal file
92
src/repoBadge.cpp
Normal file
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* This file is part of the BuildIt software distribution (https://gitea.federationhq.de/byterazor/repobadge)
|
||||
* Copyright (c) 2020 Dominik Meyer <dmeyer@federationhq.de>.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 3.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file */
|
||||
#include <repoBadge.hpp>
|
||||
#include <sstream>
|
||||
|
||||
repoBadge::Badge::Badge(const std::string &left, const std::string &right, BadgeColor color) : left_(left), right_(right)
|
||||
{
|
||||
|
||||
switch(color)
|
||||
{
|
||||
case BadgeColor::BLUE:
|
||||
color_="#007ec6";
|
||||
break;
|
||||
case BadgeColor::BRIGHTGREEN:
|
||||
color_="#4c1";
|
||||
break;
|
||||
case BadgeColor::GREEN:
|
||||
color_="#97CA00";
|
||||
break;
|
||||
case BadgeColor::YELLOWGREEN:
|
||||
color_="#a4a61d";
|
||||
break;
|
||||
case BadgeColor::LIGHTGREY:
|
||||
color_="#9f9f9f";
|
||||
break;
|
||||
case BadgeColor::ORANGE:
|
||||
color_="#fe7d37";
|
||||
break;
|
||||
case BadgeColor::RED:
|
||||
color_="#e05d44";
|
||||
break;
|
||||
case BadgeColor::YELLOW:
|
||||
color_="#dfb317";
|
||||
break;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
std::string repoBadge::Badge::create()
|
||||
{
|
||||
std::stringstream stream;
|
||||
|
||||
// we use 82.5 pixes as the maxim character with for the used font-family
|
||||
// hopefully this will be enough
|
||||
int widthL = (82.5 * (float)left_.length())/ 11.0;
|
||||
int widthR = (82.5 * (float)right_.length())/ 11.0;
|
||||
int width = widthL + widthR + 20;
|
||||
|
||||
|
||||
/*
|
||||
* simple generation of the image
|
||||
*/
|
||||
stream << "<?xml version=\"1.0\"?>\n";
|
||||
stream << "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\""<<width<<"\" height=\"20\">\n";
|
||||
stream << "<linearGradient id=\"a\" x2=\"0\" y2=\"100%\">\n";
|
||||
stream << " <stop offset=\"0\" stop-color=\"#bbb\" stop-opacity=\".1\"/>\n";
|
||||
stream << " <stop offset=\"2\" stop-opacity=\".1\"/>\n";
|
||||
stream << "</linearGradient>\n";
|
||||
stream << "\n";
|
||||
stream << "<rect rx=\"3\" width=\""<<(widthL+10)<<"\" height=\"20\" fill=\"#555\"/> <!-- Comment -->\n";
|
||||
stream << "<rect rx=\"3\" x=\""<<(widthL+10)<<"\" width=\""<<(widthR+10)<<"\" height=\"20\" fill=\""<<color_<<"\"/>\n";
|
||||
stream << "\n";
|
||||
stream << "<path fill=\""<<color_<<"\" d=\"M"<<widthL+10-2 << " 0h4v20h-4z\"/>\n";
|
||||
stream << "<rect rx=\"3\" width=\""<<width<<"\" height=\"20\" fill=\"url(#a)\"/>\n";
|
||||
stream << "<g fill=\"#fff\" text-anchor=\"middle\" font-family=\"DejaVu Sans,Verdana,Geneva,sans-serif\" font-size=\"11\">\n";
|
||||
stream << " <text x=\""<< (widthL+10)/2 <<"\" y=\"15\" fill=\"#010101\" fill-opacity=\".3\">"<<left_<<"</text>\n";
|
||||
stream << " <text x=\""<< (widthL+10)/2 <<"\" y=\"14\">"<<left_<<"</text>\n";
|
||||
stream << " <text x=\""<< (widthL+10) + ((widthR+10)/2) << "\" y=\"15\" fill=\"#010101\" fill-opacity=\".3\">"<<right_<<"</text>\n";
|
||||
stream << " <text x=\""<< (widthL+10) + ((widthR+10)/2) << "\" y=\"14\">"<<right_<<"</text>\n";
|
||||
stream << "</g>\n";
|
||||
stream << "</svg>\n";
|
||||
|
||||
|
||||
return stream.str();
|
||||
}
|
Loading…
Reference in New Issue
Block a user