From a9a5c42c4d3af7fcc6d97745e8689aa2cd13dbe3 Mon Sep 17 00:00:00 2001
From: f <f@sutty.nl>
Date: Thu, 27 May 2021 17:37:41 -0300
Subject: [PATCH] compilar gemas

---
 .env.example |   3 +
 .gitignore   |   3 +
 LICENSE      | 168 +++++++++++++++++++++++++++++++++++++++++++++++++++
 Makefile     |  40 ++++++++++++
 README.md    |  28 +++++++++
 5 files changed, 242 insertions(+)
 create mode 100644 .env.example
 create mode 100644 .gitignore
 create mode 100644 LICENSE
 create mode 100644 Makefile
 create mode 100644 README.md

diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..7e015f8
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,3 @@
+ALPINE_VERSION=3.13
+HTTP_BASIC_USER=
+HTTP_BASIC_PASSWORD=
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..afc8b6a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+cache/
+gems/
+.env
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..80833c8
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,168 @@
+Copyright (c) 2019 Sutty
+
+The following license is modified from the MIT license and downloaded
+from <https://github.com/Laurelai/anti-fascist-mit-license> on
+2019-07-11.
+
+Anti-Fascist MIT License:
+
+The following conditions must be met by any person obtaining a copy of
+this software:
+
+- You MAY NOT be a fascist.
+- You MUST not financially support fascists.
+- You MUST not intentionally provide or knowingly provide through
+  inaction a platform for fascists to spread propaganda or organize.
+- You MUST not publicly voice support for fascists.
+- You MAY NOT be a member of any fascist organization, even if you are a
+  member to infiltrate for anti-fascist purposes.
+
+"Fascist" can be understood as any group or individual who promotes the
+political ideology of fascism.
+
+"Fascism" can be broken down into 11 ideological features as well as 8
+tactics that can form a fascist system in varying combinations, for the
+sake of simplicity and brevity the individual or organization in
+question must match to at least 5 features or tactics or a combination
+of the two determined by the individual licencer.
+
+Said licencer may provide a list if an individual or group matches to at
+least 5 features upon request from the individual or group in question.
+
+The ideological features are listed below.
+
+1. Hyper-nationalism.
+
+As defined as "The belief in the superiority of one's nation and of the
+paramount importance of advancing it."
+
+2. Militarism.
+
+As defined as "Advocating for an increase in military forces beyond what
+the real defense of a nation needs, more influence of the military upon
+the policies of the civilian government, and a preference for force as a
+solution over diplomacy for problems."
+
+3. Glorification of violence and readiness to use it in politics.
+
+As defined as "The belief that violence can be used to cleanse a
+tarnished nation, also by using violence to harm, intimidate or kill
+political oppoenents."
+
+4. Fetishization of youth.
+
+As defined as "Extolling the virtues of youth and making a special
+appeal to young people to join a cause or organization"
+
+5. Fetishization of masculinity.
+
+As defined as "Extolling the virtues of male authority or patriarchy and
+making a special appeal to men to be leaders of households and groups"
+
+6. Leader cult.
+
+As defined as "Creating an idealized, heroic, and worshipful image of a
+leader, often through unquestioning flattery and praise."
+
+7. Lost-golden-age syndrome.
+
+As defined as "Creating or promoting the idea that a nation had a lost
+or stolen golden age in the past that must be returned to"
+
+8. Self-definition by opposition.
+
+As defined as "Creating or promoting the idea that the group or
+individual is the only person or way who can fight real or imagined
+evils within a society."
+
+9. Mass mobilization and mass party.
+
+As defined as "Creating or promoting the creation of a populist group or
+party for the advancment of fascist tactics or features."
+
+10. Hierarchical party structure and tendency to purge the disloyal.
+
+As defined as "Removal of membership from a group for lacking absolute
+loyalty or lacking further usefulness to the group. Also having a
+hierarchical structure within the group itself."
+
+11. Theatricality.
+
+As defined as "Using spectacle to gain and keep the attention of those
+inside and outside of the group using speeches full of absolutes and or
+superlatives. Elaborate collective rituals (rallies) meant to reenforce
+loyalty within the group."
+
+Fascist tactics include
+
+1) Persecution of national minorities.
+2) Persecution of racial minorities.
+3) Persecution of religious minorities (Anti-Semitism, Islamophobia and others).
+4) Promotion of a type of national purity.
+5) Promotion of a state run by ideologically oriented corporate bodies.
+6) Persecution of gender or sexual minorities.
+7) Persecution of the disabled.
+8) Formation of extra-legal forces (brownshirts) to defend fascist values.
+
+Special criteria: Meeting only one point of the special criteria is
+enough to consider someone or a group to be fascist for the purposes of
+this licence.
+
+1. Promotion of any theories that state members of the jewish ethnicity
+   or faith control or largely control the world, finance, or other
+   global major power system.
+
+2. Denial of the holocaust or any other historically proven genocide.
+
+3. Promotion of ethnostates.
+
+4. Advocating for eugenics. Either positive or negative eugenics.
+   Promotion for the rights of abortion are not considered eugenics.
+
+5. Advocating for the removal of rights or legal protections from a
+   class or group of people.
+
+Former fascists: People or organizations who used to promote the
+political ideology of fascism but no longer do so must meet the
+following criterea to be able to use this software.
+
+1. Publicly disavow past fascist deeds and ideologies.
+
+2. Expose any and all known fascists former allies to the public.
+
+   A suggested route would be through the one peoples project
+   (onepeoplesproject.com).  If they can confirm you have done so that
+   will count as meeting condition two.
+
+3. Publicly destroy any and all fascist paraphenelia you have in your
+   posession including removal of tattoos and body markings
+   affiliated with fascist groups or gangs.
+
+ANTI-FASCIST-MIT LICENSE:
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+The above licence agreement conditions are met in full.
+
+The Anti-Fascist MIT License may only be used under the terms of the
+Anti-Fascist MIT License.
+
+Any modified versions of this software must also include the
+Anti-Fascist MIT Licence.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ec71315
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,40 @@
+SHELL := bash
+.DEFAULT_GOAL := help
+
+.env:
+	cp .env.example $@
+include .env
+
+ccache_dir ?= $(HOME)/.ccache
+gem_dir := .
+gem_cache_dir := $(gem_dir)/cache
+gem_binary_dir := $(gem_dir)/gems/$(ALPINE_VERSION)
+
+help: always ## Ayuda
+	@grep "^[^\t]\+:.*##" Makefile | sed -re "s/(.*):.*##(.*)/\1;\2/" | column -s ";" -t | sed -re "s/^([^ ]+) /\x1B[38;5;197m\1\x1B[0m/"
+
+%: ## Compila la gema (make puma v=5.3.0)
+	@test -n "$v" || echo "Falta la versión en el argumento v=" ; :
+	@test -n "$v" || exit 1
+	$(MAKE) $(gem_binary_dir)/$@-$(v)-x86_64-linux-musl.gem
+
+# Compila la gema si no existe
+$(gem_binary_dir)/%-x86_64-linux-musl.gem:
+	@echo "Compilando $*"
+	@test -n "$(HTTP_BASIC_USER)"     || echo "Agrega las credenciales en el archivo .env" ; :
+	@test -n "$(HTTP_BASIC_USER)"     || exit 1
+	@test -n "$(HTTP_BASIC_PASSWORD)" || echo "Agrega las credenciales en el archivo .env" ; :
+	@test -n "$(HTTP_BASIC_PASSWORD)" || exit 1
+	@echo "$(PATH)" | grep -q ccache  || "Instala ccache para acelerar la compilación"
+	@docker run \
+		-v $(shell realpath "$(gem_dir)"):/srv/gems \
+		-v $(shell realpath "$(ccache_dir)"):/home/builder/.ccache \
+		-e HTTP_BASIC_USER="$(HTTP_BASIC_USER)" \
+		-e HTTP_BASIC_PASSWORD="$(HTTP_BASIC_PASSWORD)" \
+		-e GEM=$(shell echo $(notdir $*) | sed -re "s/-[^-]+$$//") \
+		-e VERSION=$(shell echo $(notdir $*) | sed -re "s/.*-([^-]+)$$/\1/") \
+		-e JOBS=$(shell grep processor /proc/cpuinfo | wc -l) \
+		--rm -it \
+		sutty/gem-compiler:latest || echo "No se pudo compilar $*"
+
+.PHONY: always
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..3bbf1c0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# Compilar gemas
+
+Algunas gemas se vinculan con librerías binarias.  Para ahorrarnos los
+recursos y acelerar los tiempos de instalación, pre-compilamos las gemas
+usando gem-compiler y las distribuimos en nuestro propio repositorio de
+gemas: <https://gems.sutty.nl/>
+
+
+## Instalación
+
+Es necesario generar los siguientes contenedores:
+
+* [sutty/monit](https://0xacab.org/sutty/containers/monit)
+* [sutty/sdk](https://0xacab.org/sutty/containers/sdk)
+* [sutty/sdk-ruby](https://0xacab.org/sutty/containers/sdk-ruby)
+* [sutty/gem-compiler](https://0xacab.org/sutty/containers/gem-compiler)
+
+
+## Compilación
+
+Para compilar una gema, correr el comando `make GEMA v=VERSION` donde
+`GEMA` es el nombre y `VERSION` la versión, por ejemplo:
+
+```bash
+make puma v=5.3.1
+```
+
+Compila la gema puma versión 5.3.1 y la sube al repositorio de gemas.
