diff --git a/.github/workflows/emails.yml b/.github/workflows/emails.yml
new file mode 100644
index 0000000000..e7791f5585
--- /dev/null
+++ b/.github/workflows/emails.yml
@@ -0,0 +1,39 @@
+name: emails
+
+on: [push, pull_request]
+
+jobs:
+ bugzilla:
+ runs-on: ubuntu-latest
+ steps:
+
+ - uses: nrwl/last-successful-commit-action@v1
+ id: last_successful_commit
+ with:
+ branch: 'dev'
+ workflow_id: 'emails.yml'
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Checkout compare ref
+ uses: actions/checkout@v2
+ with:
+ ref: ${{ steps.last_successful_commit.outputs.commit_hash }}
+
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - uses: actions/setup-python@v3
+ with:
+ python-version: '3.x'
+
+ - name: Get changed files
+ id: changed-files
+ uses: tj-actions/changed-files@v18.6
+ with:
+ base_sha: ${{ steps.last_successful_commit.outputs.commit_hash }}
+ files: |
+ **/metadata.xml
+
+ - name: Check Emails against bugzilla
+ run: |
+ python ./scripts/email-checker.py ${{ steps.changed-files.outputs.all_changed_files }}
diff --git a/app-metrics/scaphandre/scaphandre-0.4.1.ebuild b/app-metrics/scaphandre/scaphandre-0.4.1.ebuild
index a551256cfa..9752431d68 100644
--- a/app-metrics/scaphandre/scaphandre-0.4.1.ebuild
+++ b/app-metrics/scaphandre/scaphandre-0.4.1.ebuild
@@ -206,7 +206,8 @@ DESCRIPTION="Electrical power consumption measurement agent."
# does not provide this value so instead repository is used
HOMEPAGE="https://github.com/hubblo-org/scaphandre"
SRC_URI="https://github.com/hubblo-org/${PN}/archive/refs/tags/v${PV}.zip -> ${P}.zip $(cargo_crate_uris ${CRATES})"
-RESTRICT="mirror"
+# restricting test because '/proc/modules' does not appear to be present in the CI
+RESTRICT="mirror test"
# License set may be more restrictive as OR is not respected
# use cargo-license for a more accurate license picture
LICENSE="Apache-2.0 Apache-2.0 ISC MIT MPL-2.0 Unlicense"
diff --git a/dev-python/retworkx/retworkx-0.11.0.ebuild b/dev-python/retworkx/retworkx-0.11.0.ebuild
index c941326a3d..107fcce5fc 100644
--- a/dev-python/retworkx/retworkx-0.11.0.ebuild
+++ b/dev-python/retworkx/retworkx-0.11.0.ebuild
@@ -99,6 +99,9 @@ RDEPEND=">=dev-python/numpy-1.16.0"
distutils_enable_tests pytest
+# Libraries built with rust do not use CFLAGS and LDFLAGS.
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/retworkx/retworkx.*\\.so"
+
python_test() {
# We have to hide the source code directory so tests
# do not use these, but instead the compiled library.
diff --git a/games-fps/assaultcube/Manifest b/games-fps/assaultcube/Manifest
new file mode 100644
index 0000000000..9fdccef2a5
--- /dev/null
+++ b/games-fps/assaultcube/Manifest
@@ -0,0 +1 @@
+DIST assaultcube-1.3.0.2.tar.gz 51034819 BLAKE2B 61800ed2d7cec797af3bc683a7439d4e8b6dda453bdee4e3f331ab43c973c6d754aacc2e38f4f5535d991c1e755800bc6d178994500f7785a41053d399296756 SHA512 8488c399036532859f7c83d094ac1443c52aa6367d106cc5889b80353ff1d501f7b8ae3b51e34b03215cc88dacc5f29488635047ce90291c601f8f7582498685
diff --git a/games-fps/assaultcube/assaultcube-1.3.0.2.ebuild b/games-fps/assaultcube/assaultcube-1.3.0.2.ebuild
new file mode 100644
index 0000000000..a4af1076ea
--- /dev/null
+++ b/games-fps/assaultcube/assaultcube-1.3.0.2.ebuild
@@ -0,0 +1,54 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit desktop xdg-utils
+
+DESCRIPTION="Free multiplayer FPS based on the Cube engine"
+HOMEPAGE="https://assault.cubers.net/"
+SRC_URI="https://github.com/assaultcube/AC/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/AC-${PV}"
+LICENSE="ZLIB assaultcube"
+SLOT="0"
+KEYWORDS="~amd64"
+RDEPEND="sys-libs/zlib media-libs/libsdl2 media-libs/sdl2-image x11-libs/libX11 media-libs/libogg media-libs/libvorbis media-libs/openal"
+DEPEND="${RDEPEND}"
+BDEPEND="sys-devel/clang"
+
+src_prepare() {
+ eapply_user
+ sed -i 's|//#define PRODUCTION|#define PRODUCTION|' "${S}/source/src/cube.h"
+ rm -rf "${S}/source/include"
+}
+
+src_compile() {
+ cd "${S}/source/src"
+ emake
+}
+
+src_install() {
+ cd "${S}/source/src"
+ emake install
+
+ install -dm755 "${D}/usr/share/assaultcube"
+ install -Dm755 "${S}"/{assaultcube.sh,check_install.sh,server.sh,server_wizard.sh} -t "${D}/usr/share/assaultcube"
+ install -Dm755 "${S}/bin_unix/native_client" -t "${D}/usr/share/assaultcube/bin_unix"
+ cp -r "${S}"/{bot,config,demos,docs,mods,packages} "${D}/usr/share/assaultcube/"
+ install -Dm644 "${S}"/{CONTRIBUTING.md,GOVERNANCE.md,README.{html,md},SECURITY.md} -t "${D}/usr/share/assaultcube"
+
+ make_desktop_entry \
+ "/usr/share/assaultcube/assaultcube.sh %u" \
+ AssaultCube \
+ /usr/share/assaultcube/packages/misc/icon.png \
+ Game \
+ "Keywords=assaultcube;game;fps;\nMimeType=x-scheme-handler/assaultcube"
+}
+
+pkg_postinst() {
+ xdg_desktop_database_update
+}
+
+pkg_postrm() {
+ xdg_desktop_database_update
+}
diff --git a/games-fps/assaultcube/metadata.xml b/games-fps/assaultcube/metadata.xml
new file mode 100644
index 0000000000..62988a0d4f
--- /dev/null
+++ b/games-fps/assaultcube/metadata.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ duje.mihanovic@skole.hr
+ Duje Mihanović
+
+
diff --git a/licenses/assaultcube b/licenses/assaultcube
new file mode 100644
index 0000000000..8ee6f033de
--- /dev/null
+++ b/licenses/assaultcube
@@ -0,0 +1,2 @@
+AssaultCube's licensing is very specific, please take a look at:
+https://assault.cubers.net/docs/license.html
diff --git a/scripts/email-checker.py b/scripts/email-checker.py
new file mode 100755
index 0000000000..2b6e93a1de
--- /dev/null
+++ b/scripts/email-checker.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python3
+
+from http.client import HTTPSConnection
+import json
+import sys
+from typing import Dict, Iterator, NamedTuple
+from urllib.parse import quote_plus
+import xml.etree.ElementTree as ET
+
+
+class Maintainer(NamedTuple):
+ name: str
+ email: str
+
+ def check_details(self, client: HTTPSConnection):
+ try:
+ client.request("GET", f"/rest/user?names={quote_plus(self.email)}")
+ resp = client.getresponse()
+ resp.read()
+ return resp.status == 200
+ except:
+ return False
+
+
+def read_all_maintainers(files: Iterator[str]) -> Iterator[Maintainer]:
+ for file in files:
+ try:
+ tree = ET.parse(file)
+ for maintainer in tree.findall('./maintainer'):
+ values = {child.tag: child.text for child in maintainer}
+ yield Maintainer(name=values.get('name', ''), email=values.get('email', ''))
+ except FileNotFoundError:
+ print(file, 'not found')
+
+
+def check_maintainers(maintainers: Iterator[Maintainer]) -> Iterator[Maintainer]:
+ try:
+ client = HTTPSConnection('bugs.gentoo.org')
+ for m in maintainers:
+ if m.check_details(client):
+ print(f'\033[92m\u2713 {m.name} <{m.email}>\033[0m')
+ else:
+ print(f'\033[91m\u2717 {m.name} <{m.email}>\033[0m')
+ yield m
+ finally:
+ client.close()
+
+
+if __name__ == '__main__':
+ missing_maintainers = len(tuple(check_maintainers(set(read_all_maintainers(sys.argv[1:])))))
+ sys.exit(int(missing_maintainers != 0))
diff --git a/sys-auth/pam-gnupg/Manifest b/sys-auth/pam-gnupg/Manifest
new file mode 100644
index 0000000000..cb4d9fd284
--- /dev/null
+++ b/sys-auth/pam-gnupg/Manifest
@@ -0,0 +1 @@
+DIST v0.3.tar.gz 20827 BLAKE2B 3973ffceec48105c28f368c14c879f9c1cae1676a5f5134c49249b3db8877418c2e9ac7937a6cacb3c5c2089be9a6e03c96e1988ecb029756c2f404674b9126c SHA512 5ee9af0f2e0d32680d6bc5e5b55ce46b86f01ff47b364a34484a6522035c96b8556c65d3d834ff711fb158ec4f1edbd48a1fea883641dedcbebd40074dc2fc5f
diff --git a/sys-auth/pam-gnupg/metadata.xml b/sys-auth/pam-gnupg/metadata.xml
new file mode 100644
index 0000000000..62988a0d4f
--- /dev/null
+++ b/sys-auth/pam-gnupg/metadata.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ duje.mihanovic@skole.hr
+ Duje Mihanović
+
+
diff --git a/sys-auth/pam-gnupg/pam-gnupg-0.3.ebuild b/sys-auth/pam-gnupg/pam-gnupg-0.3.ebuild
new file mode 100644
index 0000000000..2d892a1c10
--- /dev/null
+++ b/sys-auth/pam-gnupg/pam-gnupg-0.3.ebuild
@@ -0,0 +1,27 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="Unlock GnuPG keys on login"
+HOMEPAGE="https://github.com/cruegge/pam-gnupg"
+SRC_URI="https://github.com/cruegge/pam-gnupg/archive/refs/tags/v${PV}.tar.gz"
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64"
+RDEPEND="
+>=sys-libs/pam-1.5.1_p20210622-r1
+>=app-crypt/gnupg-2.2.33-r1
+"
+
+src_configure() {
+ eautoreconf
+ ./configure \
+ --host=${CHOST} \
+ --prefix=/usr \
+ --infodir=/usr/share/info \
+ --with-moduledir=/$(get_libdir)/security \
+ --mandir=/usr/share/man || die
+}