6 Commits

Author SHA1 Message Date
Christian Tosta
37ed5325a6 Added documentation 2025-05-20 01:20:45 -03:00
Christian Tosta
98f868287c Changed GH schedule
Runs at 1st and 15th day of each month at 4:30am
2025-05-20 01:20:45 -03:00
Christian Tosta
784af0a893 [CI/CD] Added GH Workflows
Signed-off-by: Leonardo Amaral <contato@leonardoamaral.com.br>
Co-authored-by: Leonardo Amaral <contato@leonardoamaral.com.br>
2025-05-20 01:20:45 -03:00
Christian Tosta
c54459693c Save version on file 2025-05-20 01:20:45 -03:00
Christian Tosta
33192b3bb5 CA PKI update tool autodetection (legacy/p11kit) 2025-05-20 01:20:45 -03:00
Christian Tosta
f3835684cf Initial import 2025-05-20 01:20:34 -03:00
8 changed files with 193 additions and 51 deletions

12
.copr/Makefile Normal file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/make
SHELL := bash
source:
dnf -y install cmake gcc gcc-c++
cmake --fresh -DBUILD_RPMS=ON -B build -S .
cmake --build build --target srpm
srpm: source
mkdir -p $(outdir)
cp dist/*.src.rpm $(outdir)

View File

@@ -2,14 +2,16 @@ name: Build and Release CI
on: on:
push: push:
schedule: schedule:
- cron: '30 3 * * *' - cron: '30 4 1,15 * *'
workflow_dispatch: workflow_dispatch:
jobs: jobs:
release-ci: release-ci:
runs-on: ubuntu-latest runs-on: ubuntu-latest
outputs: outputs:
VERSION: ${{ steps.get_metadata.outputs.VERSION }} version: ${{ steps.get_metadata.outputs.version }}
tag: ${{ steps.get_metadata.outputs.tag }}
to_release: ${{ steps.newtag.outputs.to_release }}
steps: steps:
- name: Local checkout - name: Local checkout
@@ -24,8 +26,8 @@ jobs:
id: get_metadata id: get_metadata
run: | run: |
cmake --fresh -B build -S . cmake --fresh -B build -S .
echo "TAG=v$(cat build/version)" >> $GITHUB_OUTPUT echo "tag=v$(cat build/version)" >> $GITHUB_OUTPUT
echo "VERSION=$(cat build/version)" >> $GITHUB_OUTPUT echo "version=$(cat build/version)" >> $GITHUB_OUTPUT
- name: Check if package version has corresponding git tag - name: Check if package version has corresponding git tag
id: tagged id: tagged
@@ -33,15 +35,17 @@ jobs:
run: | run: |
git show-ref \ git show-ref \
--tags --verify --quiet -- \ --tags --verify --quiet -- \
"refs/tags/${{ steps.get_metadata.outputs.TAG }}" \ "refs/tags/${{ steps.get_metadata.outputs.tag }}" \
&& echo tagged=1 >> $GITHUB_OUTPUT \ && echo tagged=1 >> $GITHUB_OUTPUT \
|| echo tagged=0 >> $GITHUB_OUTPUT || echo tagged=0 >> $GITHUB_OUTPUT
- name: Create new tag - name: Create new tag and set to_release
id: newtag
if: steps.tagged.outputs.tagged == 0 if: steps.tagged.outputs.tagged == 0
run: | run: |
git tag ${{ steps.get_metadata.outputs.TAG }} \ git tag ${{ steps.get_metadata.outputs.tag }} \
&& git push origin ${{ steps.get_metadata.outputs.TAG }} \ && echo to_release=1 >> $GITHUB_OUTPUT \
&& git push origin ${{ steps.get_metadata.outputs.tag }} \
|| exit 0 || exit 0
build-fedora: build-fedora:
@@ -49,4 +53,6 @@ jobs:
uses: ./.github/workflows/fedora.yml uses: ./.github/workflows/fedora.yml
with: with:
containers: "['fedora:latest', 'fedora:41']" containers: "['fedora:latest', 'fedora:41']"
version: ${{ needs.release-ci.outputs.VERSION }} version: ${{ needs.release-ci.outputs.version }}
to_release: ${{ needs.release-ci.outputs.to_release }}
tag: ${{ needs.release-ci.outputs.tag }}

View File

@@ -1,14 +1,24 @@
#name: build-rpm
on: on:
workflow_call: workflow_call:
inputs: inputs:
containers: containers:
required: true default: "['fedora:latest']"
type: string
version:
required: false required: false
type: string type: string
tag:
required: true
type: string
to_release:
default: "0"
required: false
type: string
version:
required: true
type: string
defaults:
run:
shell: bash
jobs: jobs:
build: build:
@@ -20,60 +30,41 @@ jobs:
container: ${{ matrix.image }} container: ${{ matrix.image }}
steps: steps:
- name: Local checkout - name: Prepare - local checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: install RPM build dependencies - name: Prepare - install build dependencies
run: | run: |
dnf -y install \ dnf -y install \
cmake \ cmake \
gcc \ gcc \
gcc-c++ \ gcc-c++ \
git \ git \
openssl \
rpm-build \ rpm-build \
rpmdevtools \ rpmdevtools \
tar tar
- name: Setup RPM build tree - name: Prepare - setup RPM build tree
run: | run: |
rpmdev-setuptree rpmdev-setuptree
- name: Create source tarball - name: Prepare - configure the source
run: | run: |
cmake --fresh -B build -S . cmake -B $(pwd)/build -S $(pwd)
cmake --build build --target sdist
- name: Set environment variables - name: Build - create source tarball and SRPM package
run: | run: |
echo "PKG_VERSION=$(cat build/version)" >> $GITHUB_ENV cmake --build $(pwd)/build --target srpm
echo "PKG_NAME=$(grep -Po 'Name:\ *\K[\S ]*' \
packaging/pkg.spec.in)" >> $GITHUB_ENV
- name: Copy SOURCES and SPEC file - name: Build - create RPM package
run: | run: |
cp packaging/pkg.spec.in ~/rpmbuild/SPECS/${PKG_NAME}.spec cmake --build $(pwd)/build --target rpms
rpmdev-bumpspec -n ${PKG_VERSION} ~/rpmbuild/SPECS/${PKG_NAME}.spec
cp dist/*.src.tar.gz ~/rpmbuild/SOURCES/
- name: Build RPM packages - name: Publish - create GitHub release
run: |
dnf -y builddep ~/rpmbuild/SPECS/${PKG_NAME}.spec
rpmbuild -ba ~/rpmbuild/SPECS/${PKG_NAME}.spec
- name: Check if package version has corresponding git tag
id: tagged
shell: bash
run: |
git show-ref \
--tags --verify --quiet -- \
"refs/tags/${NEW_TAG}" \
&& echo tagged=1 >> $GITHUB_OUTPUT \
|| echo tagged=0 >> $GITHUB_OUTPUT
- name: Create GitHub Release
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@v2
if: github.ref_type == 'tag' && steps.tagged.output.tagged == 1 if: inputs.to_release == 1
with: with:
tag_name: ${{ inputs.tag }}
files: | files: |
~/rpmbuild/RPMS/*/*.rpm dist/*.rpm
~/rpmbuild/SRPMS/*.rpm

View File

@@ -32,9 +32,15 @@ include(CPackLists.txt)
add_custom_target(clear-certs add_custom_target(clear-certs
COMMAND rm -rf COMMAND rm -rf
certs/ certs/
docs/
pki/ pki/
) )
add_custom_target(clear-docs
COMMAND rm -rf
docs/
)
add_custom_target(certs add_custom_target(certs
COMMAND xargs -n1 COMMAND xargs -n1
curl curl
@@ -44,10 +50,19 @@ add_custom_target(certs
&& cd certs && cd certs
&& (sha512sum -c --quiet ${HASH_FILE} || exit -1) && (sha512sum -c --quiet ${HASH_FILE} || exit -1)
&& unzip ACcompactado.zip && unzip ACcompactado.zip
&& rm -f ACcompactado.zip ${HASH_FILE}
DEPENDS DEPENDS
clear-certs clear-certs
) )
add_custom_target(docs ALL
COMMAND mkdir docs
&& mv certs/*.pdf docs/
DEPENDS
clear-docs
certs
)
add_custom_target(isrg-root-x2.crt add_custom_target(isrg-root-x2.crt
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/crt2bundle.sh COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/crt2bundle.sh
pki/ca-trust-source/anchors/isrg-root-x2.crt pki/ca-trust-source/anchors/isrg-root-x2.crt
@@ -82,6 +97,13 @@ add_custom_target(anchors ALL
icp-brasil-ca-bundle.crt icp-brasil-ca-bundle.crt
) )
# Checks for OpeSSL utility
find_program(OPENSSL
NAMES openssl openssl3
REQUIRED
)
message("-- Check for OpenSSL utility: ${OPENSSL}")
# Checks which tool is used to update certificate keyring # Checks which tool is used to update certificate keyring
find_program(UPDATE_CACERTS_TOOL find_program(UPDATE_CACERTS_TOOL
NAMES NAMES
@@ -110,4 +132,16 @@ install(
${CMAKE_INSTALL_PREFIX}/${CACERT_INSTALL_DIR} ${CMAKE_INSTALL_PREFIX}/${CACERT_INSTALL_DIR}
) )
set(DOCS_INSTALL_DIR "share/doc/${PROJECT}")
install(
FILES
${CMAKE_CURRENT_SOURCE_DIR}/LICENSE
${CMAKE_CURRENT_SOURCE_DIR}/README.md
${CMAKE_CURRENT_BINARY_DIR}/docs/cpsrootca.pdf
${CMAKE_CURRENT_BINARY_DIR}/docs/DPCacraiz.pdf
${CMAKE_CURRENT_BINARY_DIR}/docs/PSacraiz.pdf
DESTINATION
${CMAKE_INSTALL_PREFIX}/${DOCS_INSTALL_DIR}
)
# vim: ts=2:sw=2:sts=2:et # vim: ts=2:sw=2:sts=2:et

View File

@@ -6,6 +6,7 @@ set(CPACK_VERBATIM_VARIABLES YES)
set(SourceIgnoreFiles set(SourceIgnoreFiles
".cache" ".cache"
".copr"
".clang-format" ".clang-format"
".clangd" ".clangd"
".git/" ".git/"
@@ -59,12 +60,84 @@ configure_file(
@ONLY @ONLY
) )
if(BUILD_RPMS)
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/packaging/pkg.spec.in"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.spec"
@ONLY
IMMEDIATE
)
set(CPACK_GENERATOR "RPM")
set(CPACK_SOURCE_GENERATOR "RPM")
set(CPACK_RPM_USER_PACKAGE_SOURCES ON)
set(CPACK_RPM_USER_PACKAGE_SOURCE "${CPACK_OUTPUT_FILE_PREFIX}/${CPACK_SOURCE_PACKAGE_FILE_NAME}")
set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.spec")
endif()
include(CPack) include(CPack)
add_custom_target(build-rpms)
add_custom_target(no-build-rpms)
add_custom_command(
TARGET build-rpms
POST_BUILD
COMMAND "${CMAKE_COMMAND}"
-DBUILD_RPMS=ON
-B "${CMAKE_BINARY_DIR}"
-S "${CMAKE_SOURCE_DIR}"
VERBATIM
USES_TERMINAL
)
add_custom_command(
TARGET no-build-rpms
POST_BUILD
COMMAND "${CMAKE_COMMAND}"
-DBUILD_RPMS=OFF
-B "${CMAKE_BINARY_DIR}"
-S "${CMAKE_SOURCE_DIR}"
VERBATIM
USES_TERMINAL
)
add_custom_target(srpm
COMMAND "${CMAKE_COMMAND}"
--build "${CMAKE_BINARY_DIR}"
--target package_source
DEPENDS build-rpms
VERBATIM
USES_TERMINAL
)
add_custom_target(rpms
COMMAND rpmbuild
--rebuild
--define "_rpmdir ${CPACK_OUTPUT_FILE_PREFIX}"
"${CPACK_OUTPUT_FILE_PREFIX}/${PROJECT_NAME}-${PROJECT_VERSION}-?.fc??.src.rpm"
DEPENDS build-rpms srpm
VERBATIM
USES_TERMINAL
)
add_custom_command(
TARGET rpms
POST_BUILD
COMMAND /bin/sh -c "find \
\"${CPACK_OUTPUT_FILE_PREFIX}/\" \
-mindepth 2 -type f -exec mv {} \"${CPACK_OUTPUT_FILE_PREFIX}/\" \; \
&& find \"${CPACK_OUTPUT_FILE_PREFIX}\" \
-type d -empty -delete \
"
VERBATIM
USES_TERMINAL
)
add_custom_target(sdist add_custom_target(sdist
COMMAND "${CMAKE_COMMAND}" COMMAND "${CMAKE_COMMAND}"
--build "${CMAKE_BINARY_DIR}" --build "${CMAKE_BINARY_DIR}"
--target package_source --target package_source
DEPENDS no-build-rpms
VERBATIM VERBATIM
USES_TERMINAL USES_TERMINAL
) )
@@ -73,6 +146,7 @@ add_custom_target(bdist
COMMAND "${CMAKE_COMMAND}" COMMAND "${CMAKE_COMMAND}"
--build "${CMAKE_BINARY_DIR}" --build "${CMAKE_BINARY_DIR}"
--target package --target package
DEPENDS no-build-rpms
VERBATIM VERBATIM
USES_TERMINAL USES_TERMINAL
) )

View File

@@ -1,4 +1,5 @@
# ca-certificates-brazil # ca-certificates-brazil
---
The Brazilian Public Key Infrastructure: ICP-Brasil The Brazilian Public Key Infrastructure: ICP-Brasil
## Description ## Description
@@ -10,3 +11,18 @@ It is observed that the model adopted by Brazil was single-root certification,
and the ITI, in addition to playing the role of Root Certifying Authority - Root AC, and the ITI, in addition to playing the role of Root Certifying Authority - Root AC,
also has the role of accrediting and discrediting the other participants in the also has the role of accrediting and discrediting the other participants in the
chain, supervise and audit the processes. chain, supervise and audit the processes.
## Documentation
* [ICP-Brasil Root Certification Authority Certification Practices Statement (in Portuguese)](
https://acraiz.icpbrasil.gov.br/DPCacraiz.pdf
)
* [Certification Practice Statement Root Certification Authority of Brazil](
https://acraiz.icpbrasil.gov.br/cpsrootca.pdf
)
* [Política de Segurança da AC-Raiz](
https://acraiz.icpbrasil.gov.br/PSacraiz.pdf
)
These files may also have been distributed within the installation package provided
by your distribution.

View File

@@ -4,18 +4,21 @@
%define __openssl %{_bindir}/openssl %define __openssl %{_bindir}/openssl
Name: ca-certificates-brazil Name: ca-certificates-brazil
Version: __VERSION__ Version: @CPACK_PACKAGE_VERSION@
Release: %{autorelease} Release: %{autorelease}
Summary: The ICP-Brasil root certificate bundle Summary: The ICP-Brasil root certificate bundle
License: Public Domain License: Public Domain
URL: https://www.gov.br/iti/pt-br/assuntos/certificado-digital URL: https://www.gov.br/iti/pt-br/assuntos/certificado-digital
Source0: %{name}-%{version}.src.tar.gz Source0: %{name}-%{version}.tar.gz
BuildArch: noarch BuildArch: noarch
BuildRequires: %{__openssl} BuildRequires: %{__openssl}
BuildRequires: %{_bindir}/cmake
BuildRequires: %{_bindir}/mktemp BuildRequires: %{_bindir}/mktemp
BuildRequires: %{_bindir}/unzip BuildRequires: %{_bindir}/unzip
BuildRequires: gcc
BuildRequires: gcc-c++
%description %description
The Brazilian Public Key Infrastructure - ICP-Brasil is a hierarchical chain The Brazilian Public Key Infrastructure - ICP-Brasil is a hierarchical chain
@@ -28,7 +31,7 @@ also has the role of accrediting and discrediting the other participants in the
chain, supervise and audit the processes. chain, supervise and audit the processes.
%prep %prep
%autosetup -c %autosetup -n %{name}-%{version}.src
%{cmake} %{cmake}
%build %build
@@ -39,7 +42,10 @@ chain, supervise and audit the processes.
%{cmake_install} %{cmake_install}
%files %files
%doc %{_datadir}/doc/*.pdf
%doc %{_datadir}/doc/README.md
%license %{_datadir}/doc/LICENSE
%{_datadir}/pki/ca-trust-source/anchors/isrg-root-x2.crt %{_datadir}/pki/ca-trust-source/anchors/isrg-root-x2.crt
%{_datadir}/pki/ca-trust-source/anchors/lets-encrypt-ca-bundle.crt %{_datadir}/pki/ca-trust-source/anchors/lets-encrypt-ca-bundle.crt
%{_datadir}/pki/ca-trust-source/anchors/icp-brasil-ca-bundle.crt %{_datadir}/pki/ca-trust-source/anchors/icp-brasil-ca-bundle.crt

View File

@@ -5,3 +5,6 @@ https://letsencrypt.org/certs/lets-encrypt-e1.pem
https://letsencrypt.org/certs/lets-encrypt-e2.pem https://letsencrypt.org/certs/lets-encrypt-e2.pem
https://letsencrypt.org/certs/lets-encrypt-r3.pem https://letsencrypt.org/certs/lets-encrypt-r3.pem
https://letsencrypt.org/certs/lets-encrypt-r4.pem https://letsencrypt.org/certs/lets-encrypt-r4.pem
https://acraiz.icpbrasil.gov.br/DPCacraiz.pdf
https://acraiz.icpbrasil.gov.br/cpsrootca.pdf
https://acraiz.icpbrasil.gov.br/PSacraiz.pdf