Skip to content

Commit b351630

Browse files
ci: add a new workflow for pre-release tags (#396)
* ci: add a new workflow for pre-release tags with instructions in development.md Signed-off-by: Nicklas Silversved <nicklas.silversved@digg.se>
1 parent d14bf4b commit b351630

File tree

12 files changed

+221
-65
lines changed

12 files changed

+221
-65
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# SPDX-FileCopyrightText: 2025 diggsweden/rest-api-profil-lint-processor
2+
#
3+
# SPDX-License-Identifier: EUPL-1.2
4+
5+
---
6+
name: RAP-LP Pre-release
7+
8+
on:
9+
push:
10+
tags:
11+
- 'v*.*.*-alpha.*'
12+
- 'v*.*.*-beta.*'
13+
- 'v*.*.*-rc.*'
14+
15+
jobs:
16+
publish-package:
17+
uses: ./.github/workflows/publish-package.yaml
18+
permissions:
19+
contents: read
20+
packages: write
21+
22+
publish-image:
23+
needs: publish-package
24+
uses: ./.github/workflows/publish-image.yaml
25+
permissions:
26+
contents: read
27+
packages: write
28+

.github/workflows/publish-image.yaml

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,25 +39,50 @@ jobs:
3939
username: ${{ github.actor }}
4040
password: ${{ secrets.GITHUB_TOKEN }}
4141

42-
- name: Extract metadata (tags, labels) for distribution image
43-
id: metadist
42+
- name: Extract metadata (branches)
43+
id: meta-branch
44+
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
45+
uses: docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f # v5.8.0
46+
with:
47+
images: ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}
48+
flavor: |
49+
latest=false
50+
tags: |
51+
type=raw,value={{branch}},priority=1
52+
type=raw,value=${{ env.IMAGE_NAME }}-{{branch}}-{{date 'YYYYMMDD'}}-{{sha}},priority=31
53+
54+
- name: Extract metadata (pre-release)
55+
id: meta-pre
56+
if: ${{ startsWith(github.ref, 'refs/tags/v') && contains(github.ref_name, '-') }}
57+
uses: docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f # v5.8.0
58+
with:
59+
images: ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}
60+
flavor: |
61+
latest=false
62+
tags: |
63+
type=semver,pattern={{version}},priority=2
64+
type=raw,value={{version}},pattern={{version}},prefix=,priority=3
65+
type=raw,value=${{ env.IMAGE_NAME }}-{{tag}}-{{date 'YYYYMMDD'}}-{{sha}},priority=32
66+
67+
- name: Extract metadata (stable)
68+
id: meta-stable
69+
if: ${{ startsWith(github.ref, 'refs/tags/v') && !contains(github.ref_name, '-') }}
4470
uses: docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f # v5.8.0
4571
with:
4672
images: ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}
4773
flavor: |
4874
latest=true
4975
tags: |
50-
type=raw,value={{branch}},priority=1,enable=${{ !startsWith(github.ref, 'refs/tags/v') }}
5176
type=semver,pattern={{version}},priority=2
52-
type=raw,value=${{ env.IMAGE_NAME }}-{{branch}}-{{date 'YYYYMMDD'}}-{{sha}},priority=31,enable=${{ !startsWith(github.ref, 'refs/tags/v') }}
53-
type=raw,value=${{ env.IMAGE_NAME }}-{{tag}}-{{date 'YYYYMMDD'}}-{{sha}},priority=32, enable=${{ startsWith(github.ref, 'refs/tags/v') }}
77+
type=semver,pattern={{major}}.{{minor}}.{{patch}},priority=3
78+
type=raw,value=${{ env.IMAGE_NAME }}-{{tag}}-{{date 'YYYYMMDD'}}-{{sha}},priority=32
5479
55-
- name: Build and push distribution image
80+
- name: Build and push image
5681
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
5782
with:
5883
context: .
5984
file: Containerfile
6085
platforms: linux/amd64
6186
push: true
62-
tags: ${{ steps.metadist.outputs.tags }}
63-
labels: ${{ steps.metadist.outputs.labels }}
87+
tags: ${{ steps.meta-stable.outputs.tags || steps.meta-pre.outputs.tags || steps.meta-branch.outputs.tags }}
88+
labels: ${{ steps.meta-stable.outputs.labels || steps.meta-pre.outputs.labels || steps.meta-branch.outputs.labels }}

.github/workflows/publish-package.yaml

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,27 @@ jobs:
2121
node-version: "22.x"
2222
registry-url: "https://npm.pkg.github.com"
2323

24-
- name: Get latest tag
25-
id: get_latest_tag
26-
run: |
27-
latest_tag=$(git describe --tags `git rev-list --tags --max-count=1`)
28-
echo "LATEST_TAG=v${latest_tag}" >> $GITHUB_ENV
29-
3024
- name: Install dependencies
3125
run: npm ci
3226

33-
- name: Publish package
27+
- name: Publish prerelease
28+
if: contains(github.ref_name, '-alpha.') || contains(github.ref_name, '-beta.') || contains(github.ref_name, '-rc.')
29+
env:
30+
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
31+
run: |
32+
TAG="${GITHUB_REF_NAME}"
33+
if [[ "$TAG" =~ -alpha\. ]]; then DIST="alpha"; fi
34+
if [[ "$TAG" =~ -beta\. ]]; then DIST="beta"; fi
35+
if [[ "$TAG" =~ -rc\. ]]; then DIST="rc"; fi
36+
37+
echo "Publishing prerelease with dist-tag: $DIST"
38+
npm publish --tag "$DIST"
39+
40+
# Stable → publicera som latest
41+
- name: Publish stable
42+
if: ${{ !contains(github.ref_name, '-') }}
3443
env:
3544
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
36-
run: npm publish --tag=${{ env.LATEST_TAG }}
45+
run: |
46+
echo "Publishing stable as latest"
47+
npm publish

.github/workflows/workflow.yml

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,38 @@ name: RAP-LP project Workflow
88
on: # yamllint disable-line rule:truthy
99
push:
1010
tags:
11-
- "v[0-9]+.[0-9]+.[0-9]+"
11+
- "v*.*.*"
12+
1213
jobs:
14+
gate:
15+
runs-on: ubuntu-latest
16+
permissions:
17+
contents: read
18+
outputs:
19+
ok: ${{ steps.chk.outputs.ok }}
20+
steps:
21+
- id: chk
22+
shell: bash
23+
run: |
24+
if [[ "${GITHUB_REF_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
25+
echo "ok=true" >> "$GITHUB_OUTPUT"
26+
else
27+
echo "ok=false" >> "$GITHUB_OUTPUT"
28+
fi
29+
30+
# Skapar en release tag som är stabil.
1331
publish-package:
32+
needs: gate
33+
if: needs.gate.outputs.ok == 'true'
1434
uses: ./.github/workflows/publish-package.yaml
1535
permissions:
1636
contents: read
1737
packages: write
38+
1839
publish-image:
40+
needs: [gate, publish-package]
41+
if: needs.gate.outputs.ok == 'true'
1942
uses: ./.github/workflows/publish-image.yaml
2043
permissions:
2144
contents: read
22-
packages: write
45+
packages: write

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ För icke-triviala bidrag, vänligen diskutera med projektteamet först.
8989

9090
Vi använder [Fork-and-Pull-modellen](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models#fork-and-pull-model):
9191

92-
1. Forka repositoriet.
92+
1. Forka repositoriet från senaste release-tag.
9393
2. Skapa en ämnesgren från din forks huvudgren.
9494
3. Pusha dina ändringar till ämnesgrenen i din fork.
9595
4. Öppna en ny pull request till huvudprojektet.

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ SPDX-License-Identifier: CC0-1.0
55
-->
66

77
# REST API-profil - Lint Processor (RAP-LP)
8+
[![Tag](https://img.shields.io/github/v/tag/diggsweden/rest-api-profil-lint-processor?style=for-the-badge&sort=semver&filter=%21*-*&color=green)](https://github.com/diggsweden/rest-api-profil-lint-processor/tags)
89

9-
[![Tag](https://img.shields.io/github/v/tag/diggsweden/rest-api-profil-lint-processor?style=for-the-badge&color=green)](https://github.com/diggsweden/rest-api-profil-lint-processor/tags)
1010

1111
[![License: EUPL 1.2](https://img.shields.io/badge/License-European%20Union%20Public%20Licence%201.2-library?style=for-the-badge&&color=lightblue)](LICENSE)
1212
[![REUSE](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fapi.reuse.software%2Fstatus%2Fgithub.com%2Fdiggsweden%2Frest-api-profil-lint-processor&query=status&style=for-the-badge&label=REUSE&color=lightblue)](https://api.reuse.software/info/github.com/diggsweden/rest-api-profil-lint-processor)
@@ -25,6 +25,7 @@ RAP-LP är ett kommandoradsverktyg för att linta OpenAPI v3-definitioner med hj
2525
- [Innehållsförteckning](#innehållsförteckning)
2626
- [Installation och krav](#installation-och-krav)
2727
- [Instruktioner för att komma igång snabbt](#instruktioner-för-att-komma-igång-snabbt)
28+
- [Versioner](#versioner)
2829
- [Användning](#användning)
2930
- [Begränsningar](#begränsningar)
3031
- [Support](#support)
@@ -38,7 +39,7 @@ RAP-LP är ett kommandoradsverktyg för att linta OpenAPI v3-definitioner med hj
3839

3940
Det enklaste sättet att installera RAP-LP är genom att använda [npm](https://www.npmjs.com/):
4041

41-
1. Klona ned projektet
42+
1. Klona ned projektet från senaste release, gärna via latest release tag.
4243
2. Installera alla beroenden:
4344

4445
```bash
@@ -59,6 +60,11 @@ npm start -- -f PATH_TO_THE_YAML_FILE
5960
npm start -- -f apis/dok-api.yaml
6061
```
6162

63+
## Versioner
64+
Senaste release tag ska alltid vara stabil och testad, vilket gör den till den föredragna versionen för att nyttja verktyget.
65+
66+
Main och pre-releaser används med reservation för att all funktionalitet inte är garanterat stabil och testad.
67+
6268
## Användning
6369

6470
För att validera mot en specifik kategori av regler, lägg till `-c CategoryName`.

apis/sak-api.yaml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,16 @@ components:
116116
write:pets: modify pets in your account
117117
read:pets: read your pets
118118
#Test for invalid types in security schemes
119-
ApiKeyQuery:
119+
ApiKeyQuery:
120120
type: apiKey
121121
in: query
122122
name: api_key
123123
#Test for invalid types in security schemes
124-
ApiKeyQuery2:
124+
ApiKeyQuery2:
125125
type: apiKey
126126
in: header
127127
name: api_key2
128128

129-
130129
schemas:
131130
Error:
132131
type: object

development/DEVELOPMENT.md

Lines changed: 101 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,127 @@
1-
# Development Guide
1+
# Utvecklingsguide
22

3-
This guide outlines core essentials for developing in this project.
3+
Denna guide beskriver de viktigaste grunderna för utveckling i detta projekt.
44

5-
## Table of Contents
6-
- [Setup and Configuration](#setup-and-configuration)
7-
- [IDE Setup](#ide-setup)
8-
- [Development Workflow](#development-workflow)
9-
- [Testing and Verification](#testing-format-and-lint)
10-
- [Release Process](#the-release-workflow)
11-
- [CI Release](#ci-release-process)
12-
- [Local Release](#local-release-process)
13-
- [Troubleshooting](#troubleshooting)
5+
## Innehållsförteckning
6+
- [Installation och konfiguration](#installation-och-konfiguration)
7+
- [IDE-inställningar](#ide-inställningar)
8+
- [Utvecklingsflöde](#utvecklingsflöde)
9+
- [Testning och verifiering](#testning-och-verifiering)
10+
- [Releaseprocess](#releaseprocess)
11+
- [CI-release](#ci-release)
12+
- [Lokal release](#lokal-release)
13+
- [Felsökning](#felsökning)
1414

15-
## Setup and Configuration
15+
## Installation och konfiguration
1616

17-
### IDE Setup
17+
### IDE-inställningar
1818

1919
#### VSCode
2020

2121

2222

23-
## Development Workflow
23+
## Utvecklingsflöde
2424

25-
### Pull Request Workflow
25+
### Pull Request-flöde
2626

27-
When submitting a PR, CI will automatically run several checks. To avoid surprises, run these checks locally first.
27+
När du skickar in en PR kommer CI automatiskt att köra flera kontroller. För att undvika överraskningar bör du köra dessa kontroller lokalt först.
2828

29-
#### Prerequisites
29+
#### Förutsättningar
3030
- [Podman](https://podman.io/)
3131

32-
#### Running Code Quality Checks Locally
32+
#### Köra kvalitetskontroller lokalt
3333

34-
1. Run the quality check script:
34+
1. Kör kvalitetskontrollscriptet:
3535
```shell
3636
./development/code_quality.sh
3737
```
38-
2. Fix any identified issues
39-
3. Update your PR with fixes
40-
4. Verify CI passes in the updated PR
38+
2. Åtgärda eventuella problem
39+
3. Uppdatera din PR med fixarna
40+
4. Verifiera att CI passerar i den uppdaterade PR:en
4141

42-
#### Quality Check Details
42+
#### Detaljer för kvalitetskontroller
4343

44-
- **Linting with megalinter**: BASH, Markdown, YAML, Typescript, GitHub Actions, security scanning
45-
- **License Compliance**: REUSE tool ensures proper copyright information
46-
- **Commit Structure**: Conform checks commit messages for changelog generation
47-
- **Dependency Analysis**: Scans for vulnerabilities, outdated packages, and license issues
48-
- **OpenSSF Scorecard**: Validates security best practices
44+
- **Lintning med megalinter**: BASH, Markdown, YAML, Typescript, GitHub Actions, säkerhetsskanning
45+
- **Licensöverensstämmelse**: REUSE-verktyget säkerställer korrekt copyright-information
46+
- **Commit-struktur**: Conform kontrollerar commit-meddelanden för changelog-generering
47+
- **Beroendeanalys**: Skannar efter sårbarheter, utdaterade paket och licensproblem
48+
- **OpenSSF Scorecard**: Validerar säkerhetsbästa praxis
4949

50-
#### Handling Failed Checks
50+
#### Hantering av misslyckade kontroller
5151

52-
If any checks fail in the CI pipeline:
52+
Om några kontroller misslyckas i CI-pipelinen:
5353

54-
1. Review the CI error logs
55-
2. Run checks locally to reproduce the issues
56-
3. Make necessary fixes in your local environment
57-
4. Update your Pull Request
58-
5. Verify all checks pass in the updated PR
54+
1. Granska CI-fel-loggarna
55+
2. Kör kontrollerna lokalt för att återskapa problemen
56+
3. Gör nödvändiga fixar i din lokala miljö
57+
4. Uppdatera din Pull Request
58+
5. Verifiera att alla kontroller passerar i den uppdaterade PR:en
5959

60-
## The Release Workflow
60+
## Releaseprocess
61+
Det finns ett arbetsflöde för att publicera images och paket antingen som en pre-release-version eller som en stabil release.
6162

63+
### Pre-release
64+
Annotera pre-release-taggen med suffix och en version, använd suffix:
65+
- alpha → tidig testversion, ofta instabil
66+
- beta → mer testad, men fortfarande pre-release
67+
- rc → nära färdigställande, stabil release candidate
68+
69+
X kan ersättas med vilken siffersekvens som helst bestående av 0–9.
70+
71+
***Säkerställ att tagg-versionen matchar versionen i package.json och package-lock.json.***
72+
73+
```
74+
git checkout <branch>
75+
git pull
76+
git tag -s -a vX.X.X-SUFFIX.x -m "vX.X.X-SUFFIX.X"
77+
git push origin vX.X.X-SUFFIX.X
78+
```
79+
80+
Exempel:
81+
82+
```
83+
git tag -s -a v1.0.3-alpha.1 -m "v1.0.3-alpha.1"
84+
git push origin v1.0.3-alpha.1
85+
```
86+
87+
### Stabil release
88+
Checka ut main, hämta senaste ändringarna och tagga senaste commit på main.
89+
90+
***Säkerställ att tagg-versionen matchar versionen i package.json och package-lock.json.***
91+
92+
Checkout main, pull the latest changes and tag the latest main commit.
93+
94+
```
95+
git checkout <branch>
96+
git pull
97+
git tag -s -a vX.X.X -m "vX.X.X"
98+
git push origin vX.X.X
99+
```
100+
101+
Exempel:
102+
```
103+
git tag -s -a v1.0.0 -m "v1.0.0"
104+
git push origin v1.0.0
105+
```
106+
107+
***På grund av projektbegränsningar är pre- och stabila releaser från main endast möjliga för admins!***
108+
109+
### Släpp stabil version på GitHub
110+
1. Öppna [releases](https://github.com/diggsweden/rest-api-profil-lint-processor/releases) på GitHub.
111+
2. "Draft a new release"
112+
3. Välj vilken tagg som ska släppas
113+
4. Lägg till en release-titel – vX.X.X
114+
5. Lägg till en beskrivning eller generera release notes och rensa bort onödiga commits från beskrivningen
115+
6. Markera som senaste release
116+
7. Publicera releasen
117+
118+
### Testa och verifiera release
119+
Efter varje release, pre- eller stabil, bör funktionaliteten testas och verifieras.
120+
121+
Detta kan göras via stickprov av följande funktioner:
122+
123+
#### Test av image
124+
Kör följande kommandon med den version av verktyget du vill testa – [använd podman/docker](../README.md#användning-via-podmandocker)
125+
126+
### Test av npm-paket
62127
...

0 commit comments

Comments
 (0)