From 4bcbd29fb92c222cc8f3f654efae359f4a9686e0 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Wed, 4 Mar 2026 19:24:53 +0000 Subject: [PATCH] chore(ci): allow to specify provider to update servers data on dispatch --- .github/workflows/update-servers-list.yml | 44 ++++++++++++++++++- .../constants/providers/providers_test.go | 33 ++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-servers-list.yml b/.github/workflows/update-servers-list.yml index 3ec03199..fa0f788d 100644 --- a/.github/workflows/update-servers-list.yml +++ b/.github/workflows/update-servers-list.yml @@ -1,6 +1,37 @@ name: Update servers list on: workflow_dispatch: + inputs: + provider: + description: "VPN Provider to update" + required: true + default: "all" + type: choice + options: + - all + - airvpn + - cyberghost + - expressvpn + - fastestvpn + - giganews + - hidemyass + - ipvanish + - ivpn + - mullvad + - nordvpn + - perfect privacy + - privado + - private internet access + - privatevpn + - protonvpn + - purevpn + - slickvpn + - surfshark + - torguard + - vpnsecure + - vpn unlimited + - vyprvpn + - windscribe schedule: - cron: "11 3 1 */2 *" # Run at 03:11 on the 1st of every 2nd month jobs: @@ -20,7 +51,18 @@ jobs: - name: Update servers list run: | - go run ./cmd/gluetun/main.go update -all -maintainer -proton-email "${{ secrets.PROTON_EMAIL }}" -proton-password "${{ secrets.PROTON_PASSWORD }}" + SELECTED_PROVIDER="${{ github.event.inputs.provider || 'all' }}" + + if [ "$SELECTED_PROVIDER" = "all" ]; then + FLAGS="-all" + else + FLAGS="-providers $SELECTED_PROVIDER" + fi + + go run ./cmd/gluetun/main.go update $FLAGS \ + -maintainer \ + -proton-email "${{ secrets.PROTON_EMAIL }}" \ + -proton-password "${{ secrets.PROTON_PASSWORD }}" - name: Check for changes run: | diff --git a/internal/constants/providers/providers_test.go b/internal/constants/providers/providers_test.go index 88491dd9..c25b3445 100644 --- a/internal/constants/providers/providers_test.go +++ b/internal/constants/providers/providers_test.go @@ -1,9 +1,12 @@ package providers import ( + "os" "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "gopkg.in/yaml.v3" ) func Test_All(t *testing.T) { @@ -21,3 +24,33 @@ func Test_AllWithCustom(t *testing.T) { assert.Contains(t, all, Custom) assert.Len(t, all, len(All())+1) } + +func TestWorkflowHasAll(t *testing.T) { + t.Parallel() + + const path = "../../../.github/workflows/update-servers-list.yml" + file, err := os.Open(path) + require.NoError(t, err) + defer file.Close() + + var data struct { + On struct { + WorkflowDispatch struct { + Inputs struct { + Provider struct { + Options []string `yaml:"options"` + } `yaml:"provider"` + } `yaml:"inputs"` + } `yaml:"workflow_dispatch"` + } `yaml:"on"` + } + decoder := yaml.NewDecoder(file) + err = decoder.Decode(&data) + require.NoError(t, err) + + providers := All() + expected := make([]string, len(providers)+1) + expected[0] = "all" + copy(expected[1:], providers) + assert.Equal(t, expected, data.On.WorkflowDispatch.Inputs.Provider.Options) +}