summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2024-07-24 12:00:50 +0200
committerjwijenbergh <jeroenwijenbergh@protonmail.com>2024-11-20 10:40:13 +0100
commit257c743f8dae1fe3c6a1d899da852b7b61c54986 (patch)
tree39374cd046e231a26ca0691a3328262e5e4b0c4e
parentc531015db65eb3e71b1fadfe51f9c107a7bf5216 (diff)
CI: Convert to forgejo
-rw-r--r--.forgejo/workflows/test.yml42
-rw-r--r--.github/dependabot.yml7
-rw-r--r--.github/workflows/deploy.yml99
-rw-r--r--.github/workflows/test-win.yml15
-rw-r--r--.github/workflows/test.yml99
-rw-r--r--Makefile2
-rw-r--r--internal/failover/monitor_test.go30
-rw-r--r--selenium_eduvpn.py6
8 files changed, 67 insertions, 233 deletions
diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml
new file mode 100644
index 0000000..fa3ac07
--- /dev/null
+++ b/.forgejo/workflows/test.yml
@@ -0,0 +1,42 @@
+env:
+ BUILD_DEPENDENCIES: apt-transport-https curl git iproute2 lsb-release make wget
+ GOCILINT_VERSION: 1.62.0
+on: [ push ]
+
+jobs:
+ test:
+ runs-on: docker
+ container:
+ image: debian:latest
+ steps:
+ - name: Install OS Dependencies
+ run: |
+ apt-get update
+ apt-get install --yes $BUILD_DEPENDENCIES
+ - name: Enable Go Backports
+ run: |
+ wget -O /usr/share/keyrings/go+repo@tuxed.net.gpg https://repo.tuxed.net/golang/v1/deb/go+repo@tuxed.net.gpg
+ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/go+repo@tuxed.net.gpg] https://repo.tuxed.net/golang/v1/deb $(lsb_release -c -s) main" > /etc/apt/sources.list.d/golang_v1.list
+ apt-get update
+ apt-get install --yes golang-go
+ - name: Install linter
+ run: |
+ wget -O lint.deb https://github.com/golangci/golangci-lint/releases/download/v$GOCILINT_VERSION/golangci-lint-$GOCILINT_VERSION-linux-amd64.deb
+ dpkg -i lint.deb
+ rm lint.deb
+ - name: Clone Repository
+ run: |
+ mkdir app
+ git clone -b ${{ github.ref_name }} ${{ github.server_url }}/${{ github.repository }} app
+ - name: Download Go deps
+ run: |
+ cd app
+ go get ./...
+ - name: Test Go
+ run: |
+ cd app
+ unshare -r -n bash -c "ip link set lo up && make test"
+ - name: Lint
+ run: |
+ cd app
+ make lint
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index b252b61..0000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# See https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
-version: 2
-updates:
- - package-ecosystem: "gomod"
- directory: "/" # Location of package manifests
- schedule:
- interval: "daily"
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
deleted file mode 100644
index d1766bb..0000000
--- a/.github/workflows/deploy.yml
+++ /dev/null
@@ -1,99 +0,0 @@
-# Adapted from https://github.com/rust-lang/mdBook/wiki/Automated-Deployment:-GitHub-Actions#github-pages-deploy
-
-name: Build docs
-on:
- push:
- branches:
- - main
-
-jobs:
- deploy:
- runs-on: ubuntu-22.04
- steps:
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0
- - name: Install mdbook
- run: |
- # Get mdbook
- curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.18/mdbook-v0.4.18-x86_64-unknown-linux-gnu.tar.gz -o mdbook.tar.gz
- # Verify hash
- echo "d276b0e594d5980de6a7917ce74c348f28d3cb8b353ca4eaae344ae8a4c40bea mdbook.tar.gz" | sha256sum --check
-
- # Get mdbook-mermaid
- curl -sSL https://github.com/badboy/mdbook-mermaid/releases/download/v0.12.6/mdbook-mermaid-v0.12.6-x86_64-unknown-linux-gnu.tar.gz -o mdbook-mermaid.tar.gz
- # Verify hash
- echo "04f9fa41f89b7a1809ef2525efc7ad2c112df4ae1241de25efe354940441ea70 mdbook-mermaid.tar.gz" | sha256sum --check
-
- # Extract
- mkdir mdbook
- tar -xzf mdbook.tar.gz --directory mdbook
- mkdir mdbook-mermaid
- tar -xzf mdbook-mermaid.tar.gz --directory mdbook-mermaid
- echo `pwd`/mdbook >> $GITHUB_PATH
- echo `pwd`/mdbook-mermaid >> $GITHUB_PATH
- - name: Install sphinx
- run: |
- # Install python dependencies
- sudo apt -y install python3 python3-pip python3-sphinx
-
- # Install rtd theme
- pip install sphinx_rtd_theme
- - uses: actions/setup-go@v3
- with:
- go-version: ^1.22
- - name: Build & Install python-eduvpn-common
- run: |
- # install pip deps
- pip install wheel setuptools build
-
- # Make go library
- make
-
- # Go to Python wrapper
- cd wrappers/python
-
- # Make wheel
- make pack
-
- # Install wheel
- pip3 install dist/*.whl
- - name: Deploy GitHub Pages
- run: |
- # Build Sphinx
- cd wrappers/python/docs
- make html
-
- # Go to root
- cd ../../..
-
- # Install mermaid preprocessor
- mdbook-mermaid install docs
-
- cd docs
- mdbook build
-
- # gh pages branch settings
- git worktree add gh-pages gh-pages
- git config user.name "Deploy from CI"
- git config user.email ""
- cd gh-pages
-
- # Delete the ref to avoid keeping history.
- git update-ref -d refs/heads/gh-pages
- rm -rf *
-
- # move mdbook files
- mv ../book/* .
-
- # move sphinx files
- mkdir -p api/python/rtd
- mv ../../wrappers/python/docs/build/html/* api/python/rtd
-
- # Disable jekyll as otherwise it won't find our sphinx paths
- # that start with underscore
- touch .nojekyll
-
- git add .
- git commit -m "Deploy $GITHUB_SHA to gh-pages"
- git push --force
diff --git a/.github/workflows/test-win.yml b/.github/workflows/test-win.yml
deleted file mode 100644
index 5883995..0000000
--- a/.github/workflows/test-win.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-name: "[Windows] Check build"
-
-on: [ push, pull_request ]
-
-jobs:
- build-lib:
- name: "[Windows] Build shared Go library"
- runs-on: windows-latest
-
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-go@v3
- with:
- go-version: ^1.22
- - run: make
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
deleted file mode 100644
index 6236dab..0000000
--- a/.github/workflows/test.yml
+++ /dev/null
@@ -1,99 +0,0 @@
-name: "[Ubuntu] Test & check build"
-
-on: [ push, pull_request ]
-
-jobs:
- lint:
- name: Linting
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/setup-go@v3
- with:
- go-version: ^1.22
- - uses: actions/checkout@v3
- - name: Run golangci-lint
- uses: golangci/golangci-lint-action@v3
- with:
- version: latest
- args: "-E stylecheck,revive,gocritic --out-${NO_FUTURE}format colored-line-number"
- - name: Install ruff
- run: pip install ruff
- - name: Run ruff
- run: |
- ruff check wrappers/python/eduvpn_common
- ruff format --check wrappers/python/eduvpn_common
-
- test:
- name: Run Tests
- runs-on: ubuntu-22.04
- env:
- WEB_FQDN: eduvpnghci
- PORTAL_USER: ci
- PORTAL_PASS: ci
- steps:
- - uses: actions/checkout@v3
- - name: Setup server
- run: |
- git clone https://codeberg.org/eduvpn/deploy
- cd deploy
- sudo cp resources/repo+v3@eduvpn.org.asc /etc/apt/trusted.gpg.d/repo+v3@eduvpn.org.asc
- echo "deb https://repo.eduvpn.org/v3/deb jammy main" | sudo tee /etc/apt/sources.list.d/eduVPN_v3.list
- sudo apt-get -y update
- sudo apt-get install -y vpn-user-portal vpn-server-node vpn-maint-scripts
- sudo openssl req -nodes -subj "/CN=${WEB_FQDN}" -addext "subjectAltName = DNS:${WEB_FQDN}" -x509 -sha256 -newkey rsa:2048 -keyout "/etc/ssl/private/${WEB_FQDN}.key" -out "/etc/ssl/certs/${WEB_FQDN}.crt" -days 90
- # Apache 2
- PHP_VERSION=$(/usr/sbin/phpquery -V)
- sudo a2enmod ssl headers rewrite proxy_fcgi setenvif
- sudo a2dismod status
- sudo a2enconf "php${PHP_VERSION}-fpm"
- sudo cp resources/ssl.debian.conf /etc/apache2/mods-available/ssl.conf
- sudo cp resources/vpn.example.debian.conf "/etc/apache2/sites-available/${WEB_FQDN}.conf"
- sudo cp resources/localhost.debian.conf /etc/apache2/sites-available/localhost.conf
- sudo sed -i "s/vpn.example/${WEB_FQDN}/" "/etc/apache2/sites-available/${WEB_FQDN}.conf"
- sudo a2enconf vpn-user-portal
- sudo a2ensite "${WEB_FQDN}" localhost
- sudo a2dissite 000-default
- sudo systemctl restart apache2
-
- # NETWORK
- sudo cp /etc/vpn-user-portal/keys/node.0.key /etc/vpn-server-node/keys/node.key
-
- sudo systemctl enable --now "php${PHP_VERSION}-fpm"
- sudo systemctl enable --now apache2
-
- sudo /usr/libexec/vpn-server-node/server-config
- sudo -u www-data vpn-user-portal-account --add "${PORTAL_USER}" --password "${PORTAL_PASS}"
-
- # Update /etc/hosts to point to our server
- echo "127.0.0.1 ${WEB_FQDN}" | sudo tee -a /etc/hosts
- - uses: actions/setup-go@v3
- with:
- go-version: ^1.22
- - name: Selenium dependencies
- run: |
- sudo apt-get -y update
- sudo apt-get -y install tar python3 python3-selenium
- - name: Test Go
- run: |
- # Add geckodriver and go to path
- export PATH=$PATH:/usr/local/go/bin
-
- ## Run tests
- SERVER_URI=https://${WEB_FQDN} make test
-
- build-lib:
- name: Build shared Go library
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-go@v3
- with:
- go-version: ^1.22
- - run: make
- - uses: actions/upload-artifact@v3
- with:
- name: shared-lib
- path: exports/lib/
- retention-days: 1
diff --git a/Makefile b/Makefile
index ae51c26..7d29643 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,7 @@ cli:
go build -o eduvpn-common-cli ./cmd/cli
test:
- go test -tags=cgotesting -race ./...
+ go test -tags=cgotesting -race -v ./...
clean:
rm -rf lib
diff --git a/internal/failover/monitor_test.go b/internal/failover/monitor_test.go
index 87fb3cd..08b2e74 100644
--- a/internal/failover/monitor_test.go
+++ b/internal/failover/monitor_test.go
@@ -12,9 +12,14 @@ import (
// mockedPinger is a ping sender that always returns nil for sending
// but returns EOF for reading
-type mockedPinger struct{}
+type mockedPinger struct{
+ cleanRead bool
+}
func (mp *mockedPinger) Read(_ time.Time) error {
+ if mp.cleanRead {
+ return nil
+ }
return io.EOF
}
@@ -43,18 +48,27 @@ func TestMonitor(t *testing.T) {
readRxBytes: func() (int64, error) {
return 0, errors.New("error test")
},
+ mockedPinger: func(_ string, _ int) (sender, error) {
+ return &mockedPinger{}, nil
+ },
wantDropped: false,
wantErr: "error test",
},
// default case, not dropped
- {},
- // readRxBytes always returns 0
- // still we do not want a drop because we get a pong from 127.0.0.1
+ {
+ mockedPinger: func(_ string, _ int) (sender, error) {
+ return &mockedPinger{}, nil
+ },
+ },
+ // default case where it could read a ping response, and read rx bytes always returns 0
+ // should be not dropped
{
readRxBytes: func() (int64, error) {
return 0, nil
},
- wantDropped: false,
+ mockedPinger: func(_ string, _ int) (sender, error) {
+ return &mockedPinger{cleanRead: true}, nil
+ },
},
// readRxBytes always returns 0
// we want dropped as the mock pinger does nothing
@@ -74,7 +88,7 @@ func TestMonitor(t *testing.T) {
var counter int64
// some defaults
if c.interval == 0 {
- c.interval = 2 * time.Second
+ c.interval = 2 * time.Millisecond
}
if c.pDropped == 0 {
c.pDropped = 5
@@ -94,9 +108,7 @@ func TestMonitor(t *testing.T) {
}
}
dcm := NewDroppedMonitor(c.interval, c.pDropped, c.readRxBytes)
- if c.mockedPinger != nil {
- dcm.newPinger = c.mockedPinger
- }
+ dcm.newPinger = c.mockedPinger
dropped, err := dcm.Start(context.Background(), c.gateway, c.mtuSize)
if dropped != c.wantDropped {
t.Fatalf("dropped is not equal to want dropped, got: %v, want: %v", dropped, c.wantDropped)
diff --git a/selenium_eduvpn.py b/selenium_eduvpn.py
index 605bc54..417b46c 100644
--- a/selenium_eduvpn.py
+++ b/selenium_eduvpn.py
@@ -8,9 +8,7 @@ from selenium.webdriver.firefox.options import Options
def login_eduvpn(authURL):
options = Options()
- options.headless = True
-
- # Use the firefox driver
+ options.add_argument("-headless")
driver = webdriver.Firefox(options=options)
login_oauth(driver, authURL)
@@ -23,6 +21,7 @@ def login_eduvpn(authURL):
def login_oauth(driver, authURL):
# Go to the oauth url and verify the title
driver.get(authURL)
+ print(driver.title)
assert "VPN Portal - Sign In" in driver.title
# Get credentials
@@ -52,6 +51,7 @@ def login_oauth(driver, authURL):
).click()
# Check that we have reached the approve application page
+ print(driver.title)
assert "VPN Portal - Approve Application" in driver.title
# Click approve
driver.find_element(