Giter Site home page Giter Site logo

augurk / augurk Goto Github PK

View Code? Open in Web Editor NEW
41.0 10.0 14.0 6.14 MB

living documentation on your own terms

Home Page: https://augurk.github.io

License: Apache License 2.0

C# 72.79% CSS 2.00% JavaScript 5.81% HTML 15.36% Gherkin 3.50% Batchfile 0.16% Dockerfile 0.23% Shell 0.15%
gherkin cucumber specification-by-example specflow

augurk's Introduction

Augurk

Augurk is an always improving, open source, living documentation system designed to get maximum value out of Gherkin-based specifications. By continuously listening to the struggles and desires of various agile teams, Augurk aims to be the most natural fit for anyone wishing to publish their living documentation.

Augurk provides an accessible, easy-to-use overview of all the features describing your application(s) on a webportal you can host within your own organization.

Inspiration

Augurk is greatly influenced by Relish and Pickles. While Relish is a great SaaS application, it requires you to publish your documentation to the cloud. While this is not an issue when your sources live in the cloud as well, in other cases it is often still preferable to keep the documentation within the corporate intranet.
This leaves Pickles. Although Pickles adresses the cloud issue (it was designed for that purpose), it has some short-comings of its own. Pickles generates a neat (Dynamic)HTML website for each project/solution you require it to. It does, however, not incorporate these. This means not only will you get a website for each solution, you can multiply your number of websites with the number of branches you maintain simultaneously.

Augurk has been designed to address exactly these issues. It allows you to publish your features from multiple solutions and branches to a single location, providing you with a single access-point for all your documentation. While Augurk is based upon the same principles as Pickles, it has been rebuild completely from the ground-up, allowing Augurk to provide all the same functionality but simultenously improving and extending it where necessary.

Augurk?

The Gherkin language is used to write Cucumber specifications. Seeing as a Gherkin is a pickled cucumber, the naming of Pickles and Relish (a pickled food item) make perfect sense. Since that doesn't leave much Gherkin related terms in the English language, it was an almost natural choice to switch to a different language. Since Augurk is being developed in The Netherlands, Augurk (meaning pickle[d cucumber]) was a perfect fit.

How to set up your development environment

Great, you want to open our jar of augurk's!
Let's us help you set up the development environment, there are 3 steps to get you up and running.

  1. First you'll need Visual Studio 2015 or newer to open the solution
  2. On the Augurk project, change the IIS Express bitness to x64
    Screenshot showing Augurk project settings screen to set the IIS bitness setting to x64
  3. Change the bitness of the Test Runner to x64
    Screenshot showing the Visual Studio menu option to set the test runner bitness setting to x64

Now you should be able to run and test all code.

Just as a note, the feature files that are part of the Augurk.Specification project are not implemented. Therefore, when you run all tests in the solution they will be skipped.

augurk's People

Contributors

azure-pipelines[bot] avatar bheerschop avatar dependabot-preview[bot] avatar dependabot[bot] avatar energy164 avatar jmezach avatar marktaling avatar pgilhuijs avatar ptoonen avatar roycornelissen avatar ruudku avatar youphulsebos avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

augurk's Issues

Supporting diacritics in scenarios

When scenarios contain characters with diacritics (like é or ë) they are shown as a square with a question mark () in the browser.

Check IIS modules upon installing

After installing the Augurk WebDeploy package, I got 405 Method Not Allowed errors from IIS on some DELETE calls. They were caused by the WebDavModule being present in the IIS application. The installer should check and delete the module if present. Request filtering may also hinder the API, when the DELETE verb is blocked. On application level, DELETE should be allowed, maybe best if it's done explicitly.

View examples in specification

Currently examples are only shown as a table and the specification still shows the placeholders for te examples, as shown below.

afbeelding

To be able to read the specification better I'd like to be able to select a example row and have it's values entered in the specification; (in this case VBS is selected)
afbeelding

Cross-platform command line tool

It would be nice if we could have the command line tool available cross-platform. This could increase adoption of Augurk, and would also make it more available for non .NET projects.

I took the liberty of putting our repository through I Can Has .NET Core. Main problem that is blocking this is that SpecFlow isn't available on .NET Core yet. That is being worked on in SpecFlowOSS/SpecFlow#649 though.

But I'm not entirely sure if we need SpecFlow for this to work though. Wouldn't adapting the Gherkin parser for .NET as discussed in #17 remove the need to use SpecFlow directly? .NET Core support for that is also being worked on in cucumber/gherkin#215 and seems about ready.

Product landing pages

Since we've talked about this and we've also got it listed on the public website I thought we'd might as well make it official and post a feature request here ;).

The idea here is to have an editable landing page for a product so serve as an entry-point into the rest of the documentation for the product contributed by the feature files.

Uploading features after analysis reports have already been uploaded produces incorrect results

During the implementation of the new dependency analyzer feature we've identified a bug that occurs, where if a particular feature depends on two other features that in turn depend on yet another feature then the first feature also gets a dependency on the last one. This was fixed, but the fix only works correctly if the feature files are uploaded first. If the analysis reports are uploaded first and the associated features come in later this does not work correctly.

For now we'll leave this as a known issue, but we might want to take a look at it again later on.

Occasional Internal Server Error when publishing features

At NS we're experiencing occasional Internal Server Errors during the build when publishing features, causing the build to fail. Investigating the event log on the machine hosting the Augurk instance reveals the following exception:

Event code: 3005 
Event message: An unhandled exception has occurred. 
Event time: 3/21/2016 10:40:13 AM 
Event time (UTC): 3/21/2016 10:40:13 AM 
Event ID: 9f20d05504954a63ab2126d85d90a3cc 
Event sequence: 2 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1273337584/ROOT-34-131030304046816584 
    Trust level: Full 
    Application Virtual Path: / 
    Application Path: E:\sitesroot\0\ 
    Machine name: RD000D3A22E383 

Process information: 
    Process ID: 6360 
    Process name: w3wp.exe 
    Account name: NT AUTHORITY\NETWORK SERVICE 

Exception information: 
    Exception type: TargetInvocationException 
    Exception message: Exception has been thrown by the target of an invocation.
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at Owin.Loader.DefaultLoader.<>c__DisplayClass1.<LoadImplementation>b__0(IAppBuilder builder)
   at Microsoft.Owin.Host.SystemWeb.OwinAppContext.Initialize(Action`1 startup)
   at Microsoft.Owin.Host.SystemWeb.OwinHttpModule.InitializeBlueprint()
   at System.Threading.LazyInitializer.EnsureInitializedCore[T](T& target, Boolean& initialized, Object& syncLock, Func`1 valueFactory)
   at Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init(HttpApplication context)
   at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
   at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
   at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

One or more errors occurred.
   at System.Threading.Tasks.Task.WaitAll(Task[] tasks, Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at Raven.Database.Indexing.DefaultBackgroundTaskExecuter.ExecuteAllInterleaved[T](WorkContext context, IList`1 result, Action`1 action)
   at Raven.Database.Indexing.IndexStorage..ctor(IndexDefinitionStorage indexDefinitionStorage, InMemoryRavenConfiguration configuration, DocumentDatabase documentDatabase)
   at Raven.Database.DocumentDatabase.DocumentDatabaseInitializer.InitializeIndexStorage()
   at Raven.Database.DocumentDatabase..ctor(InMemoryRavenConfiguration configuration, TransportState recievedTransportState)
   at Raven.Database.Server.RavenDBOptions..ctor(InMemoryRavenConfiguration configuration, DocumentDatabase db)
   at Raven.Database.Server.OwinHttpServer..ctor(InMemoryRavenConfiguration config, DocumentDatabase db, Boolean useHttpServer, Action`1 configure)
   at Raven.Server.RavenDbServer.Initialize(Action`1 configure)
   at Raven.Database.Client.EmbeddedDocumentStore.Initialize()
   at Raven.Client.Embedded.EmbeddableDocumentStore.Initialize()
   at Augurk.Api.Startup.InitializeRavenDB()
   at Augurk.Api.Startup.Configuration(IAppBuilder app)

Could not reset index Features/ByTitleProductAndGroup
   at Raven.Database.Indexing.IndexStorage.TryResettingIndex(String indexName, IndexDefinition indexDefinition)
   at Raven.Database.Indexing.IndexStorage.OpenIndexOnStartup(String indexName)
   at System.Threading.Tasks.Task.Execute()

The following processes are locking E:\sitesroot\0\App_Data\FeatureStore\Indexes\2\write.lock
 w3wp 6360

   at Raven.Database.Extensions.IOExtensions.TryHandlingError(String directory, Int32 i, Exception e)
   at Raven.Database.Extensions.IOExtensions.DeleteDirectory(String directory)
   at Raven.Database.Indexing.IndexStorage.TryResettingIndex(String indexName, IndexDefinition indexDefinition)



Request information: 
    Request URL: http://spoorplaza.cloudapp.net/Content/select.css 
    Request path: /Content/select.css 
    User host address: 145.222.61.13 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: NT AUTHORITY\NETWORK SERVICE 

Thread information: 
    Thread ID: 12 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
    Is impersonating: False 
    Stack trace:    at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at Owin.Loader.DefaultLoader.<>c__DisplayClass1.<LoadImplementation>b__0(IAppBuilder builder)
   at Microsoft.Owin.Host.SystemWeb.OwinAppContext.Initialize(Action`1 startup)
   at Microsoft.Owin.Host.SystemWeb.OwinHttpModule.InitializeBlueprint()
   at System.Threading.LazyInitializer.EnsureInitializedCore[T](T& target, Boolean& initialized, Object& syncLock, Func`1 valueFactory)
   at Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init(HttpApplication context)
   at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
   at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
   at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)


Custom event details: 

It seems that the Raven database is locked by another process, but according to the error message it is locked by the same process ID as the process ID causing the exception. Any thoughts?

Augurk 3.0

This issue describes the high level plan for Augurk 3.0 which we are currently working on. We'll use this to track progress on this big new release. The below list shows the big themes of this release, as well as the underlying work being done on that and branches in which those things are being developed. Each branch builds upon the previous one, meaning we'll have to take care in merging those into the feature/net-core-port branch.

  • Port to .NET Core so that Augurk can run cross-platform
    • Upgrade to RavenDB 4.0 (parent of #54)
    • Use ASP.NET Core's dependency injection (parent of #80)
    • Publishing and build pipeline fixes
    • Versioned API including Swagger docs (feature/api-versioning)
  • Improve test coverage (blocked by coverlet-coverage/coverlet#342)
  • Replace AngularJS with VueJS ui (feature/vuex-module-decorators) (won't make it into 3.0)
  • Publish Docker image (feature/dockerize)
  • Merge with master

Items to test before releasing 3.0:

  • Feature expiration feature
  • Uploading product descriptions appears to be broken

parent of #40
parent of #81

Add a prune command to the commandline tool

It would be nice if we had a prune command that would clean up features using a regular expression on the version. This would make it easy for our users to clean up old versions of a particular feature.

Requires fixing #47

New modern UI

As part of Augurk 3.0 we're planning on replacing the user interface with a more modern implementation.

We decided to settle on Vue as the SPA framework and Vuetify as the UI framework with implements a material design system for Vue.

Initial focus of this work is to re-implement the frontend with Vue and keeping most of the existing functionality.

We have already made some mockups of the new design on a white-board:

Homepage: whatsapp image 2018-11-29 at 21 14 30

Product overview: whatsapp image 2018-11-29 at 21 14 31

Feature details:
whatsapp image 2018-11-29 at 21 14 31 1

Markdown code blocks are treated as hyperlinks

Upload a --productDesc Markdown file containing a code block like [somecode] . When rendering, a Javascript error occurs because this is treated as a [link] and no (hyperlink) was provided.
This is caused by a regex in filters.js being to lax.

Do not include JS and CSS files in our repository

External dependencies such as AngularJS and Bootstrap bring in JavaScript and CSS files, but they shouldn't be in our repository. Instead we should look to manage these with something like npm to avoid having them in our repository. That should fix large PR's like #38.

Upgrade to RavenDb 4.0

There is a pre-release candidate of RavenDb 4.0 out now. We might want to look into upgrading to that version, since it should also be able to run on .NET Core, which would make Augurk a lot more portable to other platforms.

It looks like it it's not a drop-in replacement though, so we should investigate what it takes to upgrade to this new version.

Time to live feature for versions of a feature file

It would be nice if we can configure a time to live for features files based on a regular expression that runs on the version of that feature. This would automatically clean up old versions of feature files, without having to go into the database to fix it.

Search the scenarios and show a list of matching scenarios

As a testmanager I would like to search for scenarios having a certain (combination of) tags so that I can view a list of those scenarios

e.g. a list of all scenario's tagged with @Manual and @regressie

In search results, maintaining the grouping into solutions would be nice

Import/export option for Augurk

We currently don't have a way to export and import data from Augurk. This would be useful in a couple of scenario's, such as migrating to a newer version if it uses a newer version of RavenDB, but also to be able to take a backup and import it to a new instance in case of a reinstall or something.

Ideally we would just export the documents in the database as JSON and zip them all up together. Then in another instance we could upload that zip and recreate the documents in the database based on that. We'll need to think about how we handle existing documents in the database though.

This should probably be added to the current 2.x version of Augurk, since with 3.0 we'll want to upgrade RavenDB to 4.0 and we need to have a way for people to take their existing data along.

Table support in descriptions

According to the gherkin specifications, data tables are only supported with a step definition.
Support for data tables in the feature- and scenario description would be a useful addition.

Version flag is mandatory in API v2 but not in command line tool

The command line tool does not enforce the --version flag, but it is mandatory in the V2 API. If you don't specify --version, an invalid URL is generated, causing 405 Method Not Allowed. Either make --version mandatory, or generate a default (e.g. "1").

Image upload support

When adding an image to markdown, it looks something like this:
![image](image.jpg)

When seeing this in the file, the upload tool should search for an image.jpg file in the same folder and upload it with the feature. (Naturally, the filename will change)

Split repository

Now that Augurk has become an "Organization", it no longer has the limits of a single repository.

We should probably move the commandline tool to its own repository and give it a version number of its own.

Command line tool to delete branch

Sometimes a branch is not needed anymore. It would be handy to be able to delete that branch from Augurk. A command line tool would be ok.

Augurk fails to start up after clean install

There seems to be an issue (at least with the latest version of Augurk) where it fails to start after a completely clean install. After unzipping the WebDeploy package and configuring it in IIS, we get the following error:

Compilation Errors:

Line 0, Position 0: Error CS0006 - Metadata file 'C:\inetpub\wwwroot\Augurk\Assemblies\Lucene.Net.dll' could not be found

Source code:
using Raven.Abstractions;
using Raven.Database.Linq;
using System.Linq;
using System.Collections.Generic;
using System.Collections;
using System;
using Raven.Database.Linq.PrivateExtensions;
using Lucene.Net.Documents;
using System.Globalization;
using System.Text.RegularExpressions;
using Raven.Database.Indexing;

public class Index_Raven_DocumentsByExpirationDate : Raven.Database.Linq.AbstractViewGenerator
{
public Index_Raven_DocumentsByExpirationDate()
{
this.ViewText = @"
from doc in docs
let expiry = doc[""@metadata""][""Raven-Expiration-Date""]
where expiry != null
select new { Expiry = expiry }
";
this.AddMapDefinition(docs => 
from doc in ((IEnumerable<dynamic>)docs)
let expiry = doc["@metadata"]["Raven-Expiration-Date"]
where expiry != null
select new {
Expiry = expiry,
__document_id = doc.__document_id
});
this.AddField("Expiry");
this.AddField("__document_id");
this.AddQueryParameterForMap("__document_id");
this.AddQueryParameterForReduce("__document_id");
}
}

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
--



Given the stacktrace below, this seems to be related to our latest feature #53. Perhaps there is a problem in the order in which things run now, which only seems to affect new installations. Needs more investigation.

Raven.Database.dll!Raven.Database.Linq.QueryParsingUtils.DoActualCompilation(string source, string name, string queryText, Raven.Abstractions.MEF.OrderedPartCollection<Raven.Database.Plugins.AbstractDynamicCompilationExtension> extensions, string basePath, string indexFilePath, Raven.Database.Config.InMemoryRavenConfiguration configuration)	Unknown
Raven.Database.dll!Raven.Database.Linq.QueryParsingUtils.Compile(string source, string name, string queryText, Raven.Abstractions.MEF.OrderedPartCollection<Raven.Database.Plugins.AbstractDynamicCompilationExtension> extensions, string basePath, Raven.Database.Config.InMemoryRavenConfiguration configuration)	Unknown
Raven.Database.dll!Raven.Database.Linq.DynamicViewCompiler.GenerateInstance()	Unknown
Raven.Database.dll!Raven.Database.Storage.IndexDefinitionStorage.AddAndCompileIndex(Raven.Abstractions.Indexing.IndexDefinition indexDefinition)	Unknown
Raven.Database.dll!Raven.Database.Storage.IndexDefinitionStorage.CreateAndPersistIndex(Raven.Abstractions.Indexing.IndexDefinition indexDefinition)	Unknown
Raven.Database.dll!Raven.Database.Actions.IndexActions.PutNewIndexIntoStorage.AnonymousMethod__e(Raven.Database.Storage.IStorageActionsAccessor actions)	Unknown
Raven.Database.dll!Raven.Storage.Esent.TransactionalStorage.ExecuteBatch(System.Action<Raven.Database.Storage.IStorageActionsAccessor> action, Raven.Database.Impl.DTC.EsentTransactionContext transactionContext)	Unknown
Raven.Database.dll!Raven.Storage.Esent.TransactionalStorage.Batch(System.Action<Raven.Database.Storage.IStorageActionsAccessor> action)	Unknown
Raven.Database.dll!Raven.Database.Actions.IndexActions.PutNewIndexIntoStorage(string name, Raven.Abstractions.Indexing.IndexDefinition definition)	Unknown
Raven.Database.dll!Raven.Database.Actions.IndexActions.PutIndex(string name, Raven.Abstractions.Indexing.IndexDefinition definition)	Unknown
Raven.Database.dll!Raven.Bundles.Expiration.ExpiredDocumentsCleaner.Execute(Raven.Database.DocumentDatabase database)	Unknown
Raven.Database.dll!Raven.Database.DocumentDatabase.ExecuteStartupTasks()	Unknown
Raven.Database.dll!Raven.Database.DocumentDatabase.DocumentDatabase(Raven.Database.Config.InMemoryRavenConfiguration configuration, Raven.Database.Server.Connections.TransportState recievedTransportState)	Unknown
Raven.Database.dll!Raven.Database.Server.RavenDBOptions.RavenDBOptions(Raven.Database.Config.InMemoryRavenConfiguration configuration, Raven.Database.DocumentDatabase db)	Unknown
Raven.Database.dll!Raven.Database.Server.OwinHttpServer.OwinHttpServer(Raven.Database.Config.InMemoryRavenConfiguration config, Raven.Database.DocumentDatabase db, bool useHttpServer, System.Action<Raven.Database.Server.RavenDBOptions> configure)	Unknown
Raven.Database.dll!Raven.Server.RavenDbServer.Initialize(System.Action<Raven.Database.Server.RavenDBOptions> configure)	Unknown
Raven.Database.dll!Raven.Database.Client.EmbeddedDocumentStore.Initialize()	Unknown
Raven.Database.dll!Raven.Client.Embedded.EmbeddableDocumentStore.Initialize()	Unknown
Augurk.Api.dll!Augurk.Api.Startup.InitializeRavenDB()	Unknown
Augurk.Api.dll!Augurk.Api.Startup.Configuration(Owin.IAppBuilder app)	Unknown
 [Native to Managed Transition]	
 [Managed to Native Transition]	
Microsoft.Owin.Host.SystemWeb.dll!Owin.Loader.DefaultLoader.MakeDelegate.AnonymousMethod__b(Owin.IAppBuilder builder)	Unknown
Microsoft.Owin.Host.SystemWeb.dll!Owin.Loader.DefaultLoader.LoadImplementation.AnonymousMethod__0(Owin.IAppBuilder builder)	Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinAppContext.Initialize(System.Action<Owin.IAppBuilder> startup)	Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinBuilder.Build(System.Action<Owin.IAppBuilder> startup)	Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinHttpModule.InitializeBlueprint()	Unknown
mscorlib.dll!System.Threading.LazyInitializer.EnsureInitializedCore<System.__Canon>(ref System.__Canon target, ref bool initialized, ref object syncLock, System.Func<System.__Canon> valueFactory)	Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init(System.Web.HttpApplication context)	Unknown
System.Web.dll!System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(System.IntPtr appContext, System.Web.HttpContext context, System.Reflection.MethodInfo[] handlers)	Unknown
System.Web.dll!System.Web.HttpApplication.InitSpecial(System.Web.HttpApplicationState state, System.Reflection.MethodInfo[] handlers, System.IntPtr appContext, System.Web.HttpContext context)	Unknown
System.Web.dll!System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(System.IntPtr appContext, System.Web.HttpContext context)	Unknown
System.Web.dll!System.Web.Hosting.PipelineRuntime.InitializeApplication(System.IntPtr appContext)	Unknown
 [AppDomain Transition]

TFS build task: publishing features with multiple branches

When using the TFS build task through PublishFeaturesToAugurk.ps1 it's not supported to have different feature files on multiple branches. If a feature file doesn't exist in a particular branch the build for that branch will fail (or partially succeed when configured that way).

This could be solved by providing an option to use the parent folder names of the feature files as the group name in Augurk (that way only existing feature files will be processed).

Editing feature files directly in Augurk

At the Dutch SpecFlow Users meetup a couple of people suggested that it would be a great help if feature files could be edited in Augurk directly. Curiously enough those users actually store their feature files in a version control environment (e.g. Git, TFVC, etc...).

For this specific scenario it might be a neat solution to create a "suggest change" feature. This would allow a user to suggest a change to the feature file in Augurk. A more technical user will at a later time retrieve those changes through a Visual Studio plugin and process them.

Would this be a usable feature? Discuss!

Tag search doesn't work on demo website

It seems that entering a tag in the filter box in the top left corner on the demo website doesn't currently do anything. Not sure what's going on there, but we should probably investigate why that doesn't work anymore.

Versioning and the menu don't play well together

When pushing multiple different projects to the same product while using versioning, the menu won't display features that do not exist in the highest version.

The menu should always show each feature, regardless of version. If an old feature should not be shown, it should just be removed [manually by a human].

Self-hosted Augurk

Currently Augurk has to be hosted in IIS. As it has been build upon the OWIN stack, it would be preferable to self-host it in it's own process. This would simplify the deployment and upgrade scenarios...

Automatically include a list of scenario's in the published feature file

Currently we manually add an index of the scenario's per feature file to the file itself to get a quick overview of the content of the feature.
It would be nice when this index would be generated automatically because the manual index gets easyly out of sync.
Placement would be before the first scenario and before the background.

Search the scenarios for plain text

As an operations engineer I would like to search the scenarios for a given text so that I can find out under what testconditions a given error message occurs

e.g. I would like to search for E17 to find this scenario having
a step: and the error "E17 Product not found" is shown

or having
a step: and the error is shown
and "E17 Product not found" in the examples

e.g. I would like to search for "not found" to find this scenario having
a step: and the error "E17 Product not found" is shown

Improve installation experience

We want to improve the installation experience for Augurk. Specifically we want to make it easier to install Augurk on a server. Perhaps some form of guide is needed to make this easier. Also, we want to guide new users through setting up Augurk for the first time.

RavenDb fails to start when running Augurk in container

While trying out Augurk running in a Docker container and describing how to use it I noticed that RavenDb fails to start when it is running inside of a Docker container and the data folder (/app/data) is being volume mapped to the host machine. We'll need to figure out if this is a RavenDb issue, a Docker issue or an Augurk issue.

Stack trace is as follows:

System.InvalidOperationException: Unable to start the RavenDB Server
Output:
       _____                       _____  ____
      |  __ \                     |  __ \|  _ \
      | |__) |__ ___   _____ _ __ | |  | | |_) |
      |  _  // _` \ \ / / _ \ '_ \| |  | |  _ <
      | | \ \ (_| |\ V /  __/ | | | |__| | |_) |
      |_|  \_\__,_| \_/ \___|_| |_|_____/|____/


      Safe by default, optimized for efficiency

 Build 41010, Version 4.1, SemVer 4.1.4, Commit dc2e9e3
 PID 35, 64 bits, 4 Cores, Phys Mem 1.952 GBytes, Arch: X64
 Source Code (git repo): https://github.com/ravendb/ravendb
 Built with love by Hibernating Rhinos and awesome contributors!
+---------------------------------------------------------------+


Raven.Client.Exceptions.Server.ServerLoadFailureException: Failed to load system storage
At /app/data/System ---> System.InvalidOperationException: EINVAL when opening /app/data/System/Journals/0000000000000000000.journal
   at Sparrow.Platform.Posix.Syscall.ThrowLastError(Int32 lastError, String msg) in C:\Builds\RavenDB-Stable-4.1\41010\src\Sparrow\Platform\Posix\Syscall.cs:line 350
   at Voron.Platform.Posix.PosixJournalWriter..ctor(StorageEnvironmentOptions options, VoronPathSetting filename, Int64 journalSize) in C:\Builds\RavenDB-Stable-4.1\41010\src\Voron\Platform\Posix\PosixJournalWriter.cs:line 61
   at Voron.StorageEnvironmentOptions.DirectoryStorageEnvironmentOptions.<>c__DisplayClass17_0.<CreateJournalWriter>b__1() in C:\Builds\RavenDB-Stable-4.1\41010\src\Voron\StorageEnvironmentOptions.cs:line 454
   at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
   at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
   at System.Lazy`1.CreateValue()
   at Voron.StorageEnvironmentOptions.DirectoryStorageEnvironmentOptions.CreateJournalWriter(Int64 journalNumber, Int64 journalSize) in C:\Builds\RavenDB-Stable-4.1\41010\src\Voron\StorageEnvironmentOptions.cs:line 462
   at Voron.Impl.Journal.WriteAheadJournal.NextFile(Int32 numberOf4Kbs) in C:\Builds\RavenDB-Stable-4.1\41010\src\Voron\Impl\Journal\WriteAheadJournal.cs:line 124
   at Voron.Impl.Journal.WriteAheadJournal.WriteToJournal(LowLevelTransaction tx, String& journalFilePath) in C:\Builds\RavenDB-Stable-4.1\41010\src\Voron\Impl\Journal\WriteAheadJournal.cs:line 1371
   at Voron.Impl.LowLevelTransaction.CommitStage2_WriteToJournal() in C:\Builds\RavenDB-Stable-4.1\41010\src\Voron\Impl\LowLevelTransaction.cs:line 976
   at Voron.Impl.LowLevelTransaction.Commit() in C:\Builds\RavenDB-Stable-4.1\41010\src\Voron\Impl\LowLevelTransaction.cs:line 841
   at Voron.StorageEnvironment.CreateNewDatabase() in C:\Builds\RavenDB-Stable-4.1\41010\src\Voron\StorageEnvironment.cs:line 463
   at Voron.StorageEnvironment..ctor(StorageEnvironmentOptions options) in C:\Builds\RavenDB-Stable-4.1\41010\src\Voron\StorageEnvironment.cs:line 152
   at Raven.Server.Storage.Layout.StorageLoader.OpenEnvironmentWithPossibleLayoutUpdate(DirectoryStorageEnvironmentOptions options, StorageEnvironmentType type) in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Server\Storage\Layout\StorageLoader.cs:line 40
   at Raven.Server.Storage.Layout.StorageLoader.OpenEnvironment(StorageEnvironmentOptions options, StorageEnvironmentType type) in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Server\Storage\Layout\StorageLoader.cs:line 20
   at Raven.Server.ServerWide.ServerStore.Initialize() in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Server\ServerWide\ServerStore.cs:line 566
   --- End of inner exception stack trace ---
   at Raven.Server.ServerWide.ServerStore.Initialize() in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Server\ServerWide\ServerStore.cs:line 570
   at Raven.Server.RavenServer.Initialize() in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Server\RavenServer.cs:line 261
   at Raven.Server.Program.Main(String[] args) in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Server\Program.cs:line 149


   at Raven.Embedded.EmbeddedServer.<>c__DisplayClass15_0.<<RunServer>b__1>d.MoveNext() in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Embedded\EmbeddedServer.cs:line 243
--- End of stack trace from previous location where exception was thrown ---
   at Raven.Embedded.EmbeddedServer.ReadOutput(StreamReader output, Stopwatch startupDuration, ServerOptions options, Func`3 onLine) in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Embedded\EmbeddedServer.cs:line 305
   at Raven.Embedded.EmbeddedServer.RunServer(ServerOptions options) in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Embedded\EmbeddedServer.cs:line 225
   at Raven.Embedded.EmbeddedServer.GetServerUriAsync(CancellationToken token) in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Embedded\EmbeddedServer.cs:line 145
   at Raven.Embedded.EmbeddedServer.<>c__DisplayClass11_0.<<GetDocumentStoreAsync>b__0>d.MoveNext() in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Embedded\EmbeddedServer.cs:line 103
--- End of stack trace from previous location where exception was thrown ---
   at Raven.Embedded.EmbeddedServer.GetDocumentStoreAsync(DatabaseOptions options, CancellationToken token) in C:\Builds\RavenDB-Stable-4.1\41010\src\Raven.Embedded\EmbeddedServer.cs:line 121
   at Raven.Client.Util.AsyncHelpers.RunSync[T](Func`1 task)
   at Augurk.DocumentStoreProvider..ctor(IHostingEnvironment environment, ILogger`1 logger) in /app/Augurk/DataAccess/DocumentStoreProvider.cs:line 58
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
   at lambda_method(Closure , IServiceProvider , Object[] )
   at Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.<>c__DisplayClass4_0.<CreateActivator>b__0(ControllerContext controllerContext)
   at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass5_0.<CreateControllerFactory>g__CreateController|0(ControllerContext controllerContext)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
   at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)

Feature request: support for Background

In Gherkin one can use Background that sets the stage once per Scenario. This helps keeping scripts maintainable and DRY.
At the moment Backgrounds are not being recognized by Augurk, would be nice though!

Onboarding experience for new developers

I'm new to Augurk, so I'd like some guidance/documentation on starting to develop for Augurk.
For example, what do I need to get the code building en tested on a clean machine.

As starting point, I'll add the things I encountered. Though testing still fails.

  • Visual Studio 201x+ (I used 2017)
  • Change bitness of IIS Express to x64 on Augurk

Where I still struggle:

  • .gitignore contains a rule that should ignore SpecFlow generated code, though every feature file has one in git, except for UML.feature, building therefore does not work
  • I propbably need the SpecFlow for Visual Studio 201x extension, this might solve the previous step
  • Testing all Specifications are ignored, this might be on purpose, please specify
  • Testing all Tests fail with : Voron is prone to failure in 32-bits mode. Use Raven/Voron/AllowOn32Bits to force voron in 32-bit process., this might be on purpose, please specify

Getting HTTP 404 on two fonts in the Augurk site

If you open the website and look at the requests in Fiddler, I had 2 404 errors:

/Augurk/fonts/glyphicons-halflings-regular.woff
/Augurk/fonts/glyphicons-halflings-regular.woff2

These are part of the solution but probably not deployed with the WebDeploy?

TFS build task can't deal with spaces in folder names

The TFS build task for publishing features to Augurk fails when the path to a feature file contains one or more spaces, i.e. if the feature file has the following path (on the build server):

C:\Features\My feature category\MyFeature.feature

The following exception will occur when trying to publish:

System.IO.FileNotFoundException: Could not find file 'C:\Features\My'

Package Manager Console Support

From version 2.1.0 onward we will have a proper commandline tool to both upload and delete features. As this commandline tool comes in a nuget package, which you need to install in the project so you can upload anyway, it would be a logical step to be able to use this tool from the Package Manager Console.

How are we going to do this? Will we add some scripts to the CommandLine package, or add an additional package?

@jmezach Any thoughts on this?

Commandline tool: Cannot combine --productName and ---clearGroup

When using the command line tool you cannot use the --clearGroup option when specifying a value for --productName. This behaviour is not clear in the documentation, only when you take a look at the source code. Please improve the documentation or implement the feature.

Tags has a maximum of 128, which is (too ) low

Upload Feature files with a total of more than 128 Tags.
The Tag dropdown in the upper left part of the page shows only the first 128 Tags,
This is caused by a RavenDB client side default maximum.
In the PR I upped it to 512, which suffices for us, but is of course arbitrary.

Api documentation

Augurk should really provide some useful documentation for its APIs. The only way to upload features is using the API, it would be great if people could actually figure out how to use them.

Version API returns informational version

It looks like our version API (/api/version) currently returns the InformationalVersion of the Augurk assembly. While that provides a lot of detail which can be useful when diagnosing issues, it might not be entirely user friendly and the same information is being displayed on the Configuration page.

We could consider changing this API to return different kind of versions, like a product version and a technical version. Unfortunately that will be a breaking change, which is especially problematic for earlier versions of our CLI. Perhaps we could add a V2 version of the VersionController that returns a different set of information so that we do not break existing usages of the API.

@marktaling What do you think?

Show tabs for branches in alphabetical order

Currently we have several branches.
Product (being the main development branche) and branches for releases.

Currently they are ordered as follows:
Release 12
Product
Release 15
Release 14
Release 13

It would be better when the releases would be ordered alphabetically

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.