Compare commits
21 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
8ef25a0720 |
|||
|
dfce12b156 |
|||
|
1992280022 |
|||
|
98cdbaef90 |
|||
|
3de726658f |
|||
|
fa9f3c490f |
|||
|
e16d9ed188 |
|||
|
5eddb8cec5 |
|||
|
7f5a418f28 |
|||
|
e80bf3abc3 |
|||
|
ce6b78d13e |
|||
|
66471df024 |
|||
|
feb4e93f03 |
|||
|
3f0a638266 |
|||
|
205902205f |
|||
| de845830ef | |||
|
b0c6a8e0f9 |
|||
|
31da556505 |
|||
| 83d99310a6 | |||
| 55deef8987 | |||
|
68c216c48a |
10 changed files with 211 additions and 29 deletions
75
.forgejo/workflows/release.yml
Normal file
75
.forgejo/workflows/release.yml
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
name: Release Workflow
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '*'
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
set-release-target:
|
||||
runs-on: docker
|
||||
outputs:
|
||||
release_cible: ${{ steps.setvar.outputs.release_cible }}
|
||||
steps:
|
||||
- name: Déterminer la release cible
|
||||
id: setvar
|
||||
run: |
|
||||
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
|
||||
TAG="${GITHUB_REF#refs/tags/}"
|
||||
echo "release_cible=$TAG" >> $GITHUB_OUTPUT
|
||||
elif [[ "${GITHUB_REF}" == "refs/heads/main" ]]; then
|
||||
echo "release_cible=latest" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "release_cible=unknown" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Afficher la variable
|
||||
run: echo "Release cible = ${{ steps.setvar.outputs.release_cible }}"
|
||||
|
||||
build:
|
||||
runs-on: raw
|
||||
container:
|
||||
options: --privileged -v /var/run/docker.sock:/var/run/docker.sock
|
||||
needs: set-release-target
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install docker-cli
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y ca-certificates curl
|
||||
install -m 0755 -d /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
|
||||
chmod a+r /etc/apt/keyrings/docker.asc
|
||||
|
||||
# Add the repository to Apt sources:
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
|
||||
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
|
||||
tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
apt-get update
|
||||
apt-get install -y docker-ce-cli
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login docker registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ forge.ACTOR }}
|
||||
password: ${{ secrets.PACKAGE }}
|
||||
registry: ${{ forge.SERVER_URL }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: git.g3e.fr/h6n/users:${{ needs.set-release-target.outputs.release_cible }}
|
||||
target: release
|
||||
70
.forgejo/workflows/test.yml
Normal file
70
.forgejo/workflows/test.yml
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
name: Test Pipeline
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: raw
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup golang
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: "1.21"
|
||||
|
||||
- name: golangci-lint
|
||||
uses: https://github.com/golangci/golangci-lint-action@v8
|
||||
with:
|
||||
version: v2.1
|
||||
args: --issues-exit-code 0
|
||||
|
||||
ci-test:
|
||||
runs-on: raw
|
||||
container:
|
||||
options: --privileged -v /var/run/docker.sock:/var/run/docker.sock
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install docker-cli
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y ca-certificates curl
|
||||
install -m 0755 -d /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
|
||||
chmod a+r /etc/apt/keyrings/docker.asc
|
||||
|
||||
# Add the repository to Apt sources:
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
|
||||
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
|
||||
tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
apt-get update
|
||||
apt-get install -y docker-ce-cli
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Setup golang
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: "1.24"
|
||||
|
||||
- name: Build image
|
||||
run: |
|
||||
docker build --pull -t users-release --target release .
|
||||
|
||||
- name: Run Test
|
||||
run: |
|
||||
bash -ex ./scripts/prepar_test.sh
|
||||
. ./config/test.src
|
||||
go test -v ./cmd/
|
||||
go install gotest.tools/gotestsum@latest
|
||||
gotestsum --junitfile report.xml --format testname
|
||||
|
|
@ -1,11 +1,12 @@
|
|||
FROM golang:1.21-alpine AS develop
|
||||
FROM golang:1.24-alpine AS develop
|
||||
|
||||
# Changement du répertoire de travail
|
||||
WORKDIR /
|
||||
|
||||
RUN apk update && apk add --no-cache curl tar && \
|
||||
curl -O https://gitlab.g3e.fr/api/v4/projects/34/packages/generic/minicurl/v1.0.0/minicurl_linux_amd64.tar.gz && \
|
||||
tar xzvf minicurl_linux_amd64.tar.gz
|
||||
curl -OJ https://git.g3e.fr/api/packages/H6N/generic/minicurl/1.1.0/minicurl-linux-amd64 && \
|
||||
mv minicurl-linux-amd64 minicurl && \
|
||||
chmod +x ./minicurl
|
||||
|
||||
# Changement du répertoire de travail
|
||||
WORKDIR /app
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import (
|
|||
|
||||
"github.com/labstack/echo/v4"
|
||||
logins "gitlab.g3e.fr/h6n/users/internal"
|
||||
login_lib "gitlab.g3e.fr/h6n/users/lib/login"
|
||||
)
|
||||
|
||||
// Login
|
||||
|
|
@ -16,7 +17,7 @@ import (
|
|||
// @Param request body logins.RequestLogin true "request body"
|
||||
// @Success 200 {object} logins.ResponseLogin
|
||||
func login(c echo.Context) error {
|
||||
var request logins.RequestLogin
|
||||
var request login_lib.RequestLogin
|
||||
if err := c.Bind(&request); err != nil {
|
||||
return c.JSON(http.StatusBadRequest, err)
|
||||
}
|
||||
|
|
|
|||
10
docs/release.md
Normal file
10
docs/release.md
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# Release
|
||||
|
||||
## Naming policy
|
||||
|
||||
The naming policy is based on the [periodique table](https://fr.wikipedia.org/wiki/Tableau_p%C3%A9riodique_des_%C3%A9l%C3%A9ments#/media/Fichier:Tableau_p%C3%A9riodique_des_%C3%A9l%C3%A9ments.svg) for this project.
|
||||
|
||||
## Release list
|
||||
|
||||
- [v1.0.0 Helixire](./release/v1.0.0_damian.md)
|
||||
- [v1.1.0 Fer](./release/v1.1.0_fer.md)
|
||||
|
|
@ -9,6 +9,7 @@ import (
|
|||
"github.com/biscuit-auth/biscuit-go/v2"
|
||||
"github.com/biscuit-auth/biscuit-go/v2/parser"
|
||||
"gitlab.g3e.fr/h6n/users/lib"
|
||||
login_lib "gitlab.g3e.fr/h6n/users/lib/login"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
|
@ -18,8 +19,8 @@ func CheckPasswordHash(password, hash string) bool {
|
|||
return err == nil
|
||||
}
|
||||
|
||||
func CreateLogin(db *gorm.DB, request RequestLogin) (ResponseLogin, error) {
|
||||
var response ResponseLogin
|
||||
func CreateLogin(db *gorm.DB, request login_lib.RequestLogin) (login_lib.ResponseLogin, error) {
|
||||
var response login_lib.ResponseLogin
|
||||
|
||||
var user = Users{Email: request.Username}
|
||||
if err := db.First(&user); err.Error != nil {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,9 @@ func DropUnusedColumns(DB *gorm.DB, values ...interface{}) {
|
|||
|
||||
for _, dst := range values {
|
||||
stmt := &gorm.Statement{DB: DB}
|
||||
stmt.Parse(dst)
|
||||
if stmt.Parse(dst) != nil {
|
||||
return
|
||||
}
|
||||
fields := stmt.Schema.Fields
|
||||
columns, _ := DB.Debug().Migrator().ColumnTypes(dst)
|
||||
|
||||
|
|
@ -28,7 +30,9 @@ func DropUnusedColumns(DB *gorm.DB, values ...interface{}) {
|
|||
}
|
||||
}
|
||||
if !found {
|
||||
DB.Migrator().DropColumn(dst, columns[i].Name())
|
||||
if DB.Migrator().DropColumn(dst, columns[i].Name()) != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -39,7 +43,7 @@ func Init_database(dsn string) (*gorm.DB, error) {
|
|||
if err != nil {
|
||||
return db, err
|
||||
}
|
||||
db.AutoMigrate(&Users{})
|
||||
_ = db.AutoMigrate(&Users{})
|
||||
DropUnusedColumns(db, &Users{})
|
||||
|
||||
return db, nil
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package lib
|
|||
import (
|
||||
"crypto/ed25519"
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"time"
|
||||
|
|
@ -22,7 +23,12 @@ func InitLoginBiscuit() error {
|
|||
if file, err := os.Create(filePrivateKey); err != nil {
|
||||
return err
|
||||
} else {
|
||||
defer file.Close()
|
||||
defer func() {
|
||||
if cerr := file.Close(); cerr != nil {
|
||||
// ici tu peux logger ou faire quelque chose
|
||||
fmt.Printf("Erreur à la fermeture: %v\n", cerr)
|
||||
}
|
||||
}()
|
||||
|
||||
if _, err = io.WriteString(file, string(PrivateKey)); err != nil {
|
||||
return err
|
||||
|
|
@ -34,7 +40,12 @@ func InitLoginBiscuit() error {
|
|||
if file, err := os.Create(filePublicKey); err != nil {
|
||||
return err
|
||||
} else {
|
||||
defer file.Close()
|
||||
defer func() {
|
||||
if cerr := file.Close(); cerr != nil {
|
||||
// ici tu peux logger ou faire quelque chose
|
||||
fmt.Printf("Erreur à la fermeture: %v\n", cerr)
|
||||
}
|
||||
}()
|
||||
|
||||
if _, err = io.WriteString(file, string(PublicKey)); err != nil {
|
||||
return err
|
||||
|
|
@ -47,7 +58,12 @@ func InitLoginBiscuit() error {
|
|||
if file, err := os.Open(filePrivateKey); err != nil {
|
||||
return err
|
||||
} else {
|
||||
defer file.Close()
|
||||
defer func() {
|
||||
if cerr := file.Close(); cerr != nil {
|
||||
// ici tu peux logger ou faire quelque chose
|
||||
fmt.Printf("Erreur à la fermeture: %v\n", cerr)
|
||||
}
|
||||
}()
|
||||
|
||||
PrivateKey, err = io.ReadAll(file)
|
||||
if err != nil {
|
||||
|
|
@ -57,7 +73,12 @@ func InitLoginBiscuit() error {
|
|||
if file, err := os.Open(filePublicKey); err != nil {
|
||||
return err
|
||||
} else {
|
||||
defer file.Close()
|
||||
defer func() {
|
||||
if cerr := file.Close(); cerr != nil {
|
||||
// ici tu peux logger ou faire quelque chose
|
||||
fmt.Printf("Erreur à la fermeture: %v\n", cerr)
|
||||
}
|
||||
}()
|
||||
|
||||
PublicKey, err = io.ReadAll(file)
|
||||
if err != nil {
|
||||
|
|
@ -86,7 +107,12 @@ func InitGlobalBiscuit() error {
|
|||
if file, err := os.Open(filePrivateKey); err != nil {
|
||||
return err
|
||||
} else {
|
||||
defer file.Close()
|
||||
defer func() {
|
||||
if cerr := file.Close(); cerr != nil {
|
||||
// ici tu peux logger ou faire quelque chose
|
||||
fmt.Printf("Erreur à la fermeture: %v\n", cerr)
|
||||
}
|
||||
}()
|
||||
|
||||
PrivateKey, err = io.ReadAll(file)
|
||||
if err != nil {
|
||||
|
|
@ -96,7 +122,12 @@ func InitGlobalBiscuit() error {
|
|||
if file, err := os.Open(filePublicKey); err != nil {
|
||||
return err
|
||||
} else {
|
||||
defer file.Close()
|
||||
defer func() {
|
||||
if cerr := file.Close(); cerr != nil {
|
||||
// ici tu peux logger ou faire quelque chose
|
||||
fmt.Printf("Erreur à la fermeture: %v\n", cerr)
|
||||
}
|
||||
}()
|
||||
|
||||
PublicKey, err = io.ReadAll(file)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package logins
|
||||
package login_lib
|
||||
|
||||
type (
|
||||
// RequestLogin model info
|
||||
|
|
@ -1,20 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
|
||||
cat <<ENDFILE >> /etc/apk/repositories
|
||||
http://ftp.halifax.rwth-aachen.de/alpine/v3.16/main
|
||||
http://ftp.halifax.rwth-aachen.de/alpine/v3.16/community
|
||||
ENDFILE
|
||||
apk update
|
||||
apk add docker docker-cli-compose
|
||||
docker version
|
||||
docker compose version
|
||||
docker load --input "$IMAGE_TYPE-$IMAGE_VERSION-release.tar.gz"
|
||||
docker tag $CI_REGISTRY_IMAGE:$IMAGE_VERSION-release $IMAGE_TYPE:latest
|
||||
|
||||
cat <<ENDFILE > docker-compose.yml
|
||||
version: '3.1'
|
||||
|
||||
cat <<ENDFILE > compose.yml
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15.2-alpine3.17
|
||||
|
|
@ -29,7 +18,7 @@ services:
|
|||
timeout: 5s
|
||||
retries: 5
|
||||
users:
|
||||
image: $IMAGE_TYPE
|
||||
image: users-release
|
||||
volumes:
|
||||
- ./docker/keys:/keys
|
||||
depends_on:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue