Skip to content

Commit

Permalink
refactor: IPFS_NS_MAP from gateway-conformance v6
Browse files Browse the repository at this point in the history
no need to generate env from json, a fixture in desired format
is alreadt provided, and we no longer mix subdomains with
dnslink tests, whcih also simplifies code
  • Loading branch information
lidel committed Jun 10, 2024
1 parent f30f979 commit b649909
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 10 deletions.
21 changes: 18 additions & 3 deletions .github/workflows/gateway-conformance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,24 @@ on:
pull_request:
workflow_dispatch:

env:
GATEWAY_CONFORMANCE_VERSION: '7b222e6a73b82f05651aec3824ef139628198949' # TODO: switch to v0.6

jobs:
gateway-conformance:
setup:
runs-on: ubuntu-latest
outputs:
gateway_conformance_version: ${{ steps.set-env.outputs.gateway_conformance_version }}
steps:
- name: Set default GATEWAY_CONFORMANCE_VERSION
id: set-env
run: echo "GATEWAY_CONFORMANCE_VERSION=${{ env.GATEWAY_CONFORMANCE_VERSION || 'latest' }}" >> $GITHUB_ENV
test:
runs-on: ubuntu-latest
needs: setup
strategy:
matrix:
version: [${{ needs.setup.outputs.gateway_conformance_version }}]
steps:
# 1, Setup Node, install npm dependencies, and build all packages/*
# see https://github.com/ipdxco/unified-github-workflows/blob/3a1a7870ce5967163d8f5c8210b8ad50b2e659aa/.github/workflows/js-test-and-release.yml#L28-L34
Expand All @@ -23,12 +38,12 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: 1.21.x
go-version: 1.22.x

# 3. Download the gateway-conformance fixtures using ipfs/gateway-conformance action
# This will prevent us from needing to install `docker` on the github runner
- name: Download gateway-conformance fixtures
uses: ipfs/gateway-conformance/.github/actions/extract-fixtures@v0.5.1
uses: ipfs/gateway-conformance/.github/actions/extract-fixtures@{{ matrix.version }}
# working-directory: ./packages/gateway-conformance
with:
output: ./packages/gateway-conformance/dist/src/fixtures/data/gateway-conformance-fixtures
Expand Down
5 changes: 4 additions & 1 deletion packages/gateway-conformance/src/conformance.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ import { Agent, setGlobalDispatcher } from 'undici'

const logger = prefixLogger('gateway-conformance')

// The version used in CI check is set in .github/workflows/gateway-conformance.yml
const GATEWAY_CONFORMANCE_VERSION = process.env.GATEWAY_CONFORMANCE_VERSION ?? 'latest'

interface TestConfig {
name: string
spec?: string
Expand Down Expand Up @@ -316,7 +319,7 @@ describe('@helia/verified-fetch - gateway conformance', function () {
log('Using custom gateway-conformance binary at %s', binaryPath)
return
}
const { stdout, stderr } = await execa('go', ['install', 'github.com/ipfs/gateway-conformance/cmd/gateway-conformance@latest'], { reject: true })
const { stdout, stderr } = await execa('go', ['install', `github.com/ipfs/gateway-conformance/cmd/gateway-conformance@${GATEWAY_CONFORMANCE_VERSION}`], { reject: true })
log(stdout)
log.error(stderr)
})
Expand Down
8 changes: 2 additions & 6 deletions packages/gateway-conformance/src/fixtures/kubo-mgmt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ function getExecaOptions ({ cwd, ipfsNsMap, kuboRepoDir }: { cwd?: string, ipfsN
async function downloadFixtures (force = false): Promise<void> {
if (!force) {
// if the fixtures are already downloaded, we don't need to download them again
const allFixtures = await fg.glob([`${GWC_FIXTURES_PATH}/**/*.car`, `${GWC_FIXTURES_PATH}/**/*.ipns-record`, `${GWC_FIXTURES_PATH}/dnslinks.json`])
const allFixtures = await fg.glob([`${GWC_FIXTURES_PATH}/**/*.car`, `${GWC_FIXTURES_PATH}/**/*.ipns-record`, `${GWC_FIXTURES_PATH}/dnslinks.IPFS_NS_MAP`])
if (allFixtures.length > 0) {
log('Fixtures already downloaded')
return
Expand Down Expand Up @@ -106,11 +106,7 @@ export async function loadFixtures (kuboRepoDir: string): Promise<string> {
await datastore.put(dhtKey, dhtRecord.serialize())
}

const json = await readFile(`${GWC_FIXTURES_PATH}/dnslinks.json`, 'utf-8')
const { subdomains, domains } = JSON.parse(json)
const subdomainDnsLinks = Object.entries(subdomains).map(([key, value]) => `${key}.localhost%3A${3441}:${value}`).join(',')
const domainDnsLinks = Object.entries(domains).map(([key, value]) => `${key}:${value}`).join(',')
const ipfsNsMap = `${domainDnsLinks},${subdomainDnsLinks}`
const ipfsNsMap = await readFile(`${GWC_FIXTURES_PATH}/dnslinks.IPFS_NS_MAP`, 'utf-8')

return ipfsNsMap
}

0 comments on commit b649909

Please sign in to comment.